人気ブログランキング | 話題のタグを見る
OP25B対策Part2 メールサーバを構築し別メールサーバに全転送【Postfix編】
OP25B対策Part1 Linuxルータでポート変換(非推奨)での別解決策として書いたOP25B対策Part2 メールサーバを構築し別メールサーバに全転送【sendmail編】のPostfix編です。

CentOS6でOP25B対策の送信専用メールサーバをたてようかと思ったんですが、CentOS6ではpostfixがデフォルトのSMTPサーバになったようなので、今回はpostfixで挑戦して見ました。

ということで、Postfixの設定です。

設定ファイルは /etc/postfix/main.cf になります。
sendmailとは違い、よりUnixライクな設定の記述になっています。

Viエディタで設定をしていきます。

# vi /etc/postfix/main.cf


ホスト名、ドメイン名
ホスト名というかFQDNSを指定します。適当で構わないようです。

myhostname = mailsv.hoge.3ryu


ドメイン名を指定します。デフォルトでは、$myhostname から最初の要素をひいたものになるので、指定しなくていいかもしれません。

mydomain = hoge.3ryu


mailコマンド等送信元ドメインを指定しない場合に、ドメイン部分を何にするか決める設定です。
デフォルトは、myhostname の値が使われるようです。

myorigin = $myhostname



自身宛かどうか
宛先メールアドレスのドメイン名が以下の設定合うなら自身宛と判断し、保存します。
sendmailで言うところの /etc/mail/local-host-names と同じ設定です。

mydestination = $myhostname, localhost.$mydomain, localhost



メール受け入れ設定
送られてきたメールを受け入れるか否かのアクセス制御を行います。
デフォルトは、localhost となっており、postfixがあるサーバ自身からのメールしか受け付けません。
以下のように localhost を all にすることで、すべてのホストからの受信を受け入れるようにします。

inet_interfaces = all

細かい転送制限は、次の項目で設定します。

転送制限設定
送られてきたメールを転送するかどうかのアクセス制御を行います。
デフォルトは、値が subnet になっており、このメールサーバと同じIPサブネット内のSMTPクライアントからのメールを転送するようです。
sendamilの、/etc/mail/access.db と同じ意味ですね。

mynetworks_style = subnet (デフォルト: サブネットワークを許可)
mynetworks_style = host (ローカルマシンのみを許可)
mynetworks_style = class (ローカルマシンと同じIPクラスA/B/Cに属するクライアントからのアクセスを許可。あまり好ましくない)

上記 mynetworks_style の設定よりも細かい設定をしたい場合は、mynetworks にて設定します。
("mynetworks"の設定をすると、"mynetworks_style" の設定そのものが無効になってしまう)

mynetworks = 127.0.0.0/8 (ローカルマシンのみを許可)
mynetworks = 127.0.0.0/8 168.100.189.2/32 (ローカルマシンと168.100.189.2の端末のみ許可)
mynetworks = 127.0.0.0/8 192.168.1.0/24 (ローカルマシンと192.168.1.0/24の端末のみ許可).
(区切りは、空白 カンマ が使える)

mynetworksは外部ファイルを指定することもできるようなので、送信元になるサブネットが多い場合は、外部ファイルで指定したほうがいいかもしれません。


転送丸投げ先設定
デフォルトではsendmailと同じように、Postfixはメールの宛先のMTAに直接配送しようとします。
今回は、プロバイダのメールサーバを経由させたいので、そのメールサーバに丸投げするようにします。
sendmailの define(`SMART_HOST', `[丸投げ先サーバ名') と同じ設定です。

relayhost = [am.wakwak.com]:587

sendmailと同じように転送先メールサーバ名に [ ] をつけるとDNS MX検索は行いません。通常は[]でくくっておきます。
また、ポート名もここで指定できるようです。(ポート名を明示しなければ 25 になります)


SMTP認証設定
上記の設定で、プロバイダSMTPサーバに丸投げするわけですが、たいていはSMTP認証が必要なので、ここで認証をするという設定してやります。

/etc/postfix/main.cf ファイルの最終行へ以下を追加
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
#↓認証方式を設定。プロバイダのSMTPサーバがどの認証に対応してるかはtelnetで確認。
smtp_sasl_mechanism_filter = DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN


これで、main.cfの設定は終わりです。

/etc/postfix/authinfo に認証情報を設定します。

# echo [SMTPサーバー名]:587 ユーザー名:パスワード > /etc/postfix/authinfo
# chmod 640 /etc/postfix/authinfo ←root以外参照できないようにパーミッション変更
# postmap /etc/postfix/authinfo ←authinfo.dbが作成される

(セキュリティのためauthinfoは root しかアクセスできないようパーミション変更することが望ましいかもしれません。)

main.cf を編集したら、postfixを再読み込みします。

/etc/rc.d/init.d/postfix reload



さて、これで届くはずと思いきや、届きません。
キューを見ると以下のようになっています。

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
AF109A0536 939 Tue Dec 6 13:09:38 hoge@hoge.com
(SASL authentication failed; cannot authenticate to server am.wakwak.com[211.9.230.130]: no mechanism available)
hoge@hoge.com

-- 1 Kbytes in 1 Request.

サーバとのSMTP認証のメカニズムがあっていないようです。
結構悩んだんですが、Labs Zsrv Net - Postfixで、GMAIL経由でメールを送る(OP25B対策)「Postfix」の設定で、ヒントが。。
結局認証種類別のcyrus-saslモジュールが入ってなかったことが原因でした。
当初以下の2つしか入っていませんでした。

# rpm -qa | grep cyrus
cyrus-sasl-2.1.23-8.el6.i686
cyrus-sasl-lib-2.1.23-8.el6.i686

plainと、md5用のモジュールをインストールします。

# yum install cyrus-sasl-plain
# yum install cyrus-sasl-md5


これで、postfixを service postfix restart したらちゃんと送れるようになりました。
やはり、sendmailよりかは設定しやすいですね。


参考:
Postfix 基本設定 公式ドキュメントの日本語訳です。まずは一読する価値アリです。
◇Postfixについて◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆ sendmailの時もお世話になりました。非常にわかりやすく説明されています。
Postfix から Gmail 経由でメールを送る linux.matchy.net: ~Linuxで遊ぼう!~
Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth) - maruko2 Note.
OP25B対策(Outbound Port 25 Blocking対策)
OP25B(Outbound Port 25 Blocking)対策 - Fedoraで自宅サーバー構築
Postfixの小技
Postfix で、Gmail にメールをリレーする - 私の二次記憶
by Jehoshaphat | 2013-04-01 23:10 | 豆知識


<< sendmailのメールキュー... OP25B対策Part2 メー... >>