(2)外部公開用サーバー

ここでは、外部に公開するためのサーバーについて紹介しています。これをやらないと似非常時接続のメリットはありませんよね。

ルーター設定

ルーターを初期状態で使っている場合は、LAN上のマシンからインターネットのマシンへのアクセスは可能ですが、その逆のアクセスはできません。従って、このままではサーバーを立ててもインターネットからはアクセスできません。
これは、LAN上のマシンは「プライベートアドレス」というインターネット上で利用できないアドレスを持っているからです。(ちなみに、インターネット上で利用できるアドレスは「グローバルアドレス」)

LANからインターネットへのアクセスはルーターが自動的にアドレスをプライベートアドレスからグローバルアドレスに変換してくれるのですが、その逆は手動で設定しないといけません。この機能をヤマハでは「静的NAT」と呼んでいます。メーカーによって呼び名はいろいろとありますが、同様の設定を行う必要がある点は共通です。

RTA54iでは、webの設定から「接続設定→プロバイダ接続管理→登録の修正→NAT」で設定できるので、これにおまかせするのが楽です。同時にフィルタリングも設定してくれるので。

メールサーバー(MTA)

せっかく新しいサーバーなのでsendmail以外のMTAを入れてみようと思い、Postfixを導入してみました。sendmailより設定が簡単なのは当然としても、qmailより設定方法は親しみやすいと感じました。qmailだと1つの項目のために1つのファイルを作るという独特の手法で設定を行いますが、Postfixは他の大多数のソフトウェアと同様、1つのファイルで各項目に値を代入するという方式です。

基本設定

設定ファイルは/etc/postfix/main.cfです。".cf"という拡張子でも、「アレ」とは全く別物なので恐がらなくても大丈夫。 デフォルト以外の値を設定した項目は以下のとおりです。 ちなみに、これは"postconf -n"で表示することができます。

allow_mail_to_commands = alias,forward,include
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
header_checks = regexp:/etc/postfix/header_checks
mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME
mydestination = $myhostname, localhost.$mydomain $mydomain
mydomain = hodogaya.org
myhostname = mail.hodogaya.org
myorigin = $mydomain
virtual_maps = hash:/etc/postfix/virtual
メール送受信に最低限必要な部分はmydestination, myhostname, mydomain, myoriginの4つです。これを正確に設定しないと、第三者リレーが可能な状態になっていたり、逆に送信されるべきメールが送信されなかったりします。

バーチャルドメイン

バーチャルドメインの設定は、main.cfにvirtual_mapsを設定した(前項の最下行)上で、/etc/postfix/virtualというファイルに
virtual.dom anything
yossy@virtual.dom yossy
といった感じで書いていきます。1行目がvirtual.domというドメイン宛のメールを受け入れるという宣言("anything"の部分は何を書いても良い)で、2行めが受け入れるアドレスとその転送先になります。
書き換えた後は"postmap virtual"でDBファイルを作ればOK。postfixへの反映はすぐには行われないらしいのですが、すぐに反映させたければ"postfix reload"を実行すればいいです。
あ、もちろんバーチャルドメインのMXをこのホストに向けるのも忘れてはいけません。これはDNSのお仕事。

SPAM対策フィルター

最近「Achi-Kochi Mail」「Direct Email」というSPAM送信ツールを利用したSPAMが立て続けにやってきたので、これを拒否するようにSPAM対策を行いました。
これらのSPAM送信ツールはご丁寧にもX-Mailer:ヘッダーをつけてくれるので、これをキーにして拒否します。
まず、以下の内容のファイルを作ります。ファイル名は/etc/postfix/header_checksとしておきましょう。
/^X-Mailer: Achi-Kochi Mail/   REJECT
/^X-Mailer: Direct Email/       REJECT
そして、/etc/postfix/main.cfにheader_checks変数を設定して"postfix reload"。これでOKです。
これに限らず、ヘッダーの正規表現を書き、その右に"REJECT"と書けば、それにマッチしたメールは相手に返送します。返送もせずに捨てる場合は"REJECT"の代わりに"IGNORE"と書けばよいらしいです。(これはバージョンによる)
ヘッダーでなく本文でチェックしたい場合は、main.cfで"body_checks=(ファイル名)"とすれば良いです。

Postfix vs linuxconf

ところで、Postfixとlinuxconfの相性がどうも良くないようです。Postfixを入れると/usr/sbin/sendmailが互換ラッパープログラムに置き換わるのですが、これにはSUID/GUIDビットは立っていません(オリジナルのsendmailでは立っています)。ところが、linuxconfによって何らかの設定変更をすると、強制的に/usr/sbin/sendmailのSUID/GUIDが立てられてしまい、その結果いちいち手動で直さないといけない羽目になります。これが今ちょっと困っていることです。

DNSサーバー

BINDの9.1.2を利用しています。

ブロードバンドルーター(またはISDNルーター)+NATの環境で一番問題になるのが、サーバーのアドレスが内部と外部で異なるということです。
わが家の環境で言うと、インターネット側からwww.hodogaya.orgを引くとグローバルアドレス(203.141.142.176)を返してほしいのですが、家のLAN側から引いた場合はプライベートアドレス(192.168.0.2)を返してほしいのです。
BIND 8までは、1台のマシンに2つのnamedを起動する必要があった(けど、面倒なのでやっていなかった)のですが、BIND 9では1つのnamedで対応できるようになったのでインストールしてみました。

named.confの内容はこんな感じ。dbファイルの中身は、リンクをたどって下さい。

