自宅サーバのつくりかた。

Download Report

Transcript 自宅サーバのつくりかた。

なんでも輪講 第17回
おうちでサーバ。
コンピュータ科学 M2 (米澤研)
吉野 寿宏 <[email protected]>
プロローグ
「下準備。」
自宅サーバの 5W1H。

When?


Where?


自宅で、ですね
Who?


まあいつでもいいけど
私が、あなたが、誰かが
What?

自宅サーバを
なんでも輪講 第17回 2005/4/15
何故自宅サーバなのか。

せっかく常時接続の回線があるんだし


手元にあれば自分の好きなようにできるし




常に帯域消費してる人はほとんどいないだろう
レンタルサーバは管理しなくていい分楽だけど…
サーバやさんのサービスにあわせる必要がある
たとえば SSL で遊んだりとかってできるのかな?
でも大半は自分の興味ですけどね (これ重要)
なんでも輪講 第17回 2005/4/15
おしながき。


下準備から
LAN 内のサーバ


ファイルサーバ
公開サーバ


ネットワーク環境
Web サーバをインターネットに公開する


ドメインを運用する


Web サーバ、セキュリティ
DNS
メールサーバを設定する
なんでも輪講 第17回 2005/4/15
第1章
「マシンを準備する。」
目的を定めよう。

サーバを立てて、何をしたいのですか?


Web? → Apache? IIS? Tomcat?
メールサーバ? ファイルサーバ?
ローカルネット内
・ファイルサーバ
・プリントサーバ
インターネット
ドメインなし
・Web サーバ
ドメインあり
・DNS
・メールサーバ
なんでも輪講 第17回 2005/4/15
今回の想定シナリオ。

アプリケーションサーバを作成する





ファイルサーバ
Web サーバ (インターネットに公開)
メールサーバなど
LAN 内に数台の Windows マシンが他に存在
すでにルータが設定され、内側ではプライベート
ネットワークが構築されているものとする

つまりはうちの話なんですけどね
なんでも輪講 第17回 2005/4/15
サーバとクライアント。




サーバ
クライアント
= ご奉仕する人
= お客様
クライアントが要求を出し、サーバが処理する
中央集権的な構造


サービスの権限はすべてサーバ側が保持
中央集権的であるということは、クライアントが増える
に従ってサーバ側で必要リソースが増加
なんでも輪講 第17回 2005/4/15
ハードウェアの選定基準。

スペックは「何をしたいか」による



ファイルサーバならディスク容量とデータの安全性が
一番重要
単に Web サーバとして使うだけならともかく、Java
がでてくると CPU パワー、メモリがないと辛い
そこらに転がってるようなマシンでもいい場合も
よくある

Web サーバとしてページを公開して、くらいならば
それほどパワーはなくてもよい
なんでも輪講 第17回 2005/4/15
重視すべきこと。

安定性



夏の間熱暴走してしまうような構成は避けるべし
できれば「枯れた」ハードウェアで、冒険はしない
ネットワーク関連

Realtek チップ(通称「カニ」)とかは避けたほうが無難


話者はカニでも問題起きたことないですが…
CPU・メモリ・HDD などは、負荷の高いサーバ
(Java Servlet や JSP など)を動かすときに重要

これは普通の PC でも同じですね
なんでも輪講 第17回 2005/4/15
重視しなくてもよいこと。

ビデオカードはチップセット内蔵で十分



サウンドもいりません


サーバで 3D ゲームやったりする人はほとんどいない
RADEON9600 とか乗っけてても、使わなきゃ無駄
エラーが起こったときに萌え萌えヴォイスで知りたい、
とかいう人には必要かもしれませんが
ディスプレイも基本的にいりません


現在別にマシンを持っていて、ディスプレイがあれば、
それを必要なときに使えばよい (ヘッドレス運用)
CPU 切り替え機(KVM とも)を使うのも手
なんでも輪講 第17回 2005/4/15
入手経路について。

メーカー製のオフィス向け PC を使うのはよい


省スペースだし、何より構成が固い
中古で結構安く手に入れられる


Pentium3 1GHz, 128MB PC133 SDRAM, 30GB HDD
くらいで約 2 万円程度か
もちろん自分で組んでもいいですよ


スペックが自由に決められるのが利点
ただしちゃんと安定性などを考えて組むべし


電源は十分?
夏場の熱対策は?
なんでも輪講 第17回 2005/4/15
例: 某自宅サーバの例。(1)

ハードウェア




ソフトウェア



秋葉原の某店にて購入した中古のメーカー製マシン
Intel Celeron 400MHz, 64MB RAM
4.3GB HDD, CD-ROM ドライブつき
FreeBSD 4-STABLE
Apache, sendmail, BIND などなど
かれこれ 3 年ほど、ほとんど無停電で動作中

今のところトラブルは特にない
なんでも輪講 第17回 2005/4/15
例: 某自宅サーバの例。(2)

ハードウェア




ソフトウェア



