NetBSD/i386 6.1.2にはPostfix 2.8.13が含まれており、SMTP認証にはIMAP/POP3サーバのDovecotが使えるので、パッケージでDovecot 2.2.9をインストールして、メールサーバを作ってみた(Postfixのバージョンはpostconf mail_versionで、対応している認証モジュールはpostconf -aで確認できる)。
DNSサーバの設定
DNSサーバには予めメールサーバのホスト名をMXレコードに登録しておく必要がある。既に登録されていれば必要は無い。以下はBINDのゾーンファイルの該当部分の定義例。ns.bar.comと言うホスト名のメールサーバのIPアドレスが216.66.87.11で、smtp.bar.comやimap.bar.com、pop.bar.comとしても参照出来るように定義されている。
IN MX 0 ns.bar.com. ns IN A 216.66.87.11 smtp IN CNAME ns.bar.com. imap IN CNAME ns.bar.com. pop IN CNAME ns.bar.com.
メールを受信できるようにする
Postfixの設定ファイル /etc/postfix/master.cfでsmtpの受信を行えるように「smtp inet n - n - - smtpd」のコメント化を解除する。
smtp inet n - n - - smtpd
ホスト名を含まないドメイン名でのメール受信を行う
Postfixの設定ファイル /etc/postfix/main.cfで受信するメールのドメイン名をmydestinationのコメント化を解除して設定する。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
ホスト名を含まないドメイン名でのメール送信を行う
Postfixの設定ファイル /etc/postfix/main.cfで送信するメールのドメイン名をmyoriginのコメント化を解除して設定する。
myorigin = $mydomain
他ホストからのメール送信を禁止する
Postfixの設定ファイル /etc/postfix/main.cfでメール送信を許可する範囲をmynetwork_styleのコメント化を解除して設定する。
mynetworks_style = host
Dovecotのインストール
Dovecotのバージョン2系をpkg_addコマンドでインストールして、起動スクリプトを/usr/pkg/share/examples/rc.d/dovecotから/etc/rc.d/dovecotにパーミッション 755(最初から755になっている模様)でコピーし、/etc/rc.confにdovecot=YES dovecot_fdlimit=1024を追加して自動起動するように設定する。
pkg_add ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/6.0_2013Q4/All/dovecot-2.2.9.tgz cp /usr/pkg/share/examples/rc.d/dovecot /etc/rc.d/ echo 'dovecot=YES dovecot_fdlimit=1024' >> /etc/rc.conf
初期状態ではSSLが有効になっているのにサーバ証明書や秘密鍵の設定が無い為、SSLを無効にするか有効にするまで起動できない。
IMAP/POP3サーバのSSLを無効にする
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-ssl.confでSSLを無効にするために「ssl = no」のコメント化を解除する。
ssl = no
IMAP/POP3サーバのSSLを有効にする
OpenSSLの設定ファイル /etc/openssl/openssl.cnfが無ければ/usr/share/examples/openssl/openssl.cnfからコピーして、OpenSSLで自己署名したサーバ証明書 /etc/openssl/certs/dovecot.pemと秘密鍵 /etc/openssl/private/dovecot.pemを都道府県とグループ名、メールサーバのホスト名を指定して作成する。
cp /usr/share/examples/openssl/openssl.cnf /etc/openssl/ openssl req -new -x509 -nodes -out /etc/openssl/certs/dovecot.pem -keyout /etc/openssl/private/dovecot.pem -subj /C=JP/ST=Tokyo/O=BAR/CN=ns.bar.com
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-ssl.confでSSLを有効にするために「ssl = no」をコメント化する。
#ssl = no
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-ssl.confにサーバ証明書のssl_certと秘密鍵のssl_keyをコメント化を解除して記述が間違っている「=」を「=<」に書き換える。
ssl_cert =< /etc/openssl/certs/dovecot.pem ssl_key =< /etc/openssl/private/dovecot.pem
IMAP/POP3サーバのメールボックスをmbox形式にする
NetBSD/i386 6.1.2のPostfixはデフォルトでメールボックスがmbox形式になっているが、DovecotはデフォルトでMaildir形式になっているのでメールが受信できない。
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-mail.confでメールボックスの形式をmail_locationのコメント化を解除して設定する。
mail_location = mbox:~/mail:INBOX=/var/mail/%u
SMTP認証の設定
Postfixの設定ファイル /etc/postfix/main.cfでSMTP認証を行うためにsmtpd_sasl_auth_enableにyes、Dovecotで認証を行うためにsmtpd_sasl_typeにdovecot、Dovecot側と同じパスをsmtpd_sasl_pathでパス(/var/spool/postfix以下)を指定して、他ホストからの認証を受け付けないようにsmtpd_recipient_restrictionsを設定、これらを追記する(Windows 98のOutlook Express等に対応したい場合はbroken_sasl_auth_clients = yesも追記する)。
smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-master.confでPostfixからSMTP認証できるように「unix_listener /var/spool/postfix/private/auth {」から「{」までのコメント化を解除してPostfix側で指定したパスとパーミッション、オーナー名、グループ名を設定する。
unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = wheel }
SSL接続でSMTP認証を使うための設定
Postfixの設定ファイル /etc/postfix/main.cfでSSLでもSMTP認証を使うためにsmtpd_tls_security_levelでmayを指定、サーバ証明書をsmtpd_tls_cert_fileで設定、秘密鍵をsmtpd_tls_key_fileで設定して、これらを追記する。
smtpd_tls_security_level = may smtpd_tls_cert_file = /etc/openssl/certs/dovecot.pem smtpd_tls_key_file = /etc/openssl/private/dovecot.pem
SMTP認証でサブミッションポートを使えるようにする
Outbound Port 25 Blocking(OP25B)が実施されたプロバイダばかりの現状では必須だと思う。
Postfixの設定ファイル /etc/postfix/master.cfでサブミッションポートを使えるように「submission inet n - n - - smtpd」と続く「 -o」で始まるオプションのコメント化を解除する。
submission inet n - n - - smtpd # -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
SMTP認証でSSL接続を使えるようにする
Postfixの設定ファイル /etc/postfix/master.cfでSSL接続を使えるように「smtps inet n - n - - smtpd」と続く「 -o」で始まるオプションのコメント化を解除する。
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
Outlook Express等の送信時LOGIN認証と受信時平文認証に対応する
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-auth.confでLOGIN認証を使えるようにauth_mechanismsにloginを追記する。
auth_mechanisms = plain login
Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-auth.confで平文認証を使えるようにdisable_plaintext_authのコメント化を解除してnoを指定する。
disable_plaintext_auth = no
迷惑メール対策をSelective SMTP Rejection (S25R)方式で行う
Postfixの設定ファイル /etc/postfix/main.cfにブラックリスト、ホワイトリスト、その他のフィルタを参照して動作する設定を追記する。
smtpd_client_restrictions = permit_mynetworks, check_client_access regexp:/etc/postfix/white_list, check_client_access regexp:/etc/postfix/rejections smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, check_helo_access regexp:/etc/postfix/helo_restrictions smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain
ホワイトリスト /etc/postfix/white-list.txtはホワイトリスト情報からwhite_listの名前でダウンロードする。必要に応じて適切に修正する。
wget -O /etc/postfix/white_list http://www.gabacho-net.jp/anti-spam/white-list.txt
ブラックリスト /etc/postfix/rejectionsは阻止率99%のスパム対策方式の研究報告の付録A. Postfixでの設定方法にある/etc/postfix/rejectionsファイルの中身をコピーして作成する。必要に応じて適切に修正する。今回は以下の手順で前述のサイトより抜き出した。
wget http://www.gabacho-net.jp/anti-spam/anti-spam-system.html sed -n -e '/^\/etc\/postfix\/rejections/,/^\/etc\/postfix\/helo_restrictions/p' anti-spam-system.html | sed -e '1,/^<TD /d' -e '/<\/TD>/,$d' -e 's/^<PRE>//' -e 's/</</g' -e 's/>/>/g' > /etc/postfix/rejections
その他のフィルタ /etc/postfix/helo_restrictionsも阻止率99%のスパム対策方式の研究報告の付録A. Postfixでの設定方法にある/etc/postfix/helo_restrictionsファイルのサンプルをコピーして作成する。必要に応じて適切に修正する。サンプルは見ての通り、すべてコメントなので空のファイルをtouch /etc/postfix/helo_restrictionsで作成しても良いかと思う。
# Illegal HELO command blocking specification # Provided that your mail server's IP address is 223.12.34.56 and its # acceptable domain name is "example.com", specify as follows: # #/^223\.12\.34\.56$/ REJECT #/^(.+\.)?example\.com$/ REJECT
S25R方式で検出された迷惑メールのログを確認する
メールのログ /var/log/maillog からS25R方式で検出された迷惑メールを抽出するために拒絶ログソーティングスクリプトのシェルスクリプトコードを適当なディレクトリに実行権限を付けて配置する。CGIとしても動作する。
NetBSD/i386 6.1.2には上記スクリプトで使われているgawkが入っていないので、パッケージでgawkをインストールする。
pkg_add ftp://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/6.0_2013Q4/All/gawk-4.1.0nb1.tgz
また、NetBSD/i386 6.1.2では古いmaillogは圧縮されているので「cat /var/log/maillog.1 /var/log/maillog」とある箇所を「zcat /var/log/maillog.1.gz | cat - /var/log/maillog」に置き換える。今回は以下の手順で前述のサイトより抜き出した。
wget http://www.gabacho-net.jp/anti-spam/log-sorting-script.html sed -e '1,/^<TD>/d' -e '/<\/TD>/,$d' -e 's/^<PRE>//' -e 's/</</g' -e 's/>/>/g' -e 's/cat \/var\/log\/maillog\.1/zcat \/var\/log\/maillog\.1\.gz | cat -/' log-sorting-script.html > log-sorting.cgi chmod +x log-sorting.cgi
このスクリプトを定期的に実行すれば、表示される内容を参考にホワイトリスト、ブラックリスト、その他のフィルタを適切に書き換えることが出来る。
その他
Dovecotで認証が上手く通らない場合はDovecotのログファイル /var/log/dovecot_debug.logを確認する。デフォルトではログファイルが作成されないので、Dovecotの設定ファイル /usr/pkg/etc/dovecot/conf.d/10-logging.confのdebug_log_pathでログファイル出力先を指定、auth_debugとmail_debugとverbose_sslにyesを指定して再起動する。
debug_log_path = /var/log/dovecot_debug.log auth_debug = yes mail_debug = yes verbose_ssl = yes