postfixの設定をしよう
main.cf 〜 その1 基本設定〜
まずはオリジナルのmain.cfを保存します。
# cd /etc/postfix/
# cp main.cf main.cf.org
# vi main.cf
-- 自ホストのPOPサーバーが受取るドメイン名を記入
-- $myhostname は『/etc/sysconfig/network』のHOSTNAME
-- $mydomain は$myhostnameの『*.』をマイナスしたもの
mydestination = $myhostname, localhost.$mydomain, localhost, grot3.com
-- 受信を許可するサーバーの指定。『all』にすると、すべて許可
inet_interfaces = all
-- 受信を許可するネットワークプロトコル。all,ipv4,ipv6など
inet_protocols = ipv4
-- キューやデーモンプロセスを所有するユーザー。
mail_owner = postfix
-- 後述する[smtpd_recipient_restrictions]で使用します
-- ここには中継元MTAサーバを指定します
mynetworks = 1.2.3.0/24, 4.5.6.7
-- メールボックスの位置
home_mailbox = $HOME/Maildir/
-- 宛先不明メールに付けるエラーコード
-- 古いOSだとデフォルトで[450]となっており、一定時間毎に再送信するため
-- 一応確認しておく
unknown_local_recipient_reject_code = 550
-- キューに滞留していることを送信者へ通知する時間
delay_warning_time = 2h
main.cf 〜 その2 セキュリティ設定〜
# vi main.cf
-- transportファイルの場所
-- transportファイルについては次項で説明予定
transport_maps = hash:/etc/postfix/transport
-- smtpdの最大数
default_process_limit = 30
-- 送信可能最大サイズ(Byte)の設定
message_size_limit = 20971520
-- HELO (または EHLO) コマンドの要求
smtpd_helo_required = yes
-- バナーの表示文字列(telnet等で接続した際のバナー)
-- サービスやバージョン等の余計な情報は出さないようにする
smtpd_banner = $myhostname ESMTP
-- SMTP AUTHを使用する
smtpd_sasl_auth_enable = yes
-- SMTP AUTHのセキュリティ制限
smtp_sasl_security_options = noanonymous
-- SMTP AUTHの許可グループ(RCPT TOを許可するユーザー)
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
-- 標準でない認証形式を許可(outlook6より前には必要)
broken_sasl_auth_clients = yes
-- vrfyコマンドでユーザーの有無を確認できなくする
disable_vrfy_command = yes
メモ:
ここまでをまとめると、
「inet_interfaces」のallで公開設定しました。
「mydestination」で『grot3.com』を指定したことで、あて先が『grot3.com』のメールを自サーバー宛てと判断します。
「smtpd_recipient_restrictions」のpermit_sasl_authenticated でsmtp認証を受けた後のRCPTを許可する。
「smtpd_recipient_restrictions」のpermit_mynetworks では『「mynetworks」からのアクセスは認証なしで通す。』を意味します。
※「mynetworks」に 0.0.0.0/0 を指定したら、事実上何でもOKとなり、確実に不正中継サーバーです。
smtp認証を有効にするために「smtpd_sasl_auth_enable」を設定する。
というところでしょうか。
メモ:
smtpd_recipient_restrictions(RCPTコマンドの許可)について
※念のため書きますが、[smtpd_recipient_restrictions]の設定は
必須です。
reject_unauth_destination,reject, defer, defer_if_permit の内最低一つ
必須です。
また、記述した順番に検査記述するため、順番は非常に重要です。
上の例の場合、
- 「mynetwork」にリストされたホストからは無条件で許可します。
- 次に、「sasl認証された」ホストからも許可します。
- 「reject_unauth_destination」で一定の条件に一致しないものは拒否します。
※最後に、「後は全部拒否」とすることでセキュリティを上げています。
という内容になっています。
指定できる内容や詳細が知りたい方は、
google先生に訪ねてください。
以下は必須ではありませんが、ほかの制限もできるので紹介します
[smtpd_client_restrictions]
[smtpd_helo_restrictions]
[smtpd_sender_restrictions]
[smtpd_data_restrictions]
[smtpd_etrn_restrictions]
セキュリティ設定による効果
[disable_vrfy_command]の検証
-- telnet接続
[root@grot3 postfix]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.Escape character is '^]'.
220 grot3 ESMTP Postfix ← デフォルトのbanner表示。必要最小限の情報が表示される程度にしましよう。
-- vrfy有効時
vrfy grot3 ← ユーザー[grot3]のチェック
252 2.0.0 grot3 ← 存在するため252が返ります
vrfy test ← ユーザー[test]のチェック
550 5.1.1 : Recipient address rejected: User unknown in local recipient table ← 存在しないためエラー550が返ります
-- vrfy無効時
vrfy grot3 ← ユーザー[grot3]のチェック
502 5.5.1 VRFY command is disabled ← vrfyコマンドが無効のため、エラー502が返ります
[mynetworks]の検証
-- mynetworks未設定時(認証必須)
[root@grot3 postfix]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.Escape character is '^]'.
220 grot3 ESMTP Postfix
MAIL FROM:send@grot3.com
250 2.1.0 Ok
RCPT TO:receive@grot3.com
554 5.7.1 : Relay access denied ← RCPTコマンドを受け付けません
RSET ← 今までのコマンドをリセットします
250 2.0.0 Ok
AUTH LOGIN ← AUTH LOGINコマンドで認証を開始します
334 VXNlcm5hbWU6 → base64デコードすると[Username:]と書かれています
c2VuZA== ← base64でエンコードしたユーザー名を入力します
334 UGFzc3dvcmQ6 → base64デコードすると[Password:]と書かれています
cGFzc3dvcmQ= ← base64でエンコードしたパスワードを入力します
235 2.7.0 Authentication successful
MAIL FROM:send@grot3.com
250 2.1.0 Ok
RCPT TO:receive@grot3.com
250 2.1.5 Ok ← 認証後なのでRCPTコマンドを受け付けます
-- mynetworks設定時(認証不要)
[root@grot3 postfix]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.Escape character is '^]'.
220 grot3 ESMTP Postfix
MAIL FROM:send@grot3.com
250 2.1.0 Ok
RCPT TO:receive@grot3.com
250 2.1.5 Ok ← 認証しなくてもRCPTコマンドを受け付けます
master.cf 〜 submission(587)の有効化〜
# vi master.cf
-- 以下の行のコメントを外す
submission inet n - n - - smtpd
-- /etc/servicesに以下2行があることを確認する
# grep submission /etc/services
submission 587/tcp msa # mail message submission
submission 587/udp msa # mail message submission