キューブベアボーンで組んだマシン
Intel Celeron 2.0GHz, 512MB RAM
80GB HDD, CD-RW ドライブつき
FreeBSD 5-STABLE
Apache, samba などなど
Jail で仮想ホスティングめいた実験環境
なんでも輪講 第17回 2005/4/15
OS を選ぶ。


基本的にはお好きなものをどうぞですが
CUI でよければ、UNIX 類でいいのでは


Windows はもともと OS 自体結構リソースを食う
ので、特に古いマシンなどには向かないことも
Linux, *BSD


各種ディストリビューションあります
Solaris


スケジューラなどは、さすがにしっかりしているとかいう噂
Solaris10 が無償提供始まりましたし、検討してみるのも
なんでも輪講 第17回 2005/4/15
OS のインストール。

このときくらいはモニタ・キーボードがないとだめ


他のマシンのを一時的に流用してくるなど
ベースシステムがインストールできたら、リモート
からログインして管理できるように設定


ssh 経由とか telnet とかで
管理者になれるユーザアカウントを作っておくことを
忘れずに

だいたいネットワーク越しには root でログインできないよう
になってるので、ログインしてから su することになります
なんでも輪講 第17回 2005/4/15
第2章
「LAN にサーバを置く。」
ファイルサーバ。

ファイルをためておき、ネットワーク経由で別の
マシンと共有できるようにするサーバ
マシンその1
マシンその2
サーバ
なんでも輪講 第17回 2005/4/15
ファイルの共有。

Windows の「ファイル共有」機能



SMB プロトコルと呼ばれるもの
Samba というサーバソフトウェアを用いることにより、
非 Windows マシンでも共有に参加できるように
UNIX の NFS


学校などではこちらがよく使われている
yp (NIS) とあわせて、アカウント管理を一元化したり
もできる
なんでも輪講 第17回 2005/4/15
ソフトウェアをインストールするま
で。
必要なツール・ライブラリ等のインストール
1.

SSL を使うなら OpenSSL とか
必要に応じてユーザ・グループを作成
2.

常に root で動くプログラムは危険なので、動作用ユーザを
設定できるものもある (Apache, sendmail, BIND など)
プログラム本体のインストール
3.

バイナリパッケージまたはソースからのビルド
設定ファイルの記述・設定確認
4.

このへんはサーバプログラム依存
OS 起動時起動設定
5.

このへんは OS 依存
なんでも輪講 第17回 2005/4/15
プログラム本体のインストール。

バイナリパッケージが使えるならそれが楽



apt (RedHat), dpkg (Debian), pkg_add (FreeBSD)
ただし、プリコンパイルドバイナリは、使いたい機能が
入ってなかったりする場合もあるので、確認してね
なければソースからビルドする


ソースをダウンロードし、展開して configure; make;
make install
ときどきはまることもある


ライブラリのバージョンや必要なライブラリが足りない場合等
FreeBSD ports はビルド手順を自動化してくれる
なんでも輪講 第17回 2005/4/15
ソースからのビルド。


tar+gzip (または bzip2) でパッケージ配布
されていることが多い
大まかな手順
%
%
%
%
%
%
fetch ftp://.../hogehoge-1.0.0.tar.gz
tar xvzf hogehoge-1.0.0.tar.gz
cd hogehoge-1.0.0
./configure …
make
make install

もちろん、正確にはドキュメントを参照すべきです
なんでも輪講 第17回 2005/4/15
configure スクリプト。

ビルド環境を判定してMakefile を生成する



パッケージのコンパイル時設定を行う



コンパイラのチェック、ワード長やバイトオーダの判別
依存するライブラリのありかやバージョンを判別
configure --help で出力されるリストを見て
--with-XXX オプションや --enable-XXX オプションを用いる
例: (php の Apache モジュールのビルド時)
% ./configure --prefix=/usr/local \
--with-apxs2=/usr/local/apache2/bin/apxs \
--disable-cli --without-pear
なんでも輪講 第17回 2005/4/15
configure スクリプト。

よく用いられるオプション類

--prefix




パッケージのベースディレクトリ指定
/usr/local を指定すると、/usr/local/bin, /usr/local/share などに
インストールされる
--bin-dir, --lib-dir などで、ファイル種別ごとに細かく指定可能
--with-x-includes=…, --with-x-libraries=…
X11 のインクルードファイル、ライブラリファイルのありかを指定
環境変数



CC
CPPFLAGS
LDFLAGS
コンパイラ
C プリプロセッサへのオプション
リンカオプション
なんでも輪講 第17回 2005/4/15
FreeBSD ports。

ソースパッケージのビルドを自動化するシステム



必要なライブラリやツールなどを再帰的にビルド、
インストール
インストール後には、バイナリパッケージと同様に
管理できる
オプション設定を半 GUI で設定したりできるものも



OS インストーラのように、CUI でダイアログを表示する
できなくとも、make へのオプションで設定できるものもある
あとはパッケージが分かれていることもあります

databases/db42 と databases/db42-nocrypt とか。
なんでも輪講 第17回 2005/4/15
Samba の設定。

サーバの設定(/usr/local/etc/smb.conf)を編集



