メール サービス (Postfix + POP3編)

Postfixについて
Sendmailに変わるMTAとして開発されたソフトで、Sendmailと互換を持っており、Sendmailより簡単に設定出来て、尚かつセキュリティも高く速度も速いことから、最近はこのソフトに移行する人が増えてきました。
私も以前から気になっていたソフトでしたが、苦労して構築したSendmailの環境を破棄するのがちょっともったいなくて、移行保留となっておりました。しかし、プロバイダーの Outbound Port 25 Blocking などによる弊害などで中継サーバーへの接続が必要になってきたことから、ようやくPostfixに乗り換えました。
Sendmailからの乗り換えと言うことを前提とした作業記録を、ここに残しておくことにします。
Sendmailの停止
作業に先立ち現在稼働中の Sendmail を停止させます。
# /etc/rc.d/init.d/sendmail stop
SASLのインストール
プロバイダーのリレーサーバーを使うことを前提とした場合、SASLによる認証が必要になるため、Postfixをインストールする前に SASL をインストールしておきます。
FreeBSD 7 以降では Ports からインストールできます。
# cd /usr/ports/security/cyrus-sasl2
# make install clean
以下のような画面が表示されるので必要なものにチェックを付けて実行します。

※私は「OTP」と「MTLM」のチェックを外しました。
続いて cyrus-sasl2-saslauthd をインストールします。
# cd /usr/ports/security/cyrus-sasl2-saslauthd
# make WITH_OPENLDAP=yes install clean
Postfixのインストール
ソースコードからのインストールのため、Postfixのインストールに先がけ、Postfixが使用するグループとアカウントを作成しておきます。尚、アカウントは、ログインできないように作成します。
# pw groupadd postfix
# pw groupadd postdrop
# pw useradd postfix -d /nonexistent -g postfix -s /sbin/nologin
http://www.postfix.org/から最新版の Postfix やパッチなどをダウンロードして展開します。
% tar xvfz postfix-2.7.2.tar.gz
パッチファイルがある場合には適応します。
% cd postfix-2.7.2
% gzip -dc postfix-2.7-patch01.gz | patch -p1
% gzip -dc postfix-2.7-patch02.gz | patch -p1
makeを起動して実行ファイルを作成します。ただし、オプションでSASLを使用するように指定しないとSASLが使用できない実行ファイルが出来上がるので注意が必要です。
% make CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"
makeが終了したらインストールを行います。
% make install
  install_root: /
  tempdir: /usr/home/hm/src/postfix-2.7.2
  config_directory: /etc/postfix
  command_directory: /usr/sbin
  daemon_directory: /usr/libexec/postfix
  data_directory: /var/lib/postfix
  html_directory: [no]
  mail_owner: [postfix]
  mailq_path: /usr/bin/mailq
  manpage_directory: /usr/local/man
  newaliases_path: /usr/bin/newaliases
  queue_directory: /var/spool/postfix
  readme_directory: [no]
  sendmail_path: /usr/sbin/sendmail
  setgid_group: [postdrop]
  ・・
#
※実行ファイルのパスを変えたりするのでなければ、基本的にデフォルト(そのままEnter)で問題ないと思います。
Postfixの設定
サンプルの main.cf を元に基本的な設定を行います。
# cd /etc/postfix
# cp main.cf main.cf.org
# vi main.cf
以下変更箇所のみ
myhostname = main.ドメイン名
# mail.mydomain.dip.jpなどを指定
mydomain = ドメイン名
# mydomain.dip.jpなどを指定
myorigin = $mydomain
# コメントを外して有効にする
inet_interfaces = all
# コメントを外して有効にする
mydestination = $myhostname,
# コメントを外して有効にする
       localhost.$mydomain

       localhost, $mydomain = all

