それでもやはり使い慣れたsendamil設定のおさらいもしておくが、もちろん使えるMTAは一つだけである。fmlとの組み合わせではsendmailの方が相性が良さそうである。
FreeBSD4.4Rではデフォルトでsendmail8.11.6がすでに動作しているので、この状態でチェックをしておく。デフォルトゲートウェイ、nameserverはADSLルーター192.168.0.1を指定してある。
サーバーはns.mydomain.comである。各ファイルは以下のとおりとなる。
hosts
127.0.0.1 localhost.mydomain.com localhost
192.168.0.10 ns.mydomain.com ns
192.168.0.10 ns.mydomain.com.
host.conf
hosts
bind
resolv.conf
domain mydomain.com
nameserver 192.168.0.1
LAN内部用のDNSは設定しておらず、ADSLルーター192.168.0.1にISPのDNSサーバーを記述してある。とりあえずISPのアドレスに出してみる。ルーターではsmtp(25)を通す設定としなくてもまったく問題ない。less
/var/log/maillogを観察するとdsnが見つからないと怒られてしまった。実はresolv.confのbindをコメントアウトしておいたのだ。これを外すと問題なく送信できる。外部からの試験ではルーターでsmtp(25)を通す設定にしておく必要がある。foo@hoge.netからfoo@mydomain.comあてにメールを出す。su
fooとなりmailで確認するとちゃんと届いている。この状態でrelaytestをかけておく。おすすめのhttp://www.abuse.net/relay.htmlで確認すると無事パスした。
sendmailについては別のサイトを参考にしたらうまく動作した。使い慣れたCFはサポートされていないので、m4のマクロを使いcfを作った。
次のファイルを作り /usr/share/sendmail/cf/cf/sendmail.mc
という名前で保存する。ドメインはmydomain.comとする。
divert(0)dnl
VERSIONID(`$Id$')
OSTYPE(`bsd4.4')dnl
DOMAIN(`generic')dnl
FEATURE(`access_db', `hash -o /etc/mail/access')dnl
FEATURE(`masquerade_envelope')dnl
MASQUERADE_AS(`mydomain.com')dnl
FEATURE(`local_lmtp')dnl
define(`confTO_IDENT', `0s')dnl
define(`confCW_FILE', `-o /etc/mail/local-host-names')dnl
define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl
define(`LOCAL_MAILER_FLAGS', LOCAL_MAILER_FLAGS`'P)dnl
define(`confMAX_MIME_HEADER_LENGTH', `256/128')dnl
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
MASQUERADE
はメールを送信した実際のホスト名ではなく、別名を使うという指定とのことである。実際はhogehoge@mail.mydomain.comであるが、ここに設定することにより、hogehoge@mydomain.comと表示されるようになる。なお
MASQUERADE の設定を行った場合には/etc/mail/local-host-namesに、受け取るメールアドレスのドメイン名部分を書いておく必要があるので、
/etc/mail/local-host-names
mydomain.com
ns.mydomain.com
mail.mydomain.com
と記述する。最下行は外部のMXにmail.mydomain.comと設定したあるので念のためである。
FEATURE(`local_lmtp')dnlはFreeBSD4.2R以降では記述する必要がある。mail.localにSUIDにセットされなくなりそのためローカルユーザの配送に不具合がでるのを防ぐためである。
define(`confTO_IDENT', `0s')dnlはIDENT認証を行わないように待ち時間を0秒とするものである。これを設定することによりルーターで113を通す必要がなくなる。
access_dbは、メールの転送制限などを access_db
で指定したファイルで行うために設定する。FreeBSD4.4には、
/etc/mail/access.sample というサンプルが用意されている。家庭内LANからメール転送を許可するには、
/etc/mail/access に
192.168.0 RELAY
と記述する。
access_db
はデータベースに変換しておく必要があるので以下のコマンドを実施する。
# makemap hash /etc/mail/access < /etc/mail/access
sendmail.cf
を作成するため、以下のコマンドを実施する。
#cd /usr/share/sendmail/cf/cf
#m4 /usr/share/sendmail/cf/m4/cf.m4 sendmail.mc > sendmail.cf
作成されたsendmail.cfを/etc/mailにコピーして再起動する。
#cp sendmail.cf /etc/mail
popも最新のqpopperをportsからインストールした。/etc/inetd.confでpop3をコメントアウトするだけで動作するはずである。もちろんクライアント側のメーラーでpop3、smtpサーバーの設定はサーバーのアドレス192.168.0.*を設定しておく。inetd.confは以下のように設定する。-sはログに出力するオプションである。
pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper -s
popは内部LANからしか使わないのであまりセキュリティに気をつかうことがないので、sendmail+qpopperの組み合わせでも十分である。
ルーターのNATで25番ポートを開発用マシンに通すように設定して、メールを外部とやりとりしてみたがうまくいった。ついでにメールセキュリティサイトで第三者の転送をしないかチェックしたが、とりあえず問題なかった。