インストールの仕方によってディレクトリは異なります
Windows の INI ファイルのような形式での設定
smb.conf(5) man page に書式や設定可能な
パラメータなどの説明が


man をちゃんとシステムが見つけられる位置にインストール
していれば man smb.conf で見られるはず
Samba ユーザとパスワードの設定


smbpasswd ユーティリティを用いる
すでにある認証機構(PAM など)を使うなら必要ない
なんでも輪講 第17回 2005/4/15
Samba を起動してみる。


samba-3.0.12 を ports からインストール
とりあえず軽く設定





ワークグループを設定
hosts allow に、サーバのおいてある LAN のアドレス(とループ
バックアドレス)を設定
passdb backend を tdbsam に設定(デフォルト)
Windows マシンのユーザ名とマシンのユーザ名が
異なるので、ユーザ名マッピング(username map)を設定
Samba ユーザを作成
# smbpasswd -L -ae ユーザ名
# smbpasswd –L ユーザ名
なんでも輪講 第17回 2005/4/15
Samba を起動してみる。

設定できたらとりあえず起動してみる

LAN 内なのでおきらくに
# /path/to/nmbd –D
# /path/to/smbd –D

Windows マシンから見えるかどうか確認


「ファイル名を指定して実行」から \\(IP アドレス)\ と
入力
パスワード入力を求められるか、フォルダが表示
されれば成功
なんでも輪講 第17回 2005/4/15
第3章
「自分のWeb サーバを
つくる。」
前提。

ページ自体を作る部分は扱わないので



HTML を書いたりするのはできるものとして
サーバへの ftp によるアップロードなんかもやったこと
あるものとして
とにかくサーバを設定することだけ考えます


ここでは Apache を使うことにします
しかも 2.0 系だったりする

うちの環境がこれだから…
なんでも輪講 第17回 2005/4/15
Apache Web Server。

http://httpd.apache.org/


2005/2 時点で全世界の Web サーバのおよそ 68%
のシェアを占めてるとかなんとか
多種多様な環境に対応

UNIX 系 OS はもちろん Windows でも動作
なんでも輪講 第17回 2005/4/15
Apache のビルド。


通常の tarball と同じ
とりあえずオプション設定(抜粋)
% ./configure --prefix=/usr/local/apache2 \
--enable-v4-mapped --enable-mime-magic \
--enable-ssl --enable-http --enable-info \
--enable-cgi --enable-vhost-alias \
--enable-rewrite --enable-so

よくテストされているイメージがあるので、わりとはまり
にくいサーバかもしれない
なんでも輪講 第17回 2005/4/15
Apache のビルド。

オプションの説明(一部)




--enable-ssl
HTTP/SSL サポート(要 OpenSSL)
--enable-mime-magic
ファイルの MIME タイプを内容から自動判別
ないと拡張子を(サーバに)登録してあるファイルのみの判別
になるので、突然ダウンロードダイアログとか出ることも
--enable-vhost-alias
Virtual Host を使う設定
--enable-dav, --enable-davfs
WebDAV 関連(Web サーバを通常のディレクトリとして
扱ったりすることができるとか)
なんでも輪講 第17回 2005/4/15
Apache のビルド。

オプションの説明(一部)



--enable-info
HTTP サーバの詳細情報を報告するモジュール
--enable-rewrite
URL を regex (正規表現)を用いて書き換える
--enable-so
外部モジュールの動的ロード(DSO)を有効化
mod_php など外部モジュールは、Apache に静的
リンクするか DSO でロードするか選べる
なんでも輪講 第17回 2005/4/15
Apache の設定。

httpd.conf

サーバの動作を記述



サーバ起動時に読み込まれる


何番のポートを Listen するか?
Virtual Host の設定は?
ので、変更した場合サーバの再起動が必要
.htaccess

各ディレクトリごとのアクセス設定などを行える



