2013年4月13日土曜日

Postfwd(postfix用ポリシーサーバ) ルールセットの作成

前回の続きで、ルールセットを実際に作成してみます。

オンラインドキュメントのEXAMPLEに設定例がたくさん載っているので、そちらも参考にされてください。

書式

[ <item1>=<value>; <item2>=<value>; ... ] action=<result>

  • item=値と指定し、1つのルールセットに複数の条件を※1行で※指定する場合はセミコロンで区切ります
  • 必ず、actionを一つ含む必要があります
  • itemとactionの記述の順番は特に決まりがありません(どのような順番で指定しても大丈夫です)

itemについて

itemとしてしては、以下のものが指定できます。



actionについて

actionとしては、以下のものが指定できます。





ルールセットの作成例

ここでは、メッセージサイズをトリガーにメールをHOLDする例をあげてみます。

  /etc/postfix/postfwd.conf:
# 1. 10MB以下だったら何もしない
# 2. 10MBを超えたら、HOLDする
id=SIZE001; protocol_state==END-OF-MESSAGE; action=DUNNO; size<=10000000
id=SIZE100; protocol_state==END-OF-MESSAGE; action=HOLD message too large

 設定を反映するには、次のように実行します。
/usr/local/sbin/postfwd2 --reload

 連携するpostfixでは以下のように設定を追加します。

  /etc/postfix/main.cf:
  ※メッセージサイズのルールのなので、smtpd_end_of_data_restrictionsで指定します
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10045



動作確認

実際にメールを配送して動作を確認します。

<id=SIZE001のルールが適用された場合: holdされずに配送された場合>
青字の箇所が実際の判定部分で、actionとしてDUNNOが適用されて、その後、配送処理が行われています。

Apr  8 00:40:32 cent6 postfix/smtpd[1731]: connect from unknown[192.168.0.11]
Apr  8 00:40:33 cent6 postfix/smtpd[1731]: 095AF2267C: client=unknown[192.168.0.11]
Apr  8 00:40:34 cent6 postfwd2/policy[1719]: [RULES] rule=0, id=SIZE001, queue=095AF2267C, client=unknown[192.168.0.11], sender=<user01@example.com>, recipient=<testuser@example.jp>, helo=<example.com>, proto=SMTP, state=END-OF-MESSAGE, delay=0s, hits=SIZE001, action=DUNNO
Apr  8 00:40:34 cent6 postfix/cleanup[1737]: 095AF2267C: message-id=<ACCE33A63DDA9Ftoshiaki@example.com>
Apr  8 00:40:34 cent6 postfix/qmgr[1671]: 095AF2267C: from=<user01@example.com>, size=475, nrcpt=1 (queue active)
Apr  8 00:40:34 cent6 postfix/smtpd[1731]: disconnect from unknown[192.168.0.11]
Apr  8 00:40:36 cent6 postfix/smtp[1740]: 095AF2267C: to=<testuser@example.jp>, relay=mail.example.jp[1xx.33.69.11]:25, delay=3.5, delays=1.4/0.01/2/0.03, dsn=2.0.0, status=sent (250 ok:  Message 12768477 accepted)
Apr  8 00:40:36 cent6 postfix/qmgr[1671]: 095AF2267C: removed



<id=SIZE100のルールが適用された場合: holdされた場合>
青字の最初の1行目が判定部分で、actionとしてHOLDが適用され、次の2行目でpostfixがHOLDの処理を実行しています(メールの配送は行われていません)。

Apr  8 00:41:14 cent6 postfix/smtpd[1731]: connect from unknown[192.168.0.11]
Apr  8 00:41:14 cent6 postfix/smtpd[1731]: 1F7262267C: client=unknown[192.168.0.11]
Apr  8 00:41:14 cent6 postfix/cleanup[1737]: 1F7262267C: message-id=<ADCE33A6566291toshiaki@example.com>
Apr  8 00:41:15 cent6 postfwd2/policy[1719]: [RULES] rule=1, id=SIZE100, queue=1F7262267C, client=unknown[192.168.0.11], sender=<user01@example.com>, recipient=<testuser@example.jp>, helo=<example.com>, proto=SMTP, state=END-OF-MESSAGE, delay=0s, hits=SIZE100, action=HOLD message too large
Apr  8 00:41:15 cent6 postfix/smtpd[1731]: 1F7262267C: hold: END-OF-MESSAGE from unknown[192.168.0.11]: <END-OF-MESSAGE>: End-of-data message too large; from=<user01@example.com> to=<testuser@example.jp> proto=SMTP helo=<example.com>

Apr  8 00:41:15 cent6 postfix/smtpd[1731]: disconnect from unknown[192.168.0.11]


0 件のコメント:

コメントを投稿