mynetworks_style = host
# コメントを外して有効にする
mynetworks = 192.168.0.0/24, 127.0.0.0/8
# コメントを外して有効にする
alias_maps = hash:/etc/mail/aliases
# エリアス・マップのパスを指定
alias_database = hash:/etc/mail/aliases
# エリアスDBのパスを指定
mail_spool_directory = /var/mai
# Sendmailで使用していたスプールパスを指定
smtpd_banner = $myhostname ESMTP $mail_name
# コメントを外して有効にする
smtp_sasl_type = cyrus
# 追加 (SASLタイプ)
smtp_sasl_auth_enable = yes
# 追加 (SASL認証を有効にする)
smtp_sasl_password_maps = hash:/etc/postfix/isp_auth
# 追加 (認証パスワードのパス)
smtp_sasl_security_options = noanonymous
# 追加 (匿名認証を許可しない)
smtp_sasl_mechanism_filter = cram-md5, login, plain
# 追加 (SMTP認証のルール)
行の先頭にスペースが入ると前の行の続きと見なされます。
同じ定義を誤って指定した場合、最後に指定されたものが有効になります。(ミスに注意)
Sendmailから乗り換えの場合、mail_spool_directory で今まで使用していたスプール・パスを指定します。「home_mailbox = Mailbox」も一緒に指定してしまうとホームディレクトリの Mailbox にメールが配信され、標準の設定では「mail -f Mailbox」でメールを読むことになり、Windowsのメーラーなどで読み込む事が出来なくなります。(ちょっとはまった)
上記の smtp_sasl_mechanism_filter の設定値は、私が使っているBIGLOBE用の認証ルールです。
今まで使用していた aliases に次の項目を追加します。
# vi /etc/mail/aliases
  postfix:       root
aliasesを更新します。
# newaliases
ISP_AUTHの認証ファイルを作成します。
# vi /etc/postfix/isp_auth
  [リレーサーバー]:25 メールアドレス:パスワード
セキュリティ強化のためパーミッションを変更します。
# chmod 600 /etc/postfix/isp_auth
ISP_AUTHの認証ファイルをハッシュ化します。
# postmap /etc/postfix/isp_auth
念のために Postfix の設定を確認します。
# postfix check
エラーが報告された場合には、もう一度設定を見直します。
プロバイダーのリレーサーバーを使用する為に必要なルーティングをルーターに設定したら「Postfix」を起動します。
# /usr/sbin/postfix start
これで、ローカル及び外部へのメール送受信が可能になっているはずです。
送受信とも問題がないようならシステムに組み込みます。
# vi /etc/rc.conf
  sendmail_enable="YES"
  sendmail_flags="-bd"
  sendmail_outbound_enable="NO"
  sendmail_submit_enable="NO"
  sendmail_msp_queue_enable="NO"
上記の設定で mailer.conf で指定された sendmail が起動されるようになりますが、実体は postfix に置き換えられているため、postfix が起動されるようになります。
セキュリティの強化
憎っくきスパムメールの踏み台にならないようにセキュリティの強化を行います。
# vi /etc/postfix/main.cf
  disable_vrfy_command = yes
# SMTPのVRFY コマンドを使用不可にする
  allow_percent_hack = yes
# 不明なものをリレーしないようにする
  swap_bangpath = yes
# 不明なものをリレーしないようにする
  smtpd_recipient_restrictions = permit_mynetworks,
# ホスト名やドメイン名で許可されているものだけを受信
      reject_sender_login_mismatch,

      check_relay_domains

  smtpd_sender_restrictions = reject_unknown_sender_domain,
# 実在しないドメイン名からのメールを拒絶
      reject_sender_login_mismatch


セキュリティ(リレー)のテストは、以下のサイトにtelnet接続することで自動的にテストすることができます。
# telnet relay-test.mail-abuse.org
  Trying nnn.nnn.nn.nn
  ・
  Connection closed by foreign host.
上記サイト以外では、http://www.abuse.net/relay.htmlにアクセスして「Address to test:」に自分のサイトのIPアドレスを入力して「test for relay」ボタンを押すことで自動的にテストしてくれるサイトもあります。
どちらのテストでも、テスト中に問題が見つかった場合には、途中で停止します。テスト中は /var/log/maillog にもアクセス情報が残るので、問題の解決に役立ちます。
このテストで問題がなければ、とりあえずは安心です。

以上でPostfixへの移行作業は終了となります。
スパムメールの拒絶機能を使いたい場合にはPostfixでのSPAMメール受信拒否を参考に設定して下さい。