Bloody Mary - blog

Bloody Mary 別館

Cloud n – Postfix

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
Updated: 2015/1/13 火曜日 — 17:08:38

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Bloody Mary - blog © 2008 - 2021