SMTP Auth + TLSの導入(Postfix1.0編)

Mail System Postfix SMTP-Auth SMTP-Auth+TLS SMTP+Virtual Qpopper Qpopper/SSL Courier-IMAP FetchMail Procmail WebMail AntiVirus Relay Mail

メールシステムに関して注意が必要なのは、SMTPサーバの不正中継(リレーメール)対策と、POP/IMAPサーバを含めたセキュリティ対策です。おやじは、SMTPサーバの不正中継(リレーメール)対策としては、Cyrus SASLを利用したSMTP Authentication(SMTP AUTH)を導入、POP/IMAPサーバのセキュリティ対策としてはCourier-IMAPのSSL化を図ってきました。送信系はSMTP AUTHで不正中継対策は問題なくなりましたが、使用しているメーラ(Outlook Express)の関係から、PLAIN認証しか対応できず外部からメール送信した時のセキュリティ面で不満がありました。
そこで、いろいろ調査した結果、PostfixにOpensslをアドオンすることでSMTP-AUTHした上でTLS化できることが判りましたので挑戦したところ、いろいろ失敗しましたが何とか稼動したので、ここで紹介します。
これで、ほぼ理想的なSMTPサーバが構築できたと思います。
SqWebMailの試験をしていて、問題が発覚したので設定を変更しました。(2002.11.04)

  TLS用乱数デバイスの指定が抜けているとのご指摘があり追加しました。

■Postfixのインストール

今回とった方法はログイン時からTLS化し、その後、SMTP AUTHで認証する方式ですので、PLAIN認証しか対応できないOutlook Expressでもセキュリティを確保できます。当初、ソースからパッチを当ててコンパイルしてみたのですがうまくいかず、いろいろ調べたところPostfixのホームページからのリンクでAdd-on SoftwareにTLS化を含めたRPMを作成できる方法がありましたので、これで行くことにしました。これで概略がわかりましたので、ソースからも挑戦してみたいと思います。
  1. まずは、こちらから最新のSource RPMをダウンロードする。(おやじがダウンロードしたのは、postfix-1.1.11-9.src.rpm。場所はいつもの/usr/local/src配下)

  2. ダウンロードしたSource RPMを/usr/src/redhat/SOURCES配下に置き、パッケージを展開する。

    # cd /usr/local/src
    # cp postfix-1.1.11-9.src.rpm /usr/src/redhat/SOURCES/postfix-1.1.11-9.src.rpm
    # rpm -Uvh postfix-1.1.11-9.src.rpm

  3. ソースディレクトリに移動し、ビルドのオプションとしてSASLとTLSオプションを設定し、新しいpostfix.specファイルを作成する。

    # cd /usr/src/redhat/SOURCES
    # export POSTFIX_SASL=1
    # export POSTFIX_TLS=1
    # sh /usr/src/redhat/SOURCES/make-postfix.spec

  4. バイナリRPMを作成する。下記操作で、/usr/src/redhat/RPMS/i386配下にpostfix-1.1.11-9.sasl.tls.rpmというRPMが作成される。

    # cd /usr/src/redhat/SPECS
    # rpmbuild -ba postfix.spec

  5. 上記で作成されたバイナリRPM(postfix-1.1.11-9.sasl.tls.rpm)をインストールするが、新しいcfを作成するため、main.cf、master.cfをリネームしておく。

    # mv /etc/postfix/main.cf /etc/postfix/main.cf.bak
    # mv /etc/postfix/master.cf /etc/postfix/master.cf.bak
    # rpm -Uvh /usr/src/redhat/RPMS/i386/postfix-1.1.11-9.sasl.tls.rpm


インストール後TLS化の設定しますが、SMTP-AUTHAntiVir化については、それぞれのページにあるとおりで問題ありませんのでそちらを参考にしてください。ここでは、TLS化に関する設定のみ以下に示します。

■Postfixの設定ファイルの編集

まずは、/etc/postfix配下にあるmain.cfを編集します。

◆main.cfの設定

SMTP AUTH化やAntVir化でmain.cfを設定してあれば、/etc/postfix/sampleディレクトリ内にあるsample-tls.cfの内容を追加コピーして編集します。ここでは、TLS化に関する設定のみ示します。
なお、各種証明書や鍵については、バラバラに作成してきてしまった(Courier-IMAP用、Apache-SSL用)ので、今回、/usr/certs配下にApache-SSLで作成した方法で作成しなおし、統一しました。青字は削除、赤字は追加、緑字は変更したものです。コメント等は省略しています。)

# サーバ証明書/鍵関係の設定を変更(RSAのみ対応)
#smtpd_tls_cert_file = /etc/postfix/server.pem
#smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_tls_cert_file = /usr/certs/server.crt
smtpd_tls_key_file = /usr/certs/server.key

#
# Its DSA counterparts:
#smtpd_tls_dcert_file = /etc/postfix/server-dsa.pem
#smtpd_tls_dkey_file = $smtpd_tls_dcert_file