どのファイルを許可するか? 拒否するか?
どのホストを許可するか? 拒否するか?
毎リクエストごとに読み込まれる
なんでも輪講 第17回 2005/4/15
httpd.conf。
# httpd.conf
ServerRoot "/usr/local/apache2“
Timeout 300
KeepAlive On
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all
</Directory>
# prefork MPM
<IfModule prefork.c>
StartServers
5
MinSpareServers
5
MaxSpareServers
10
MaxClients
150
MaxRequestsPerChild 100
</IfModule>
ServerRoot /home/www/default/wwwroot
<Directory “/home/www/default/wwwroot”>
Options Indexes MultiViews
FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
Listen 80
LoadModule php_module modules/libphp4.so
LoadModule jk_module modules/mod_jk.so
…
…
NameVirtualHost *:80
<VirtualHost *:80> … </VirtualHost>
なんでも輪講 第17回 2005/4/15
httpd.conf。
# httpd.conf
ServerRoot "/usr/local/apache2“
Timeout 300
KeepAlive On
# prefork MPM
<IfModule prefork.c>
StartServers
5
MinSpareServers
5
MaxSpareServers
10
MaxClients
150
MaxRequestsPerChild 100
</IfModule>
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all
</Directory>
サーバのパフォーマンス
ServerRoot /home/www/default/wwwroot
パラメータやどのポートで
<Directory “/home/www/default/wwwroot”>
Options Indexes MultiViews
動くか、どのモジュールを
FollowSymLinks
AllowOverride All
ロードするかを指定
Order deny,allow
Allow from all
</Directory>
Listen 80
LoadModule php_module modules/libphp4.so
LoadModule jk_module modules/mod_jk.so
…
…
NameVirtualHost *:80
<VirtualHost *:80> … </VirtualHost>
なんでも輪講 第17回 2005/4/15
httpd.conf。
# httpd.conf
ServerRoot "/usr/local/apache2“
Timeout 300
KeepAlive On
Web
ルートディレクトリや、
# prefork MPM
<IfModule
prefork.c>
各ディレクトリの
StartServers
5
MinSpareServers
5
アクセス権限などを設定
MaxSpareServers
10
MaxClients
150
MaxRequestsPerChild 100
</IfModule>
Listen 80
LoadModule php_module modules/libphp4.so
LoadModule jk_module modules/mod_jk.so
…
バーチャルホスト設定
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all
</Directory>
ServerRoot /home/www/default/wwwroot
<Directory “/home/www/default/wwwroot”>
Options Indexes MultiViews
FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
…
NameVirtualHost *:80
<VirtualHost *:80> … </VirtualHost>
なんでも輪講 第17回 2005/4/15
SSL の設定。

サーバ側の証明書が必要なので作る

OpenSSL で作れます

まず秘密鍵・公開鍵のペアを作成
% openssl genrsa -out server.key 1024


このとき暗号化してしまうとサーバ起動時にパスフレーズを
きかれて止まるので注意
証明書リクエストを作成
% openssl req -new -key server.key -out server.csr

CA が署名 (または自己署名で作ることも可)

もし自分で CA を立てているのであれば、
% openssl ca -in server.csr -out server.crt
なんでも輪講 第17回 2005/4/15
SSL の設定。

X.509 証明書


公開鍵と証明書の主体の情報などを含む
信頼された証明機関によって署名されることで効力を
持つように

なので、秘密鍵は別にいる

Apache の場合 ssl.conf を編集
なんでも輪講 第17回 2005/4/15
第4章
「サーバをインターネットに
公開するには。」
次のステップ。


ここまでで、Web サーバを設定した
ローカルで Web をあげていてもあまり仕方ない


スケジュール管理の Web アプリケーションとかなら
ともかく
Web ページって基本的に情報発信のためのもの
⇒ 自分のサーバをインターネットに公開する!

そのために何が必要?
なんでも輪講 第17回 2005/4/15
サーバを公開する。

外部のネットワークからアクセスできるように
するだけ

ルータがあってプライベートネットワークが設定されて
いるのならば、ルータの設定をいじる


または、サーバにルータの機能をやらせる



外部からの接続を特定のアドレス(=サーバなわけですが)
にリダイレクトすればよい
PPPoE やらせて、NAT たてて、DHCP サーバたてて…
どちらでもいいけど、ここではとりあえず置いておいて
でもちょっと待って!
なんでも輪講 第17回 2005/4/15
ローカルネットとインターネットでは
何が違うのか。

ローカルネット

アクセスするのは自分(または仲間内・家族内)のみ


したがってサービスがおちてても影響範囲はその程度
インターネット

(特に制限しなければ)世界中からアクセス可能


サービスの安定性が非常に重要となる
セキュリティの設定が重要


甘いと、クラッカーに侵入されてしまうこともある
DoS 攻撃などの踏み台にされたり、spam(迷惑メール)の
発信の片棒を担がされたり
なんでも輪講 第17回 2005/4/15
ネットワークの過去・現在。

以前は



28.8~128Kbps
128K~100Mbps
現在ではどうか



一般ユーザの回線
企業などの回線
一般ユーザの回線
企業などの回線
64K~100Mbps
10M~1Gbps
一般ユーザの回線速度が劇的に向上した

中小規模の企業向け回線とほぼ同等まで
なんでも輪講 第17回 2005/4/15
プロバイダの選定。

バックボーンがしっかりしているところがオススメ

ユーザの回線速度の上昇に対し、バックボーンは
それほど増加していない
→混雑時にバックボーンが飽和する可能性



1Gbps のバックボーンは、もし FTTH 100Mbps のユーザ
が全速で使ったら、10 人で飽和してしまう!
プロバイダの中にはネットワーク構成図を公開して
いるところもあるので、それを参考にするとよい
サポート体制

ISP ネットワークでトラブルが起きた場合の緊急窓口
を用意しているところがあるとうれしいかも
なんでも輪講 第17回 2005/4/15
バックボーンネットワークを見る。 (1)

IIJ の例 (東京周辺)

自ネットワークのバック
ボーンを図示している
なんでも輪講 第17回 2005/4/15
バックボーンネットワークを見る。 (2)

InfoSphere の例


国内の主要バックボーン
ネットワークとのパイプの
太さが見える図
用語