//
// rndcを使うための設定
//
key "key" {   
  algorithm "hmac-md5";
  secret "*********************";  // パスワードなので伏せ字
};

server 127.0.0.1 { keys {"key"; }; };

controls {
  inet 127.0.0.1 allow { 127.0.0.1; } keys { "key"; };
};

//
// オプション
//
options {
	directory "/var/named";
	allow-query { any ; };
	allow-transfer { 205.166.226.38; 209.166.62.198; };  // ns[12].granitecanyon.com
} ;

//
// LAN内への応答設定
//
view "internal" {
      match-clients { 192.168.0.0/24; 127.0.0.0/8; };        // 内部アドレス
      recursion yes;

        //// 正引き設定
	zone "." {
		type hint;
		file "named.ca";
	};

	zone "localhost" {
		type master;
		file "in/localhost";
	};

	zone "hodogaya.org" {
		type master;
		file "in/hodogaya.org";
	};

	zone "virtual.domain" {   // これは仮名
		type master;
		file ""in/virtual.domain";
	};

        //// 逆引き設定
	zone "0.0.127.in-addr.arpa." {
		type master;
		file "in/localhost.rev";
	};

	zone "0.168.192.in-addr.arpa." {
		type master;
		file "in/hodogaya.org.rev";
	};
};

//
// Internet上への応答設定
//
view "external" {
      match-clients { any; };
      recursion no;
        //// 正引き設定
	zone "hodogaya.org" {
		type master;
		file "ex/hodogaya.org";
	};

	zone "virtual.domain" {   // これは仮名
		type master;
		file ""ex/virtual.domain";
	};
        //// 逆引きは委譲されていないので設定なし
};

BIND 8からの移行

BIND 8以前から移行する際に注意しなければならないのは、SOAレコードに対するTTLが設定されていないとエラーとなることです。(BIND 8ではwarningが出ていたけど起動はしました)
これは、各dbファイルの先頭に「$TTL 3600」などという行を追加することにより回避できます。

rndc.conf

BIND 8以前でデーモンのコントロールをしていたndcというプログラムは、BIND 9よりrndcに置き変わりました。rndcはリモートのbindもコントロールできるという利点があるのですが、スタンドアローンで使う場合でもrndc.confというファイルを作る必要があるので、ちょっと不便になりました。以下がrndc.confの中身です。
options {
        default-server  127.0.0.1;
        default-key     "key";
};

server localhost {
        key     "key";
};

key "key" {
        algorithm       hmac-md5;
        secret "*********************";  // パスワードなので伏せ字
};

webサーバー

これも平凡にapacheです。夏ごろwyvernというソフトを試してみたことがあるのですが、CGIを動かした時に結構ハングアップしやすいので却下しました。 今ではバージョンも上がっているので、もしかしたら当時より安定しているかもしれないのですが、まだバーチャルドメインに対応していないようなので、しばらく乗り換えは行わないでしょう。

apacheの設定は、バーチャルホスト以外は特に変わった設定はしていません。バーチャルホストの設定はこんな感じ。

NameVirtualHost 192.168.0.2

<VirtualHost 192.168.0.2>
    ServerAdmin webmaster@hodogaya.org
    DocumentRoot /home/httpd/hodogaya/html
    ServerName www.hodogaya.org
    ErrorLog logs/error_log
    CustomLog logs/access_log combined
    CustomLog logs/referer_log referer
</VirtualHost>

<VirtualHost 192.168.0.2>
    ServerAdmin webmaster@virturl.dom
    DocumentRoot /home/httpd/virturl.dom/html
    ServerName www.virturl.dom
    ScriptAlias /cgi-bin/ "/home/httpd/virtual.dom/cgi-bin/"
    ErrorLog logs/virtual.dom/error_log
    CustomLog logs/virtual.dom/access_log combined
</VirtualHost>
特に注意しないといけないのは、NAT環境下では、NameVirtualHostなどで設定するIPアドレスはプライベートアドレスだということです。

なお、アクセス解析はwebalizerを利用しています。/etc/webalizer.confは以下のところを変更・追加しています。

OutputDir (解析結果を置く絶対ディレクトリ。apacheのデフォルトのままなら変更不要)
Incremental yes
HostName www.hodogaya.org
HideSite 203.141.142.176
HideSite 192.168.0
HideReferrer www.hodogaya.org
HideReferrer 192.168.0.
ちなみに、アクセス解析結果は外から見れませんので、あしからず。解析結果のあるディレクトリに、以下のような内容の.htaccessを置いてあります。
order deny,allow
deny from all
allow from 192.168.0 203.141.142.176

ftpサーバー

自分一人で使うかぎりにおいては、ftpサーバーは無用の長物です。sshを立てているのならば、ファイル転送にはscpを利用するべきでしょう。
ただ、僕の場合は知人にウェブのミラーサーバーを置いてもらうことにしたので、その転送用に立ち上げることになりました。デフォルトでwu-ftpが入っていたのですが、それを削除してProFTPDをインストールしました。
運用の条件は以下のとおりです。 設定は、/etc/proftpd.confに以下の項目をつけ足すだけです。
DefaultRoot ~
<Limit LOGIN>
    order deny,allow
    AllowGroup ftpuser
</Limit>
ちなみに、<VirtualHost>という項目があったので、apacheみたいにホスト名ベースのバーチャルホストの設定ができるのかと思ったんですが、それは無理なようです。IPアドレスベースで挙動を変えることしかできないようです。まあ考えてみれば、HTTPと違ってFTPではプロトコルレベルでホスト名を伝達しないので、できないのは当然なんですが。

前へ目次次へ
yossy@hodogaya.org