定時後、しばらくサーバの設定作業をしてから白坂さんとこにDVD届けて、いつもの下道で帰宅。眠くてしばし睡眠。起きると親が帰ってきてた。晩御飯はカレー。深夜1時頃就寝。
NetBSD で作るメールサーバ
デフォルトの状態
NetBSD/i386 2.0.2 にはデフォルトで Sendmail 8.12.11 が入っており、ネットワークの設定がなされていれば、mail コマンド等でメールを外部に送信することが出来る。この時、送信元のメールアドレスは「ユーザ名@ホスト名.ドメイン名」となる。
mail info@example.co.jp
外部からのメール受信
自分のドメインを管理する DNS サーバに MX レコードで自分のホスト名を登録しても、外部からメールの受信はできない。これはデフォルトの sendmail.cf の元である /usr/share/sendmail/cf/netbsd-proto.mc の末尾にある以下の行の「127.0.0.1」を「0.0.0.0」に、「::1」を「::」に修正する。
DAEMON_OPTIONS(`Family=inet, address=127.0.0.1, Name=MTA, Modifiers=O')dnl DAEMON_OPTIONS(`Family=inet6, address=::1, Name=MTA6, Modifiers=O')dnl
修正したら、sendmail.cf を再作成して、sendmail を再起動する。
cd /usr/share/sendmail/cf m4 netbsd-proto.mc > /etc/mail/sendmail.cf /etc/rc.d/sendmail restart
以後、「ユーザ名@ホスト名.ドメイン名」のメールアドレスでメールを受信することが出来るようになる。
ホスト名を含まないメールアドレス
mail コマンド等で送信する際の送信元メールアドレスを「ユーザ名@ドメイン名」とするには、/usr/share/sendmail/cf/netbsd-proto.mc の MAILER 行の手前に以下の内容を追記する。これらを指定することで、FROM や TO、CC などからホスト名を省いたドメイン名だけに置き換えてくれる。
MASQUERADE_AS(`$m')dnl FEATURE(`masquerade_envelope')dnl FEATURE(`allmasquerade')dnl
さらに「ユーザ名@ドメイン名」のメールアドレスでメールを受け取ることが出来るようにするには受信可能なドメインを /etc/mail/local-host-names に追記する。
vi /etc/mail/local-host-names
メールクライアントでのメール受信
POP3/IMAP4 サーバとして、imap-uw をインストールする。pkg_add コマンドで ftp://ftp.jp.netbsd.org/pub/NetBSD/packages/pkgsrc/mail/imap-uw/README.html から、CPU と OS のバージョンに合ったものをダウンロードして指定するか、その URL を控えて指定する。
pkg_add imap-uw-2004c1nb2.tgz
POP3/IMAP4 サーバとして呼び出せるように、/etc/inetd.conf に以下の行を追加する。
imap stream tcp nowait root /usr/pkg/libexec/imapd imapd imaps stream tcp nowait root /usr/pkg/libexec/imapd imapd pop2 stream tcp nowait root /usr/pkg/libexec/ipop2d ipop2d pop3 stream tcp nowait root /usr/pkg/libexec/ipop3d ipop3d pop3s stream tcp nowait root /usr/pkg/libexec/ipop3d ipop3d
inetd を再起動したら、POP3/IMAP4 を使ったメールクライアントでメール受信が出来るようになる。
/etc/rc.d/inetd restart
メールクライアントからメール送信
デフォルトでは外部からメール送信を受け付けないので、メール受信をした後、しばらくメール送信が可能となる「POP before SMTP」方式を使えるようにする。
Poprelay は POP before SMTP を実現する Perl スクリプト。メール受信をした時のログからアドレスを専用のデータベースに加えて指定した時間の間、Sendmail でこのアドレスからのメール送信を受け付けるようにする簡単な常駐プログラム。
Perl のインストール
Perl は Apache 2.x をインストールすると一緒に導入されるが、単体でインストールする場合は pkg_add コマンドで ftp://ftp.jp.netbsd.org/pub/NetBSD/packages/pkgsrc/lang/perl5/README.html から、CPU と OS のバージョンに合ったものをダウンロードして指定するか、その URL を控えて指定する。
pkg_add perl-5.6.1nb11.tgz
poprelay のダウンロード
poprelay は http://poprelay.sourceforge.net/ からダウンロード出来るが、NetBSD/i386 2.0.2 にはデフォルトでダウンロードする手段が無いので、lynx や w3m 等の Web ブラウザをインストールするか、wget などのダウンロードコマンドをインストールして、これでダウンロードする。例えば、wget で行う場合は pkg_add コマンドで ftp://ftp.jp.netbsd.org/pub/NetBSD/packages/pkgsrc/net/wget/README.html から、CPU と OS のバージョンに合ったものをダウンロードして指定するか、その URL を控えて指定し、予め調べておいた poprelay のダウンロード URL を指定してダウンロードを行う。
pkg_add wget-1.9.1nb5.tgz wget http://keihanna.dl.sourceforge.net/sourceforge/poprelay/poprelay1.5.tar.gz
poprelay のインストール
poprelay の tar.gz ファイルを解凍後、パッケージで導入した Perl のパスに合わせるため、Perl スクリプト poprelayd の先頭にある /usr/bin/perl を /usr/pkg/bin/perl に書き換える。
tar zxvf poprelay1.5.tar.gz cd poprelay1.5 vi poprelayd
続いて、設定ファイル poprelay.conf を /etc/mail にコピーする。デフォルトではメール受信後、50 時間(3000 分)もメール送信可能になるので、必要に応じて「$timeout_minutes = 3000;」を適切な値に書き変える。
cp poprelay.conf /etc/mail
さらに sendmail 用の設定ファイル poprelay.m4 を /usr/share/sendmail/hack にコピーする。
cp poprelay.m4 /usr/share/sendmail/hack
自動起動の設定
/etc/rc.local に以下の記述を追加し、poprelay が自動的に起動するように設定する。
if [ -f /usr/sbin/poprelayd ]; then /usr/sbin/poprelayd -d fi
Sendmail への追加設定
/usr/share/sendmail/cf/netbsd-proto.mc に poprelay 対応のための記述を追加する。
HACK(`poprelay')dnl
さらに自分自身からのメール送信を受け付けるように /etc/mail/access を以下の内容で作成する。
localhost RELAY 127.0.0.1 RELAY
poprelay を起動し、sendmail.cf を再作成して、sendmail を再起動すれば、メールクライアントでメール受信をした後はメール送信が可能となる。
尚、poprelay 起動時、メール受信に来たアドレスを記録する /etc/mail/popip.db が自動的に作成され、sendmail 再起動時、/etc/mail/access を元に /etc/mail/access.db が自動的に作成される。
/usr/sbin/poprelay -d cd /usr/share/sendmail/cf m4 netbsd-proto.mc > /etc/mail/sendmail.cf /etc/rc.d/sendmail restart
バーチャルドメイン
自分のドメインを管理する DNS サーバにサブドメインの MX レコードで自分のホスト名を登録すると、そのサブドメインのメールアドレスが使えるようになる。
以下は正引きゾーンファイルの追加例。hogehoge.com のドメインに sub という名前のサブドメインのメールサーバとして bar.hogehoge.com を定義している。
sub IN MX 0 bar.hogehoge.com.
このサブドメイン宛てのメールも受け取れるように /etc/mail/local-host-names に以下のように追記する。
sub.hogehoge.com
さらにサブドメインの仮想ユーザが、実在するどのユーザなのかを /etc/mail/virtusertable を作成して定義する。
info@sub.hogehoge.com foo@hogehoge.com
最後に /usr/share/sendmail/cf/netbsd-proto.mc に、このサブドメインで出したメールの FROM や TO、CC を書き換えないように下記の行を追記する。
MASQUERADE_EXCEPTION(`sub.hogehoge.com')dnl
修正したら、sendmail.cf を再作成して、sendmail を再起動する。
これで info@sub.hogehoge.com でメールを受け取ることが出来、そのメールは実際には foo@hogehoge.com に届くようになる。
メールの送信は foo@hogehoge.com から出す際に、FROM を info@sub.hogehoge.com にするだけでいい。