IX (インターネット・エクス
チェンジ・ポイント)

なんでも輪講 第17回 2005/4/15
IP ネットワークの中心地
固定 IP アドレスの誘惑。

通常は動的な割り当て



プロバイダが持っている IP アドレスのプールから
接続しなおすごとに違う IP アドレスが割り当てられる
しかしサーバを運用するのであれば、アドレスが固定の
方がよい

IP アドレスが変わった場合、何らかの方法でアクセス
しようとしたユーザがそのことを知る必要がある



サーバに聞けばいいが、どの IP アドレスにいるのか不明
クライアントに通知するにしても、誰がクライアントなのかサーバ側
にはわからない
Dynamic DNS などのサービスを用いる解決法もある
なんでも輪講 第17回 2005/4/15
固定 IP アドレスの誘惑。

固定 IP アドレスをもらえるプロバイダ

1IP



一般ユーザ向けでも結構ある
アサヒネット(Bフレッツ向け無料), InfoSphere(月額),
wakwak(月額 2,000 円~) など
8~16IP


SOHO 向けで提供しているところがあるが、一般ユーザ
向けよりは若干値段が高い
InfoSphere(月額 11,500 円) など
なんでも輪講 第17回 2005/4/15
IP アドレスが複数あると何がよいのか。

DNS の逆引きゾーンの権威がもらえる

1IP ではホスト名の逆引き(IP アドレスからホスト名
への変換)は完全に自由にはならないことが多い



自分で持っているドメインを使いたくても、プロバイダの指定
した名前になってしまうことが多い
複数 IP だと
IP アドレスベースのバーチャルホスティングが可能


別のドメインのコンテンツを別の IP アドレスに割り当てる
⇔ 名前ベースバーチャルホスティング


IP アドレスは共用するが、より上のプロトコルでバーチャル
ホスティングに対応
たとえば HTTP 1.1 の場合クライアントは Hosts: ヘッダを送るの
で、それでどのホストか判別できる
なんでも輪講 第17回 2005/4/15
ここでちょっと問題です。

Apache を用いて、名前ベースバーチャル
ホスティングの設定を行いました


SSL を使うように設定し、そちらでも名前ベース
バーチャルホスティングを行いたいと思います



うまく動くことを確認しました
証明書をそれぞれのドメイン用に作成しました
しかし証明書が選択されません
何故でしょう?
なんでも輪講 第17回 2005/4/15
Dynamic DNS サービス。

動的に割り当てられる IP アドレスに対してホスト
名を割り当てるサービス



サーバが、Dynamic DNS サービスに対して自分の
IP アドレスを通知
クライアントは Dynamic DNS サービスに、ホスト名
を用いてサーバの IP アドレスを問い合わせる
技術的には、A レコードの update をできるようにしておいて、
TTL を短くすることで対応

しかし完全ではないが
なんでも輪講 第17回 2005/4/15
Dynamic DNS サービス。
ISP
サーバ
The
Internet
Dynamic DNS
サービス
なんでも輪講 第17回 2005/4/15
クライアント
Dynamic DNS サービス。
IP アドレスください
ISP
サーバ
The
Internet
これ使ってね。
aaa.bbb.ccc.ddd
Dynamic DNS
サービス
なんでも輪講 第17回 2005/4/15
クライアント
Dynamic DNS サービス。
私はユーザ hoge です。
アドレスは aaa.bbb.ccc.ddd
ISP です。
サーバ
The
Internet
hoge.dyndns.org に登
録しておきます。
Dynamic DNS
サービス
なんでも輪講 第17回 2005/4/15
クライアント
Dynamic DNS サービス。
ISP
hoge.dyndns.org は
どこですか?
サーバ
The
Internet
aaa.bbb.ccc.ddd
ですよ。
Dynamic DNS
サービス
なんでも輪講 第17回 2005/4/15
クライアント
Dynamic DNS サービス。
もしもし?
はいはい?
ISP
サーバ
The
Internet
Dynamic DNS
サービス
なんでも輪講 第17回 2005/4/15
クライアント
第5章
「セキュリティを確保する。」
セキュリティの確保。

LAN 内ではわりと緩めのセキュリティで管理

管理などの利便性を重視




もちろん内部犯を想定する必要がないということではない



telnet, ftp など暗号化されていないプロトコルが通る
rlogin などによってパスワードレスで認証できたりする
特別なサービス(ファイル共有など)が使える
個人情報保護法とか
一方 WAN 側のマシンは信用できない可能性
サーバは WAN と LAN の間に位置

もしサーバに侵入されたら、どの程度影響する?
なんでも輪講 第17回 2005/4/15
ネットワークへの侵入。
The
Internet
LAN
なんでも輪講 第17回 2005/4/15
ネットワークへの侵入。
The
Internet
LAN
プライベートネットワークなので
直接はアクセスできない
なんでも輪講 第17回 2005/4/15
ネットワークへの侵入。
一旦サーバに侵入して
しまえば内部マシンにも
アクセス可能
The
Internet
LAN
なんでも輪講 第17回 2005/4/15
侵入される経路。

