自宅サーバのつくりかた。
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
エピローグ
「あとはレッツ・トライです。」