Ubuntu Weekly Recipe

第387回 UbuntuでSSLを利用したサービスを構築する

この記事を読むのに必要な時間:およそ 8.5 分

PostfixとDovecotでセキュアなメールサーバーを立てる

SSLというとショッピングサイトなどでのHTTPSの利用がまず思い浮かびますが,SSLは透過的なプロトコルのため,HTTP以外の様々なプロトコルをSSL上で動作させることができます。たとえばセキュアなFTPのFTPS注16)⁠メール送受信のためのSMTPS,POP3S,IMAPSなどです。例としてSSLに対応した一般的なメールサーバーを,PostfixとDovecotで構築してみましょう。postfixパッケージと,dovecot-imapdをインストールします。

注16)
FTPSを使うくらいならSSHを使いましょう,という気はしますが。

PostfixとDovecotのインストール

$ sudo apt-get install postfix dovecot-imapd

dovecot-imapdパッケージのインストール中に,自己署名証明書を作成するかどうか尋ねられます。既にRapidSSLの証明書を購入していますので,ここではNoを選択しましょう。

postfixパッケージのインストール中には,メールサーバーのタイプと名前を尋ねられます。タイプは「Internet Site」⁠名前にはドメイン名を入力してください。これはメールアドレスのドメインパート(@以降の部分)のことで,Postfixはここで設定されたドメイン宛てのメールは,自分自身が最終配送先だと判断します。

図5 Dovecotのインストール

図5 Dovecotのインストール

図6 Postfixのインストールタイプ

図6 Postfixのインストールタイプ

図7 ドメイン名の入力

図7 ドメイン名の入力

パッケージのインストールが完了した状態で,サーバー自身からsendmailを利用したメールの送信は可能になっていますが,リモートのPCからメーラーを利用したメールの送受信はまだできません。外部からのメールのリレーができるよう,SMTPサーバーの認証と,SSLを有効にしましょう。ApacheではSSLCertificateChainFileを使って中間証明書を読み込ませましたが,Postfixではサーバー証明書と中間証明書を一つに結合したファイルを利用します。

サーバー証明書と中間証明書の結合

$ sudo bash -c 'cat /etc/ssl/certs/{server.crt,rapidssl-intermediate.crt} > /etc/ssl/certs/server-withintermediate.crt'

/etc/postfix/main.cfを編集し,⁠デフォルトでsnakeoilが指定されている)smtpd_tls_cert_fileとsmtpd_tls_key_fileに,それぞれ結合した証明書と秘密鍵を指定してください。

snakeoilから正規の証明書に変更する

smtpd_tls_cert_file = /etc/ssl/certs/server-withintermediate.crt
smtpd_tls_key_file = /etc/ssl/private/server.key

さらに以下の内容を追記します。

/etc/postfix/main.cfに以下を追記

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_security_level = may
home_mailbox = Maildir/

最近ではspamメールの送信を防ぐため,外部の25番ポートへの直接接続はプロバイダによってブロックされてしまうでしょう。そのためVPS上にメールサーバーを構築しても,自宅から25番ポートでメールを送信することができないかもしれません。そこでメール送信専用のSubmissionポートを利用できるようにします。/etc/postfix/master.cfを以下のように編集してください注17)⁠

注17)
main.cfではsmtpd_tls_security_levelがmay(STARTTLSサポートをクライアントに通知はするが,使用を強制はしない)となっていますが,master.cfではsubmissionの場合に限りencrypt(強制)にオプションを上書きしているため,メール送信時はSSLの利用が強制され,暗号化されていないメールは拒否されます。

/etc/postfix/master.cfを以下のように変更する

#submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject



submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。

コメント

コメントの記入