想像しやすいパスワードを用いている
盗聴によってパスワードが盗まれる
ソーシャルクラッキング

サーバや OS の脆弱性を利用する




サーバが管理者権限で動いていたりすると、とても
危ない
ウィルスなどがあけたバックドアを使用
なんでも輪講 第17回 2005/4/15
セキュリティを確保するための手
段。

不必要なサービスを公開しない


パスワードはある程度複雑なものを



または公開鍵認証など、別の手段を用いる
定期的に変えるとなおよい
暗号化通信を用いる


公開されていなければ、脆弱性を利用できない
盗聴されても内容が漏れないようにする
ファイアウォールを設定する
なんでも輪講 第17回 2005/4/15
セキュリティを確保するための手段。

きちんとセキュリティパッチをあてる


重要な更新は Security Advisory でチェックすべし
侵入の影響範囲を削減する


サーバプロセスを chroot や jail で動かすなど
システムのうち重要なファイルの read-only 化


chflags schg
ローカルマシンでも信用しない部分を作る

アクセスポリシーをよく考えるべし、ということ
なんでも輪講 第17回 2005/4/15
ファイアウォールを設定する。


ネットワークの境界でパケットを調査
内側 → 外側


外に通信しに行く場合はわりと緩めでよいが
発信元を偽っていたりするものはドロップする必要


ウィルスや、侵入されているという印である可能性が高い
外側 → 内側

外側マシンは基本的に信用しない



できればホワイトリスト式(明示的に指定したもののみ許可)でいく
のが望ましい
不必要なサービスへはパケットをドロップする
でも出先からのアクセスラインが全くないとリモート管理できなく
なって困ることもあるので、利便性とのトレードオフが存在
なんでも輪講 第17回 2005/4/15
chroot。

プロセスがアクセス可能なファイルシステム領域
を制限



/chroot を / にみせかける、など
子孫のプロセスにも伝播し、その中に一旦入ると
抜け出す術はない
改竄防止に用いることができる
OS のツリーをコピーし、chroot してサーバを運用
⇒ OS の重要なバイナリファイルを書きかえられても影
響小
 シグナル送信などは防ぐことができない

なんでも輪講 第17回 2005/4/15
FreeBSD jail。

chroot に加え、ネットワークインターフェイスと
プロセス空間も制限する機構

自ホストとして使える IP アドレスを一つだけに制限


jail 内のプロセスから jail 外への通信制限



alias などで IP アドレスをたくさん割り当てておけばよい
たとえばシグナル送受信
ps(1) や procfs でも、見えるプロセスは自分と同一の jail に
いるプロセスのみ
root といえども権限が制限される


mknod はできなくなる
mount もできなくなる(umount はできたかもしれないけど)
なんでも輪講 第17回 2005/4/15
FreeBSD jail の立ち上げ。
1.
ソースツリーを一度 build するのが推奨される
% cd /usr/src
% make buildworld
2.
jail のディレクトリに OS ツリーを再現
% make installworld DESTDIR=/path/to/jail
% cd etc; make distribution DESTDIR=/path/to/jail \
NO_MAKEDEV=yes
3.
procfs をマウント
% mount -t procfs procfs /path/to/jail/proc
なんでも輪講 第17回 2005/4/15
FreeBSD jail の立ち上げ。
必要に応じて devfs をマウント
4.
4.X の場合は MAKEDEV する

% cd /path/to/jail/dev; sh MAKEDEV jail
5.X の場合は devfs(8) のルールを書いてアクセスを制限す
る必要があるかもしれない





/dev/tty* はログインに必要
/dev/random などの PRNG は ssh や SSL が使用する
/dev/null, /dev/zero
他は危ないので隠しておいたほうが賢明

5.
ディスクに dd されたりしたら…
Jail を実行する
% jail /path/to/jail jail.some.domain 192.168.xxx.xxx \
/bin/sh
#
なんでも輪講 第17回 2005/4/15
FreeBSD jail の立ち上げ。
jail 内側の環境設定を行う
6.
/etc/rc.conf とかをいじくる






sshd 立ち上げる、inetd いらない、sendmail いらない等
設定用ユーザアカウント作成
syslog を外部に飛ばすように設定
…
たくさん jail を作る場合は、ここまでをアーカイブしておくと
便利
仮想マシン的に立ち上げる
7.

/etc/rc を実行するようにする
% jail /path/to/jail … /bin/sh /etc/rc

あとは ssh ログインするなりして環境設定を継続
なんでも輪講 第17回 2005/4/15
第6章
「ドメインを運用する。」
ドメイン名の効用。
 覚えやすい。
なんでも輪講 第17回 2005/4/15
ドメインを取得するには。

レジストラに申請





あちこちあります
適当に検索して安いところを選ぶ等
汎用 JP
http://www.jprs.jp/ が元締め
属性 JP (.co.jp, .or.jp, .ne.jp など)
http://www.nic.ad.jp/ が元締め
gTLD (.com, .org, .net など)
.to
http://www.tonic.to/
なんでも輪講 第17回 2005/4/15
ドメインを運用するには。

