TOP

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 の内最低一つ必須です。
また、記述した順番に検査記述するため、順番は非常に重要です。

上の例の場合、
  1. 「mynetwork」にリストされたホストからは無条件で許可します。
  2. 次に、「sasl認証された」ホストからも許可します。
  3. 「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


TOP