# CA関係の設定を変更
# smtpd_tls_CAfile = /etc/postfix/CAcert.pem
smtpd_tls_CAfile = /usr/certs/ca.crt
#
#smtpd_tls_CApath = /etc/postfix/certs
smtpd_tls_CApath = /usr/certs

# ログレベルの変更(最低レベル)
# smtpd_tls_loglevel = 0
smtpd_tls_loglevel = 1

# TLS使用(そのまま)
smtpd_use_tls = yes

# Outlook/Outlook Express用のモード設定 ( * :下記参照 )
# smtpd_tls_wrappermode = no
smtpd_tls_wrappermode = yes

# 認証はTLS使用のみ(TLSのみの場合はコメントアウトを外しyesに変更)
# smtpd_tls_auth_only = no  

# セッションキャッシュの設定(そのまま)
smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache

# 証明書は前述の方法で作成
#smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
#smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem

# TLS用乱数デバイスの指定
tls_random_source = dev:/dev/urandom
# tls_random_source = egd:/var/run/egd-pool
# tls_random_bytes = 32
# tls_random_reseed_period = 3600s

*: この設定は、OEがrfcと違うインプリをしているということで設定しましたが、クライアントがOEならいいのですが、全てのクライアントに特殊な手順で相手してしまうので、local(AntiVir)からlocalへの配送時にpostfix自身が止まってしまう(正確にはそのメールを中継できなくなるだけ)という問題が発覚しました。このOEの問題は、5.0の問題とのことなので、おやじは6.0を使用しており設定を外しました。但し、アクセスはあくまで465番ポートです。これでわかるとおり、OE5.0の環境では、TLS対応はできないということです。

◆master.cfの設定

Outlook/Outlook Expressを使用する場合の専用の設定とTLSセッションキャッシュマネージャの設定をmaster.cfで行います。RPMをインストールすると、master.cfができますので、smtpsとtlsmgrのコメントアウトを外すだけです。
なお、AntiVirの設定を忘れないようにしてください。
# ==========================================================================
# service type  private unpriv  chroot wakeup  maxproc command + args
#               (yes)   (yes)   (yes)  (never) (50)
# ==========================================================================
smtp    inet    n       -       y      -       -       smtpd
#smtps   inet   n       -       n      -       -       smtpd
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
smtps   inet    n       -       n      -       -       smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
localhost:smtp-backdoor inet n - n - - smtpd -o content_filter=
#submission     inet    n       -      n       -       -       smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
#628    inet    n       -       n      -       -       qmqpd
pickup  fifo    n       -       y      60      1       pickup
cleanup unix    n       -       y      -       0       cleanup
qmgr    fifo    n       -       y      300     1       qmgr
#qmgr   fifo    n       -       n      300     1       nqmgr
#tlsmgr fifo    -       -       n      300     1       tlsmgr
tlsmgr  fifo    -       -       n      300     1       tlsmgr


◆sendmail互換プログラムのインストールミスの修正

 messagesにsendmailのpathがおかしいと出ていたので調査したところ、/usr/sbin/sendmailが互換プログラムに置き換わっておらず、CGIからのメール利用ができなくなっていました。CGIを直すのが面倒なので、下記で修正しました。
 

# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# ln -s /usr/sbin/sendmail.postfix /usr/sbin/sendmail


■Postfix の起動

設定が終わったら、

      # postfix start (reload)

と入力して、Postfixを起動します。このRPMでは、自動実行スクリプトが組み込まれますので、/etc/rc.d/rc.local に起動コマンドが書いてある場合は、削除してください。起動後に、netstat -lnで25番と465番ポートがListen状態になっているか確認しておきましょう。

バージョンによって、各ランレベルへのリンクが張られないようなので、張れていない場合は下記で設定しましょう。(2002.12.30)
# chmod 755 /etc/rc.d/init.d/postfix
# chkconfig --add postfix
# chkconfig --list postfix
postfix 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ


■クライアントの起動

次に、Outlook Expressの設定を変更します。
  1. メイン画面から、「ツール」、「アカウント」で使用するアカウントのプロパティを開き、「サーバー」タブを開く。
  2. 送信メールサーバーの、「このサーバーは認証が必要」にチェックマークを入れる。
    設定ボタンを押すと、ログオン情報の設定ができるが、通常は「受信メールサーバーと同じ設定を使用する」で問題はない。
  3. 詳細設定タブで、「サーバーのポート番号」の「送信メール(SMTP)」を465に、その下の、「このサーバーは認証が必要セキュリティで保護された接続(SSL)が必要」にチェックマークを入れる。
     
SMTPのポート番号が追加になったので、外部から使用するならルータの設定も変更する必要があり、フィルタリングとスタティックNATの設定を追加する必要があります。あくまで外部からクライアントでのSMTP利用時の対策ですので、間違っても25番は閉じたりしないでください。外部からのメールが受信できなくなってしまいます。


Mail System Postfix SMTP-Auth SMTP-Auth+TLS SMTP+Virtual Qpopper Qpopper/SSL Courier-IMAP FetchMail Procmail WebMail AntiVirus Relay Mail