DNS が必要

レジストラに DNS のホスト名(とアドレス)を登録


「このドメインの情報はここに正確な情報がある」
… 「権威のあるネームサーバ」と呼ばれます
各ドメインには 1 つ以上、権威のあるネームサーバ
が必要
なんでも輪講 第17回 2005/4/15
ネームサーバを設定する。

ドメインは「ゾーン」として記述される

ゾーンの例:
@
IN
SOA
ns1
mail
IN
IN
IN
IN
IN
NS
MX
A
A
A
ns1.XXXXXXX.XX. admin.eva-01.jp.
05041201
; Serial
3600
; Refresh
1800
; Retry
3600000 ; Expire
3600 ) ; Minimum
ns1
0
mail
210.150.178.20
210.150.178.18
210.150.178.18
CNAME
CNAME
web.tb.eva-01.jp.
web.tb.eva-01.jp.
testing IN
tb
IN
なんでも輪講 第17回 2005/4/15
(
ネームサーバを設定する。

SOA レコードはゾーンの情報を表す
• 更新時刻
ドメインは「ゾーン」として記述される
• データの TTL (キャッシュ時間)など

ゾーンの例:
@
IN
SOA
MX
A
A
A
ns1.XXXXXXX.XX. admin.eva-01.jp.
05041201
; Serial
3600
; Refresh
1800
; Retry
3600000 ; Expire
3600 ) ; Minimum
ns1
0
mail
210.150.178.20
210.150.178.18
210.150.178.18
CNAME
CNAME
web.tb.eva-01.jp.
web.tb.eva-01.jp.
A レコードは名前から IP アドレスへ
の関連付けを表す
IN
NS は AAAA
ちなみに
IPv6
ns1
mail
IN
IN
IN
IN
testing IN
tb
IN
なんでも輪講 第17回 2005/4/15
(
ネームサーバを設定する。

ドメインは「ゾーン」として記述される

ゾーンの例:
@ レコードは別のホスト名へ
IN
SOA
ns1.XXXXXXX.XX. admin.eva-01.jp.
CNAME
05041201
; Serial
3600
; Refresh
の参照を表す
(
1800
; Retry
3600000 ; Expire
3600 ) ; Minimum
ns1
mail
IN
IN
IN
IN
IN
testing IN
tb
IN
NS
MX
A
A
A
ns1
0
mail
210.150.178.20
210.150.178.18
210.150.178.18
NS レコードは権威を持つ
CNAMEネームサーバのホスト名を表す
web.tb.eva-01.jp.
CNAME
MXweb.tb.eva-01.jp.
レコードはメールの送り先ホ
スト名を表す (0 は優先度)
なんでも輪講 第17回 2005/4/15
セカンダリ NS を用意する。


DNS が 1 つしかないと、そのホストへの接続が
できなくなった場合に困る
なので、異なるネットワークに複数の DNS を
置いておくと安心

自宅サーバだと、サーバにつながらなくなることと
同義なので、実は耐故障性にあまり意味はないけど
なんでも輪講 第17回 2005/4/15
メールを受信する。


そのドメイン宛のメールを受信するようなメール
サーバ設定を行って
ドメインの MX レコードにそのメールサーバを
指定する


MTA は MX レコードを参照してそのホストに対して
メールを送信しようとする
MX レコードがない場合は A レコードが使われること
もありますが。
なんでも輪講 第17回 2005/4/15
Sendmail の場合。

http://www.sendmail.org/

sendmail.cf, submit.cf というファイルによって
動作設定を行う



MTA として動作する場合の設定ファイル
ローカルからメールを送信する(MSP として
動作する)場合の設定ファイル
が、人間には読みづらいので、設定ツールを使う
sendmail.cf
submit.cf


CF (8.8 以前)
cf (sendmail のディストリビューションに標準添付)

これから設定するならこっちの方がよいでしょう
なんでも輪講 第17回 2005/4/15
Sendmail.cf の中身。
V10/Berkeley
Dw mail
Dm eva-01.jp
Dj $w.$m
Fw/etc/mail/local-host-names
Kaccess hash –T<TMPF> -o /etc/mail/access
…
#########################################
### Ruleset 3 -- Name Canonicalization
#########################################
Scanonify=3
# handle null input (translate to <@>
special case)
R$@
$@ <@>
# strip group: syntax (not inside angle
brackets!) and trailing semicolon
R$*
$: $1 <@>
mark addresses
R$* < $* > $* <@>
$: $1 < $2 > $3
unmark <addr>
R@ $* <@>
$: @ $1
unmark @host:...
R$* [ IPv6 : $+ ] <@>
$: $1 [ IPv6 :
$2 ]
unmark IPv6 addr
R$* :: $* <@>
$: $1 :: $2
unmark node::addr
R:include: $* <@>
$: :include: $1
unmark :include:...
R$* : $* [ $* ]
$: $1 : $2 [ $3 ]
<@>
remark if leading colon
R$* : $* <@>
$: $2
strip colon if marked
R$* <@>
$: $1
unmark
R$* ;
$1
strip trailing semi
R$* < $+ :; > $*
$@ $2 :; <@>
catch <list:;>
R$* < $* ; >
$1 < $2 >
bogus bracketed semi
…
なんでも輪講 第17回 2005/4/15
Sendmail.cf の中身。
V10/Berkeley
Dw mail
Dm eva-01.jp
Dj $w.$m
R$* < $* > $* <@>
$: $1 < $2 > $3
unmark <addr>
R@ $* <@>
$: @ $1
unmark @host:...
R$* [ IPv6 : $+ ] <@>
$: $1 [ IPv6 :
$2 ]
unmark IPv6 addr
R$* :: $* <@>
$: $1 :: $2
unmark node::addr
R:include: $* <@>
$: :include: $1
unmark :include:...
R$* : $* [ $* ]
$: $1 : $2 [ $3 ]
<@>
remark if leading colon
R$* : $* <@>
$: $2
strip colon if marked
R$* <@>
$: $1
unmark
R$* ;
$1
strip trailing semi
R$* < $+ :; > $*
$@ $2 :; <@>
catch <list:;>
R$* < $* ; >
$1 < $2 >
bogus bracketed semi
変数の設定など
Fw/etc/mail/local-host-names
Kaccess hash –T<TMPF> -o /etc/mail/access
…
#########################################
### Ruleset 3 -- Name Canonicalization
#########################################
Scanonify=3
ここらへんは
# handle null input (translate
to <@>
アドレス書き換えルールを
special case)
R$@
$@ <@>
定義している
# strip group: syntax (not inside angle
brackets!) and trailing semicolon
R$*
$: $1 <@>
mark addresses
…
なんでも輪講 第17回 2005/4/15
cf を用いて設定する。

