Cloud n にオールインワンサーバを立てる 11
Postfix の基本設定、 SMTP 認証、TLS 設定。
メールフィルタ用に procmail のインストール。
Postfix アップデート
Cent OS 6.5 テンプレートには最初から Postfix が入っているので、アップデートしつつ設定を行う。
Postfix のバージョン確認。
# yum info postfix (略) Name : postfix Arch : x86_64 Epoch : 2 Version : 2.6.6 Release : 6.el6_5 Size : 9.7 M Repo : installed From repo : base Summary : Postfix Mail Transport Agent URL : http://www.postfix.org License : IBM Description : Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH (SASL), : TLS
postfix をアップデートしておく。
# yum update -y postfix
Postfix 設定
1. aliases ファイル移動
エイリアスファイルが /etc/aliases の場所にあるのが生理的に受け付けないので、 /etc/postfix/aliases に移動する。
main.cf にある aliases ファイルのパスを変更。
# vi /etc/postfix/main.cf ------------------------------ 修正 alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases ------------------------------
aliases ファイルの移動。
# mv /etc/aliases /etc/postfix/
aliases データベース作成。
# newaliases newaliases: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol newaliases: warning: inet_protocols: configuring for IPv4 support only postalias: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol postalias: warning: inet_protocols: configuring for IPv4 support only ⇒ エラー
エラーがでたので IPv6 を切る。
# vi /etc/postfix/main.cf ------------------------------ 修正 # Enable IPv4, and IPv6 if supported inet_protocols = ipv4 ------------------------------
もう一度 newaliases コマンドを実行する。
# newaliases ⇒ /etc/postfix/aliases.db が作成されたので OK。
2. Maildir 設定
# vi /etc/postfix/main.cf ------------------------------ コメントアウトの解除 home_mailbox = Maildir/ ------------------------------
新規ユーザ作成時、 /home/user のディレクトリに、自動的に Maildir ディレクトリが作られるようにする。
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir/
既存ユーザの hoge にも作成する。
# mkdir -p /home/hoge/Maildir/{new,cur,tmp} # chown -R hoge:hoge /home/hoge/Maildir # chmod -R 700 /home/hoge/Maildir
root へのメール配送は、 hoge ユーザに転送することで対応する。
※ 後ほど root メール配送用のディレクトリを作って、そこにフィルタされるようにする (squirrelmail あたりでやると簡単)。
# vi /etc/postfix/aliases ------------------------------ 修正 # Person who should get root's mail root: hoge ------------------------------ # newaliases
root に送ったメールが hoge に届いたことを確認する。 mail コマンドを使って送るのが簡単だと思われる。
・ mail コマンドのインストール # yum -y install mailx
hoge ユーザから root へメールを送り、それが自分あてに配送されるかどうかを確認する。
・ 対話形式でメールを送る $ mail root Subject: test ※ 件名 hoge ※ 本文 . ※ 本文を終わらせるにはドットだけを打ち込む EOT ・ 1 行のコマンドで送ることもできる。 $ echo "test daze." | mail -s "test2" root ・ hoge ユーザのメールボックス確認 $ mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/hoge": 2 messages 2 new >N 1 root Thu Dec 25 23:05 18/591 "test" N 2 root Thu Dec 25 23:09 18/598 "test2" & ⇒ 届いているので OK
2. main.cf 設定
/etc/postfix/main.cf の基本的な修正点。
myhostname = mail.studio-soleil.com ※ ドメインの MX レコードを入力 mydomain = studio-soleil.com ※ ドメイン名を入力 myorigin = $mydomain inet_interfaces = all ※ eth0 と lo が対象 inet_protocols = ipv4 ※ IPv6 はいらん mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks = 153.149.34.61/32, 127.0.0.0/8 ※ グローバル IP アドレス ・ Postfix 開始と自動起動 # service postfix start # chkconfig postfix on
3. SMTP AUTH 設定
Postfix は cyrus-sasl という SASL ライブラリを使用して SMTP 認証を行う。
その際、 PAM 経由で plain 認証を行うが、SMTPS を使用することにするので通信自体は暗号化される。
PLAIN 認証用のパッケージをインストールする。
# yum -y install cyrus-sasl-plain
main.cf に SMTP 認証の設定 (PAM を使う) と SPAM サーバ拒否設定と Relay 設定を行う。
# vi /etc/postfix/main.cf -------------------------------------------------- 以下、適当な場所に追加・編集 ############################### ########## SMTP AUTH ########## ############################### smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous # for PAM(Comment Out) #smtpd_sasl_local_domain = $myhostname # for Outlook LOGIN broken_sasl_auth_clients = yes # use RBL smtpd_client_restrictions = permit_mynetworks # reject_rhsbl_client rhsbl.ahbl.org ※ サービス停止したらしい (2015.01.08 Removed) reject_rbl_client spamcop.net reject_rbl_client dynablock.wirehub.net reject_rbl_client sbl.spamhaus.org # reject_unknown_client ※ 受信できないときがあるので外した permit # Relay smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination permit_auth_destination reject --------------------------------------------------
smtpd.conf に Linux User 認証設定を行う。
# vi /etc/sasl2/smtpd.conf -------------------------------------------------- デフォルトのままで OK pwcheck_method: saslauthd mech_list: plain login --------------------------------------------------
PAM を経由させて認証する設定を行う。
# vi /etc/sysconfig/saslauthd -------------------------------------------------- デフォルトのままで OK SOCKETDIR=/var/run/saslauthd MECH=pam FLAGS= --------------------------------------------------
PAM の設定を行う。
# vi /etc/pam.d/smtp -------------------------------------------------- デフォルトのままで OK #%PAM-1.0 auth include password-auth account include password-auth --------------------------------------------------
saslauthd の起動と、自動起動の設定を行う。
# service saslauthd start saslauthd を起動中: [ OK ] # chkconfig saslauthd on
4. SMTP 認証が有効になったかどうかをチェックする
BASE64 でエンコードした認証情報を得る。
$ perl -MMIME::Base64 -e 'print encode_base64("hoge\0hoge\0パスワード");' aG9nZQBob2dlAGhvZ2Vob2dl
TELNET して SMTP AUTH が有効になったかどうかを確認する。
$ telnet localhost 25 ※ 25 番ポートに接続 Trying ::1... Connected to localhost. Escape character is '^]'. 220 mail.studio-soleil.com ESMTP MailServer EHLO localhost 250-mail.studio-soleil.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth plain aG9nZQBob2dlAGhvZ2Vob2dl ※ BASE64 で暗号化した認証情報を入力 235 2.7.0 Authentication successful ※ OK quit 221 2.0.0 Bye Connection closed by foreign host.
5. TLS 設定
平文でパスワード認証しているため、 TLS 設定が必須。
公開鍵を作成する。
# cd /etc/pki/tls/certs/ # make mail.pem Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Miyagi Locality Name (eg, city) [Newbury]:Sendai Organization Name (eg, company) [My Company Ltd]:Studio Soleil Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:mail.studio-soleil.com Email Address []:root@studio-soleil.com
main.cf に TLS の設定を行う。
# vi /etc/postfix/main.cf -------------------------------------------------- 追加 ############################### ########## TLS ########## ############################### smtpd_use_tls = yes smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache -------------------------------------------------- ⇒ この設定で必ずしも TLS が有効になるわけではない。 ⇒ クライアントは 465 番ポート (SMTPS) に接続することで、セキュリティは担保されると信じたい。
master.cf にも TLS の設定を行う。
# vi /etc/postfix/master.cf -------------------------------------------------- コメントアウト解除 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 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 --------------------------------------------------
Postfix を再起動する。
# service postfix restart
6. セキュリティ的な設定
メールアドレスを収集する VRFY コマンドの禁止と、 From ドメインに A/MX が設定されていない場合にメール配送を拒否する設定。
# vi /etc/postfix/main.cf -------------------------------------------------- 最後辺りに追記 ############################### ########## Security ########## ############################### disable_vrfy_command = yes smtpd_sender_restrictions = reject_unknown_sender_domain --------------------------------------------------
Procmail インストール
メールのフィルタを可能にする Procmail をインストールする。
スクリプトを自分で作ることもできるが、 GUI 的なツールで設定を行った方が楽だと思う。
WEB メールの Squrrelmail あたりから利用できればいいのだが、 PHP 5.6 には対応していないのでイバラの道を歩むことになる。そのうち紹介できれば、する。
procmail をインストールする。
# yum -y install procmail
main.cf に procmail を利用する設定を行う。
# vi /etc/postfix/main.cf ------------------------------- mailbox_command = /usr/bin/procmail -------------------------------
procmail の全体的な設定を行う。
# vi /etc/procmailrc ------------------------------- SHELL=/bin/bash PATH=/usr/bin:/bin DROPPRIVS=yes MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOGFILE=$MAILDIR/.procmail.log #VERBOSE=ON # 詳細ログ出力用。通常は OFF。 -------------------------------
上記の設定で /home/hoge/Maildir/.procmail.log というログファイルが作られることになるのだが、メールを受信するたびに大きくなっていくので、肥大化を防ぐためにログローテート設定を行う。
# vi /etc/logrotate.d/procmail /home/*/Maildir/.procmail.log { missingok nocreate notifempty }
postfix を再起動しておく。たまに reload では反映されない設定が出てくるので、再起動しておくと確実。これは postfix に限らず httpd や named でも同様。
# service postfix restart