cf は m4 言語によって記述されている



参考: CF (WIDE-CF)は Perl で記述されてます
文字列はバッククオート( ‘ )とシングルクオート( ’ )で
囲まれるので注意
変数定義などを書き換えるだけでほぼ十分



DEFINE による変数定義をしたり
FEATURE によってオプション機能を使用することを
宣言など
ルール定義の部分は、ユーザは気にしなくてよい
なんでも輪講 第17回 2005/4/15
sendmail.mc の例。
divert(0)dnl
VERSIONID(`$Id: generic-bsd4.4.mc,v 8.10
1999/02/07 07:26:02 gshapiro Exp $')
OSTYPE(bsd4.4)dnl
DOMAIN(`generic')dnl
dnl === BASIC CONFIGURATIONS ===
Dwmail
Dmeva-01.jp
LOCAL_DOMAIN(`$m')
define(`confDOMAIN_NAME', `$w.$m')
MASQUERADE_AS(`$m')
FEATURE(`masquerade_envelope')
FEATURE(`masquerade_entire_domain')
FEATURE(`always_add_domain')
FEATURE(`access_db')
VIRTUSER_DOMAIN(`…’)
FEATURE(`virtusertable')
FEATURE(`virtuser_entire_domain')
dnl === auth information ===
define(`confAUTH_MECHANISMS', `DIGEST-MD5
CRAM-MD5 LOGIN PLAIN')
define(`confAUTH_OPTIONS', `p,y')
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
define(`confDEF_AUTH_INFO',
`/etc/mail/auth-info')dnl
FEATURE(`no_default_msa')
dnl FEATURE(`authinfo')
dnl === STARTTLS option ===
define(`confCACERT_PATH',
`/etc/mail/certs')dnl
define(`confCACERT', `/etc/ssl/eva01.jp/cacert.pem')dnl
define(`confSERVER_CERT',
`/etc/mail/certs/smtls.crt')dnl
define(`confSERVER_KEY',
`/etc/mail/certs/privkey.pem')dnl
dnl === mailer definitions ===
MODIFY_MAILER_FLAGS(`LOCAL', `+S')
MAILER(local)dnl
MAILER(smtp)dnl
なんでも輪講 第17回 2005/4/15
メールサーバをテストする。

sendmail の -bv モードでローカルに配信される
かどうかをチェック
% sendmail –d0.1 –bv [email protected]

デーモンを動かしてみて、自分に送ってみる


エラーが出たらサーバのログを見よう
spam をリレーしないように設定できているか



ローカル→ローカル、ローカル→リモート
リモート→ローカル
リモート→リモート (第三者中継なので、蹴るべき)
なんでも輪講 第17回 2005/4/15
メールを受信する。


メールサーバを作っても、そこからメールを取り
出せなければしょうがないよね
メールを受信するプロトコル

POP3



ISP などで最もよく使われているプロトコル
パスワードが平分で流れるので、そのままだと盗聴された
場合に危険 (APOP などを用いるとよい)
IMAP


[qpopper など]
[uw-imap など]
メールをローカルに保存するのではなく、リモートに保存して
おいてごそごそいじるプロトコル
複数箇所から同じサーバにアクセスしたい時には便利
なんでも輪講 第17回 2005/4/15
エピローグ
「あとはレッツ・トライです。」