これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド postfwd1 です。
プログラム:
NAME
postfwd - postfix ファイアウォールデーモン
SYNOPSIS
postfwd [オプション] [SOURCE1、SOURCE2、...]
ルールセット: (少なくとも XNUMX つ、複数の使用が許可されます):
-f, --file からルールを読み取ります
-r, --rule 追加します構成する
採点:
-s, --scores = 戻り値スコアを超えたとき
コントロール:
-d, --daemon postfwd をデーモンとして実行
-k, --kill デーモンを停止
--reload 構成をリロードします
--dumpstats は使用統計を表示します
--dumpcache キャッシュの内容を表示します
--delcache リクエストキャッシュからアイテムを削除します
--デルレイトレートキャッシュからアイテムを削除します
ネットワーキング:
-i, --インターフェースインターフェイスでリッスンする
-p, --port ポートでリッスンする
--プロトソケットタイプ (tcp または unix)
-u, --user uid をユーザーに設定する
-g, --group グループに gid を設定
--umask ファイルパーミッションの umask を設定する
-R, --chroot デーモンをchrootします
--pidfile 下にpidfileを作成します
- 施設syslog ファシリティ
--socktype syslog ソックスタイプ
-l, --logname syslog メッセージのラベル
--loglen 次の後に syslog を切り捨てます文字
キャッシング:
-c, --cache リクエストキャッシュのタイムアウトをに設定します秒
--cache-no-size はキャッシュのサイズ属性を無視します
--cache-no-sender は、キャッシュ内の送信者アドレスを無視します
--cache-rdomain-only は、キャッシュ内の受信者アドレスのローカル部分を無視します
--cache-rbl-timeout デフォルトの rbl タイムアウト (ルールセットで指定されていない場合)
--cache-rbl-default 一致するデフォルトの rbl 応答パターン (正規表現)
--キャッシュID , .. 要求キャッシュ識別子の属性のリスト
--cleanup-requests リクエスト キャッシュのクリーンアップ間隔 (秒単位)
--cleanup-rbls rbl キャッシュのクリーンアップ間隔 (秒)
--cleanup-rates レート キャッシュのクリーンアップ間隔 (秒単位)
任意:
-t、--test テスト、常に「dunno」を返す
-v, --verbose 詳細ログ、XNUMX 回 (-vv) を使用してレベルを上げる
-S, --概要使用統計を表示する間隔秒
--norulelog はルールのログ記録を無効にします
--norulestats はルールごとの統計を無効にします
--noidlestats はアイドル時の統計を無効にします
-n, --nodns DNS を無効にする
--nodnslog DNS ロギングを無効にします
--dns_async_txt dnsbl A と TXT ルックアップを同時に実行します
--dns_timeout 非同期 DNS クエリの秒単位のタイムアウト
--dns_timeout_max dnsbl が非アクティブ化されるまでの最大 dns タイムアウト
--dns_timeout_interval dns タイムアウト最大カウンターの秒単位の間隔
--dns_max_ns_lookups sender_ns_addrs で検索する最大名
--dns_max_mx_lookups sender_mx_addrs で検索する最大の名前
-I, --instantcfg は、新しいリクエストごとにルールファイルを再読み込みします
--config_timeout
--keep_rates はリロード時にレート制限カウンターをクリアしません
--save_rates ディスクへの保存と読み込みの速度制限
--fast_limit_evaluation ルールセットが解析される前にレート制限を評価します
(制限に注意してください)
プラグイン:
--プラグインpostfwd プラグインをファイルから読み込みます
情報 (コマンドラインでのみ使用してください!):
-C、--showconfig はルールセットの概要を表示、-v は詳細表示
-L, --stdoutlog syslog メッセージを stdout にリダイレクトします
-P, --perfmon syslog なし、stdout なし
-V, --version プログラムのバージョンを表示
-h, --help 使用方法を表示
-m, --manual プログラムのマニュアルを表示します
DESCRIPTION
はじめに
postfwd は、それらに似たルールセットで複雑な後置制限を組み合わせるために書かれています
ほとんどのファイアウォールの。 このプログラムは、postfix ポリシー委任プロトコルを使用して制御します
メッセージが受け入れられる前にメール システムにアクセスします (次の URL をご覧ください)。
<http://www.postfix.org/SMTPD_POLICY_README.html> 詳しくはこちら)。
postfwd を使用すると、複数の組み合わせに対してアクション (拒否、ダンノなど) を選択できます。
smtp パラメータ (送信者と受信者のアドレス、サイズ、クライアントの TLS フィンガープリントなど)。
また、簡単で読みやすい単純なマクロ/ACL を提供します。
構成。
機能と特徴:
* smtp パラメータの複雑な組み合わせ
* 結果に応じた任意のアクションを含む RBL/RHSBL ルックアップの組み合わせ
* 採点システム
* 日時ベースのルール
* マクロ/ACL、グループ、否定
* リクエスト属性の比較 (例: client_name と helo_name)
* リクエストと DNS ルックアップの内部キャッシュ
* ルール効率分析のための組み込み統計
CONFIGURATION
構成行は、セミコロン (`;`) で区切られたオプションの item=value ペアで構成されます
および適切な目的のアクション:
[ = ; = ; ...]アクション=
例:
client_address=192.168.1.1 ; 差出人==[メール保護] ; アクション=拒否
これにより、192.168.1.1 からのエンベロープ送信者のすべてのメールが拒否されます [メール保護]。 の順
要素は重要ではありません。 したがって、次の場合と同じ結果になります。
前の例:
アクション=拒否; client_address=192.168.1.1 ; 差出人==[メール保護]
リクエスト アイテムをルールセットと比較する方法は、次のように影響を受ける可能性があります。
方法:
================================================== ==================
ITEM == VALUE ITEM が VALUE と等しい場合は true
ITEM => VALUE ITEM >= VALUE の場合は true
ITEM =< VALUE ITEM <= VALUE の場合は true
ITEM > VALUE ITEM > VALUE の場合は true
ITEM < VALUE ITEM < VALUE の場合は true
ITEM =~ VALUE ITEM ~= /^VALUE$/i の場合は true
ITEM != VALUE ITEM が VALUE に等しい場合は false
ITEM !> VALUE ITEM >= VALUE の場合は false
ITEM !< VALUE ITEM <= VALUE の場合は false
ITEM !~ VALUE ITEM ~= /^VALUE$/i の場合は false
ITEM = VALUE のデフォルトの動作 (ITEMS セクションを参照)
================================================== ==================
ログ ファイル内の単一のルールを識別するために、それぞれに一意の識別子を追加できます。
それ:
ID=R_001; アクション=拒否; client_address=192.168.1.1 ; 差出人==[メール保護]
これらの識別子を ` のターゲットとして使用できますジャンプ()` コマンド (「アクション」セクションを参照)
下)。 先頭または末尾の空白文字は無視されます。 「#」を使用してコメントします
構成。 他の人は感謝します。
ルールセットは XNUMX つまたは複数のルールで構成され、ファイルからロードするか、またはとして渡すことができます。
コマンドライン引数。 詳細については、以下のコマンド ライン セクションを参照してください。
このトピック。
postfwd バージョン 1.30 以降、複数の行にまたがるルールは、プレフィックスを付けることで定義できます。
XNUMX つまたは複数の空白文字 (マクロの場合は「}」) を含む次の行:
id=RULE001
クライアントアドレス=192.168.1.0/24
差出人==[メール保護]
action=REJECT アクセスなし
1.30 より前のバージョンの postfwd では、末尾に「;」が必要です。 および「\」文字:
ID=RULE001; \
クライアントアドレス=192.168.1.0/24; \
差出人==[メール保護]; \
action=REJECT アクセスなし
ITEMS
id - ログ分析に使用できる一意のルール ID
ID は「jump」コマンドのターゲットとしても機能します。
日付、時間 - 指定されたルール内の時間または日付範囲がヒットする必要があります
# フォーマット:
# 29月XNUMX日
日付= 29.02.2008
# 24月26日~XNUMX日
日付=24.12.2008-26.12.2008
# 本日から23月XNUMX日まで
日付=-23.09.2008
# 1月XNUMX日から今日まで
日付=01.04.2008-
days, months - 平日 (Sun-Sat) または月 (Jan-Dec) の範囲
指定されたルール内でヒットする
score - 指定されたスコアに達したとき (アクションセクションを参照)
指定されたアクションが postfix に返されます
スコアは再定義されるまでグローバルに設定されます!
request_score - この値により、リクエストのスコアにアクセスできます。 それ
変数 ($$request_score) として使用できます。
rbl, rhsbl, - 指定された RBL/RHSBL を照会します。可能な値は次のとおりです。
rhsbl_client、 [/ / 、 / / ]
rhsbl_sender、(デフォルト: reply=^127\.0\.0\.\d+$ maxcache=3600)
rhsbl_reverse_client すべての rhsbl_* クエリの結果が結合されます
rhsbl_count (以下を参照)。
rblcount、rhsblcount - 一致する最小 RBL/RHSBL ヒットカウント。 指定しない場合
単一の RBL/RHSBL ヒットは、rbl/rhsbl アイテムと一致します。
'all' を指定してすべての項目を評価し、
アクション内の変数として (ACTIONS セクションを参照)
(デフォルト:1)
sender_localpart, - 送信者アドレスのローカル/ドメイン部分
送信者_ドメイン
recipient_localpart, - 受信者アドレスのローカル/ドメイン部分
受信者_ドメイン
helo_address - postfwd は helo_name を検索しようとします。 使用
helo_address=!!(0.0.0.0/0) 不明を確認します。
これを積極的なアクセス制御に使用しないでください
(ホワイトリストに登録)、偽造される可能性があるため。
sender_ns_names, - postfwd は名前/IP アドレスを調べようとします
送信者ドメイン部分のネームサーバーのsender_ns_addrs。
これを積極的なアクセス制御に使用しないでください
(ホワイトリストに登録)、偽造される可能性があるため。
sender_mx_names, - postfwd は名前/IP アドレスを検索しようとします
送信者ドメイン部分の mx レコードの sender_mx_addrs。
これを積極的なアクセス制御に使用しないでください
(ホワイトリストに登録)、偽造される可能性があるため。
version - postfwd バージョン、「postfwd n.nn」を含む
これにより、ルールセットでバージョンベースのチェックが有効になります
(例: 移行用)。 古いバージョンでも動作しますが、
存在しないアイテムは常に false を返すため:
# バージョン >= 1.10
ID=R01; version~=1\.[1-9][0-9]; 送信者ドメイン==some.org \
; action=REJECT 申し訳ありませんがアクセスできません
ratecount - rate()、size()、および rcpt() アクションでのみ使用できます。
実際の制限カウンターが含まれています。
ID=R01; action=rate(sender/200/600/REJECT 制限の 200 を超えました [$$ratecount ヒット])
ID=R02; action=rate(送信者/100/600/WARN 制限の 100 を超えました [$$ratecount ヒット])
これらに加えて、postfix ポリシー委譲プロトコルの任意の属性を指定できます。
必要に応じて自由に組み合わせてください (以下の例のセクションを参照してください)。
ほとんどの値は、正規表現 (PCRE) として指定できます。 については、下の表を参照してください。
詳細:
# ================================================= =========
# 項目=値の種類
# ================================================= =========
id=何か マスク = 文字列
date=01.04.2007-22.04.2007 マスク = 日付 (DD.MM.YYYY-DD.MM.YYYY)
time=08:30:00-17:00:00 マスク = 時刻 (HH:MM:SS-HH:MM:SS)
days=Mon-Wed マスク = 平日 (Mon-Wed) または数値 (1-3)
months=Feb-Apr マスク = 月 (Feb-Apr) または数値 (1-3)
スコア=5.0 マスク = 最大浮動小数点値
rbl=zen.spamhaus.org マスク = / / [、...]
rblcount=2 マスク = 数値、rbl ヒット数が 2 以上の場合に一致
helo_address= マスク = CIDR[,CIDR,...]
sender_ns_names=some.domain.tld マスク = PCRE
sender_mx_names=some.domain.tld マスク = PCRE
sender_ns_addrs= マスク = CIDR[,CIDR,...]
sender_mx_addrs= マスク = CIDR[,CIDR,...]
# ----------------------------
# Postfix バージョン 2.1 以降:
# ----------------------------
client_address= マスク = CIDR[,CIDR,...]
client_name=another.domain.tld マスク = PCRE
reverse_client_name=another.domain.tld マスク = PCRE
helo_name=some.domain.tld マスク = PCRE
送信者=[メール保護] マスク = PCRE
受信者=[メール保護] マスク = PCRE
recipient_count=5 mask = 数値、受信者 >= 5 の場合に一致します
# ----------------------------
# Postfix バージョン 2.2 以降:
# ----------------------------
sasl_method=プレーン マスク = PCRE
sasl_username=あなたのマスク = PCRE
sasl_sender= マスク = PCRE
size=12345 マスク = 数値、サイズ >= 12345 の場合に一致
ccert_subject=blackhole.nowhere.local mask = PCRE (TLS が検証された場合のみ)
ccert_issuer=John+20Doe mask = PCRE (TLS が検証された場合のみ)
ccert_fingerprint=AA:BB:CC:DD:EE:... mask = PCRE (ここでは「...」を使用しないでください)
# ----------------------------
# Postfix バージョン 2.3 以降:
# ----------------------------
encryption_protocol=TLSv1/SSLv3 マスク = PCRE
encryption_cipher=DHE-RSA-AES256-SHA マスク = PCRE
encryption_keysize=256 mask = 数値、keysize >= 256 の場合に一致
...
現在のリストは次の場所にあります。http://www.postfix.org/SMTPD_POLICY_README.html>。 お願いします
SMTP トランザクションのどのレベルでどの属性を使用できるかを注意深く読んでください。
(たとえば、サイズは END-OF-MESSAGE レベルでのみ確実に機能します)。 パターンマッチングは
大文字と小文字を区別しない。
同じアイテムを複数回使用することができ、論理 OR として比較されます。つまり、
これは期待どおりに機能します:
ID=TRUST001; アクション=OK; 暗号化キーサイズ=64
ccert_fingerprint=11:22:33:44:55:66:77:88:99
ccert_fingerprint=22:33:44:55:66:77:88:99:00
ccert_fingerprint=33:44:55:66:77:88:99:00:11
送信者=@ドメイン\.local$
client_address、rbl、および rhsbl 項目は、空白またはカンマ区切りで指定することもできます
値:
ID=SKIP01; アクション=わからない
クライアントアドレス=192.168.1.0/24、172.16.254.23
ID=SKIP02; アクション=わからない
client_address=10.10.3.32 10.216.222.0/27
現在、次のアイテムは一意である必要があります。
id、最小値と最大値、rblcount と rhsblcount
'!!' を前に付けることで、任意の項目を否定できます。 それに、例えば:
ID=ホスト001; ホスト名 == !!secure.trust.local; action=REJECT のみ secure.trust.local してください
または正しい比較演算子を使用します。
ID=ホスト001; ホスト名 != secure.trust.local; action=REJECT のみ secure.trust.local してください
正規表現との混同を避けるため、または単に見やすくするために、'!!(...)' を使用できます。
ID=ユーザー01; sasl_username = !!( (ボブ|アリス) ) ; action=REJECT あれは誰?
リクエスト属性は、先行する「$$」文字によって比較できます。例:
ID=R-003; クライアント名 = !! $$helo_name ; action=WARN helo が DNS と一致しません
#または
ID=R-003; client_name = !!($$(helo_name)) ; action=WARN helo が DNS と一致しません
これは、PCRE 値に対してのみ有効です (上記のリストを参照)。 比較は次のように実行されます。
大文字と小文字を区別しない完全一致。 「-vv」オプションを使用してデバッグします。
これらの特別なアイテムは、新しいルールのためにリセットされます:
rblcount - RBL 回答の数が含まれています
rhsblcount - RHSBL 回答の数が含まれています
一致 - 一致したアイテムの数が含まれています
dnsbltext - すべての RBL および RHSBL 応答の dns TXT 部分が次の形式で含まれています。
rbltype:rblname: ; rbltype:rblname: ; ...
これらの特別なアイテムは、マッチング ルールによって変更されます。
request_hits - 一致するすべてのルールの ID が含まれています
これは、これらの値を
後のルール:
# 値を設定
ID=RBL01; rhsblcount=すべて; rblcount=all
アクション=セット(HIT_rhls=$$rhsblcount,HIT_rbls=$$rblcount,HIT_txt=$$dnsbltext)
rbl=list.dsbl.org、bl.spamcop.net、dnsbl.sorbs.net、zen.spamhaus.org
rhsbl_client=rddn.dnsbl.net.au、rhsbl.ahbl.org、rhsbl.sorbs.net
rhsbl_sender=rddn.dnsbl.net.au、rhsbl.ahbl.org、rhsbl.sorbs.net
# 比較
ID=RBL02; HIT_rhls>=1 ; HIT_rbls>=1 ; action=554 5.7.1 $$HIT_rhls RHSBL および $$HIT_rbls RBL を使用してブロックされました [INFO: $$HIT_txt]
ID=RBL03; HIT_rhls>=2 ; action=554 5.7.1 $$HIT_rhls RHSBL を使用してブロックされました [INFO: $$HIT_txt]
ID=RBL04; HIT_rbls>=2 ; action=554 5.7.1 $$HIT_rbls RBL を使用してブロックされました [INFO: $$HIT_txt]
ファイル
postfwd1 v1.15 と postfwd2 v0.18 の長いアイテムリストは別々のファイルに保存できるため:
ID=R001; ccert_fingerprint==ファイル:/etc/postfwd/wl_ccerts; アクション=ダンノ
postfwd は、/etc/postfwd/wl_ccerts から項目のリスト (XNUMX 行に XNUMX 項目) を読み取ります。
コメントは許可されています:
# クライアント1
11:22:33:44:55:66:77:88:99
# クライアント2
22:33:44:55:66:77:88:99:00
# クライアント3
33:44:55:66:77:88:99:00:11
key=value 形式の既存のテーブルを使用するには、以下を使用できます。
ID=R001; ccert_fingerprint==テーブル:/etc/postfwd/wl_ccerts; アクション=ダンノ
これは右側の値を無視します。 アイテムを混在させることができます:
ID=R002; アクション=拒否
client_name==不明
client_name==ファイル:/etc/postfwd/ブラックリスト化
非 pcre (カンマ区切り) アイテムの場合:
ID=R003; アクション=拒否
client_address==10.1.1.1、ファイル:/etc/postfwd/blacklisted
ID=R004; アクション=拒否
rbl=myrbl.home.local、zen.spamhaus.org、ファイル:/etc/postfwd/rbls_changeing
コマンドラインで --show_config オプションを使用して設定を確認できます。
# postfwd --showconfig --rule='action=DUNNO; client_address=10.1.0.0/16、ファイル:/etc/postfwd/wl_clients、192.168.2.1'
次のようなものを与える必要があります:
ルール 0: id->"R-0"; action->"DUNNO"; client_address->"=;10.1.0.0/16, =;194.123.86.10, =;186.4.6.12, =;192.168.2.1"
ファイルを読み取れない場合は、無視されます。
# postfwd --showconfig --rule='action=DUNNO; client_address=10.1.0.0/16、ファイル:/etc/postfwd/wl_clients、192.168.2.1'
[ログ警告]: エラー: ファイル /etc/postfwd/wl_clients が見つかりません - ファイルは無視されますか?
ルール 0: id->"R-0"; action->"DUNNO"; client_address->"=;10.1.0.0/16, =;192.168.2.1"
ファイル項目は構成段階で評価されます。 したがって、次の場合は postfwd をリロードする必要があります。
ファイルが変更されました。
リクエストごとにリロードされるファイルを指定する場合は、lfile を使用できます。
および ltable:
ID=R001; client_address=lfile:/etc/postfwd/client_whitelist; アクション=わからない
これにより、ルールが変更されるたびに /etc/postfwd/client_whitelist の変更時刻がチェックされます。
が評価され、必要に応じてリロードされます。 もちろん、これによりシステム負荷が増加する可能性があるため、
注意して使用してください。
--showconfig オプションは違いを示しています。
## 構成段階で評価
# postfwd2 --nodaemon -L --rule='client_address=table:/etc/postfwd/clients; action=dunno' -C
ルール 0: id->"R-0"; アクション->「わからない」; client_address->"=;1.1.1.1, =;1.1.1.2, =;1.1.1.3"
## ルールヒットに対して評価される
# postfwd2 --nodaemon -L --rule='client_address=ltable:/etc/postfwd/clients; action=dunno' -C
ルール 0: id->"R-0"; アクション->「わからない」; client_address->"=;ltable:/etc/postfwd/clients"
ファイルは他のファイルを参照できます。 以下が有効です。
-- ファイル /etc/postfwd/rules.cf --
ID=R001; client_address=file:/etc/postfwd/clients_master.cf; アクション=ダンノ
-- ファイル /etc/postfwd/clients_master.cf --
192.168.1.0/24
ファイル:/etc/postfwd/clients_east.cf
ファイル:/etc/postfwd/clients_west.cf
-- ファイル /etc/postfwd/clients_east.cf --
192.168.2.0/24
-- ファイル /etc/postfwd/clients_west.cf --
192.168.3.0/24
現在、ループ検出 (/a/file が /a/file を呼び出す) は行われていないことに注意してください。
この機能は、postfwd1 v1.15 および postfwd2 v0.18 以降でのみ使用できます。
ACTIONS
全般
すべてのルール項目が要求 (または少なくとも XNUMX つの要求) に一致すると、アクションが実行されます。
任意の項目リスト)。 次のように、前に $$ 文字を付けることで、リクエスト属性を参照できます。
id=R-003; client_name = !!$$helo_name; action=WARN helo '$$helo_name' が DNS '$$client_name' と一致しません
#または
id=R-003; client_name = !!$$helo_name; action=WARN helo '$$(helo_name)' は DNS '$$(client_name)' と一致しません
postfix 行動
アクションは、ポリシー委任リクエストの結果として postfix に返信されます。 任意のアクション
postfix が理解するものは許可されています - 「man 5 access」または
<http://www.postfix.org/access.5.html> 説明のために。 アクションが指定されていない場合、
イベントを単にログに記録する postfix WARN アクションが、対応するルールに使用されます。
postfwd は、ルールセットの最後に達し、ルールセットがない場合、dunno を返します。
一致しました。 これは、アクション ステートメントのみを含む最後のルールを配置することで変更できます。
...
アクション=わかりません; [メール保護] #送信者は大丈夫です
action=reject # デフォルトの拒否
後送り 行動
postfwd アクションは、プログラムの動作を制御します。 現在、指定できるのは
次のとおりです。
ジャンプ( )
id のルールにジャンプします、これを使用して特定のルールをスキップします。
逆方向にジャンプできますが、ループがないことを覚えておいてください
現時点で検出! 存在しない ID へのジャンプはスキップされます。
スコア ( )
リクエストのスコアは、指定された値によって変更されます、
これは浮動小数点値でなければなりません。 修飾子は次のいずれかです
+n.nn は現在のスコアに n.nn を追加します
-n.nn は、現在のスコアから n.nn を減算します
*n.nn は現在のスコアに n.nn を掛けます
/n.nn は、現在のスコアを n.nn で除算します。
=n.nn は現在のスコアを n.nn に設定します
スコアが `--scores` オプションで設定された最大値を超えた場合 (
コマンド ライン) またはスコア アイテム (「アイテム」セクションを参照)、アクション
この場合に定義された値が返されます (デフォルト: 5.0 =>「REJECT postfwd スコア超過」)。
設定 ( = 、 = 、...)
このコマンドを使用すると、リクエスト属性を挿入またはオーバーライドできます。
あなたのさらなるルールセットと比較して。 これを使用して、大きな項目リストの繰り返し比較を高速化します。
詳細については、例のセクションを参照してください。 複数の key=value ペアを分離できます
「、」文字で。
レート ( / / / )
このコマンドは、指定された、リクエストがあるたびに増加します
それを含む到着。 超える場合内部数秒で戻りますポストフィックスに。
レート カウンターは、ルールセットが解析される前に実行されるため、非常に高速です。
その点に注意してくださいpostfwd バージョン <1.33 では、postfix アクション (postfwd アクションなし) に限定されていました!
# 3 分あたり 5 つ以下のリクエスト
# 同じ「未知の」クライアントから
ID=レート01; client_name==不明
action=rate(client_address/3/300/450 4.7.1 申し訳ありませんが、3 分あたり最大 5 つのリクエスト)
また、ルールセット内のレート制限の順序が重要であることにも注意してください。つまり、
これは:
# 期待通りに動く
ID=R001; action=rcpt(sender/500/3600/REJECT 送信者 $$sender の 500 時間あたり XNUMX 受信者の制限を超えました)
ID=R002; action=rcpt(sender/200/3600/WARN state YELLOW for sender $$sender)
これとは異なる結果につながります。
# ルール R002 は実行されません
ID=R001; action=rcpt(sender/200/3600/WARN state YELLOW for sender $$sender)
ID=R002; action=rcpt(sender/500/3600/REJECT 送信者 $$sender の 500 時間あたり XNUMX 受信者の制限を超えました)
サイズ ( / / / )
このコマンドは、rate() コマンドと同様に機能しますが、レート カウンターが
リクエストの size 属性によって増加します。 これを確実に行うには、postfwd を呼び出す必要があります。
smtpd_end_of_data_restrictions。 確認したい場合は、ルールセット内で確認できます。
# クライアントごとに 1.5 時間あたり XNUMX MB のサイズ制限
ID=SIZE01; protocol_state==END-OF-MESSAGE ; client_address!=10.1.1.1
action=size(client_address/1572864/3600/450 4.7.1 申し訳ありません、1.5 時間あたり最大 XNUMXMB)
rcpt ( / / / )
このコマンドは、rate() コマンドと同様に機能しますが、レート カウンターが
リクエストの recipient_count 属性によって増加します。 これを確実に行うには、postfwd を呼び出す必要があります
smtpd_data_restrictions または smtpd_end_of_data_restrictions から。 確認したい場合は、
ルールセット内で確認してください:
# 受信者数制限 3 クライアントあたり XNUMX 時間あたり XNUMX
ID=RCPT01; protocol_state==END-OF-MESSAGE ; client_address!=10.1.1.1
action=rcpt(client_address/3/3600/450 4.7.1 申し訳ありません、3 時間あたり最大 XNUMX 受信者)
rate5321,size5321,rcpt5321 ( / / / )
対応する非 5321 関数と同じですが、localpart の違いがあります。
送信者または受信者のアドレスは、rfc5321 に従って大文字と小文字を区別して評価されます。 それか
からのリクエストを意味します [メール保護] [メール保護] 別扱いになります
聞く ( : [: ]))
ポリシーの決定を別のポリシー サービス (postgrey など) に委任できます。 最初
XNUMX 番目の引数 (アドレスとポート) は必須です。 XNUMX 番目のオプションの引数は、
postfwd に特定の回答を無視してルールセットの解析を続行するように指定します。
# 例 1: postgrey をクエリし、その答えを postfix に返す
ID = グレー; client_address==10.1.1.1; アクション=質問(127.0.0.1:10031)
# example2: postgrey に問い合わせるが、'DUNNO' と一致する場合は答えを無視する
# そして、postfwd のルールセットの解析を続けます
ID = グレー; client_address==10.1.1.1; action=ask(127.0.0.1:10031:^dunno$)
メール (サーバー/ヘリ/送信元/送信先/件名/本文)
このコマンドは非推奨です。 代わりに sendmail() アクションを使用してみてください。
指定された引数でメッセージを送信する、非常に基本的なメール コマンドです。 制限:
これは基本的に telnet を実行します。 認証または TLS は使用できません。 さらに、それは
通知状態を追跡せず、対応するルールがヒットしたときにいつでも通知します。
sendmail(sendmail-path::from::to::subject::body)
既存の sendmail バイナリを使用し、指定された引数でメッセージを送信するメール コマンド。
制限: コマンドは通知状態を追跡せず、いつでも通知します。
対応するルール ヒット (これは、RCPT 段階で 100 人の受信者を持つメールに対して 100 通のメールを意味する可能性があります)。
待って ( )
プログラムの実行を一時停止します秒。 これを使用して
接続の遅延またはスロットリング。
ノート ( )
指定された文字列をログに記録し、ルールセットの解析を続行します。
文字列が空の場合、何も記録されません (noop)。
やめる ( )
指定された終了コードでプログラムを終了します。 接尾辞はありません
あまりにも好きなので、注意して使用してください。
次のようなリクエスト属性を参照できます
id=R-HELO; helo_name=^[^\.]+$ ; action=REJECT 無効な helo '$$helo_name'
マクロ/ACL
長い項目の複数の使用またはそれらの組み合わせは、マクロによって省略される場合があります。 それらの
'&&' (XNUMX つの '&' 文字) を先頭に付ける必要があります。 まず、マクロを次のように定義する必要があります
以下:
&&RBLS { rbl=zen.spamhaus.org,list.dsbl.org,bl.spamcop.net,dnsbl.sorbs.net,ix.dnsbl.manitu.net; };
次に、これらは次のようにルールで使用できます。
&&RBLS; client_name=^unknown$ ; アクション=拒否
&&RBLS; client_name=(\d+[\.-_]){4} ; アクション=拒否
&&RBLS; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_] ; アクション=拒否
マクロにはアクションも含めることができます。
# 意味
&&GONOW { action=REJECT あなたのリクエストにより、スパム検出ポリシーによりこのメッセージは拒否されました。 詳細はこちら http://www.domain.local; };
# ルール
&&今行く ; &&RBLS; client_name=^unknown$
&&今行く ; &&RBLS; client_name=(\d+[\.-_]){4}
&&今行く ; &&RBLS; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_]
マクロにはマクロも含めることができます。
# 意味
&&RBLS{
rbl=zen.spamhaus.org
rbl=list.dsbl.org
rbl=bl.spamcop.net
rbl=dnsbl.sorbs.net
rbl=ix.dnsbl.manitu.net
};
&&動的{
client_name=^unknown$
クライアント名=(\d+[\.-_]){4}
client_name=[\.-_](adsl|dynamic|ppp|)[\.-_]
};
&&GOAWAY { &&RBLS; &&動的; };
# ルール
&&どこかに行って ; action=REJECT 動的クライアントであり、RBL にリストされている
基本的に、マクロは単純なテキスト置換です。詳細については、「PARSER」セクションを参照してください。
情報を表示します。
PLUGINS
詳細説明
プラグイン インターフェイスにより、独自のチェックを定義し、postfwd の機能を強化できます
機能。 便利なものを自由に共有してください!
警告
プラグイン インターフェイスはまだ開発段階にあることに注意してください。 プラグインをテストしてください
エラーが原因で postfwd が壊れる可能性があるため、注意してください。 オーバーライドも許可されています
属性または組み込み関数を使用できますが、自分が何をしているのかを理解していることを確認してください。
それらは内部で使用されます。
賢明なリソースにアクセスし、決して実行しない場合は、セキュリティを念頭に置いてください。
特権ユーザーとして postfwd! また、あなたの入力を決して信頼しないでください (特にホスト名と電子メール)
アドレス)。
ITEMS
アイテム プラグインは、事前に追加の属性をリクエストに統合する perl サブルーチンです。
それらは、ポリシー委任の他の項目と同様に、postfwd のルールセットに対して評価されます
プロトコル。 これにより、独自のチェックを作成できます。
plugin-items は選択的に使用できません。 これらの関数はすべてのリクエストに対して実行されます
postfwd は受信するので、パフォーマンスに注意してください。
概要: %result = postfwd_items_plugin{ }(%リクエスト)
あなたのサブルーチンが呼び出されたことを意味します、%request と呼ばれるハッシュにアクセスできます。
$request{client_name} などのすべてのリクエスト属性が含まれており、
次のフォーム:
保存: $result{ } =
これにより、新しいアイテムが作成されます含むに統合されます。
ポリシー委譲要求であり、したがって、postfwd のルールセットで使用される可能性があります。
# 次の行は削除しないでください
%postfwd_items_plugin = (
# 例 - postfwd に統合。 ここでそれらを有効にする必要はありません。
# ルールセットで postfwd のバージョンを確認できるようにする
「バージョン」=>サブ{
私の(%request) = @_;
私の(%結果) = (
"version" => $NAME." ".$VERSION,
);
%結果を返します。
},
# 送信者ドメインと受信者ドメイン
"address_parts" => サブ {
私の(%request) = @_;
私の(%結果) = ();
$request{送信者} =~ /@([^@]*)$/;
$result{sender_domain} = ($1 || '');
$request{受信者} =~ /@([^@]*)$/;
$result{recipient_domain} = ($1 || '');
%結果を返します。
},
# 次の行は削除しないでください
);
比較
比較プラグインを使用すると、新しいアイテムをルールセットと比較する方法を定義できます。
これらはオプションです。 指定しない場合、デフォルト (== 完全一致、=~
PCRE、...) が使用されます。
あらすじ: => sub { return &{$postfwd_compare{ }}(@_); }、
# 次の行は削除しないでください
%postfwd_compare_plugin = (
例 - postfwd に統合されています。 ここでそれらを有効にする必要はありません。
# 簡単な例
# あらすじ: = (リターン &{$postfwd_compare{ }}(@_))
"client_address" => sub { return &{$postfwd_compare{cidr}}(@_); }、
"size" => sub { return &{$postfwd_compare{numeric}}(@_); }、
"recipient_count" => sub { return &{$postfwd_compare{numeric}}(@_); }、
# 複雑な例
# あらすじ: = ( 、 、 、 )
"数値" => サブ {
my($cmp,$val,$myitem,%request) = @_;
my($myresult) = undef; $myitem ||= "0"; $val ||= "0";
if ($cmp eq '==') {
$myresult = ($myitem == $val);
} elsif ($cmp eq '=<') {
$myresult = ($myitem <= $val);
} elsif ($cmp eq '=>') {
$myresult = ($myitem >= $val);
} elsif ($cmp eq '<') {
$myresult = ($myitem < $val);
} elsif ($cmp eq '>') {
$myresult = ($myitem > $val);
} elsif ($cmp eq '!=') {
$myresult = not($myitem == $val);
} elsif ($cmp eq '!<') {
$myresult = not($myitem <= $val);
} elsif ($cmp eq '!>') {
$myresult = not($myitem >= $val);
場合} else {
$myresult = ($myitem >= $val);
};
$myresult を返します。
},
# 次の行は削除しないでください
);
ACTIONS
アクション プラグインを使用すると、新しい postfwd アクションを定義できます。 $stop-flag を設定することで、次のことができます
ルールセットの解析を続行するか停止するかを決定します。
あらすじ: ( 、 、 、 、 ) =
( 、 、 、 、 、 )
# 次の行は削除しないでください
%postfwd_actions_plugin = (
# 例 - postfwd に統合。 ここでそれらを有効にする必要はありません。
# ノート( ) 指図
「メモ」=>サブ{
my($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = 'わからない'; 私 ($ 停止) = 0;
log_info "[RULES] ".$myline." - 注: ".$myarg if $myarg;
return ($stop,$index,$myaction,$myline,%request);
},
# 次はスキップルール
「スキップ」 => サブ {
my($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = 'わからない'; 私 ($ 停止) = 0;
$index += $myarg if ( $myarg and not(($index + $myarg) > $#Rules) );
return ($stop,$index,$myaction,$myline,%request);
},
# 現在のリクエスト内容を syslog にダンプ
"ダンプ要求" => サブ {
my($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = 'わからない'; 私 ($ 停止) = 0;
map { log_info "[DUMP] rule=$index, Attribute: $_=$request{$_}" } (keys %request);
return ($stop,$index,$myaction,$myline,%request);
},
# 次の行は削除しないでください
);
COMMAND LINE
ルールセット
次の引数は、postfwd ルールセットのソースを指定するために使用されます。 これの意味は
postfwd が機能するには、少なくとも次のいずれかが必要です。
-f, --file
からルールを読み取ります. 構成セクションを参照してください。
詳細については、以下をご覧ください。
-r, --rule
追加ルールセットに。 引用する必要があるかもしれないことを覚えておいてください
空白またはシェル文字を含む文字列。
得点
-s, --scores =
戻り値リクエストのスコアが
複数の使用が許可されています。 次のように、引数をチェーンするだけです。
postfwd -r " = ;アクション= " -f -f ...
or
postfwd --scores 4.5="高スコアを警告" --scores 5.0="REJECT postfwd スコアが高すぎる" ...
スコアが複数の場合は、最も高い一致がカウントされます。 引数の順序は
postfwd ルールセットに反映されます。
管理
-d、-daemon
postfwd はデーモンとして実行され、ネットワーク上で着信をリッスンします
クエリ (デフォルト 127.0.0.1:10040)。
-k、-kill
実行中の postfwd デーモンを停止します。
-リロード
構成をリロードします。
--ダンプ統計
プログラムの使用統計を表示します。
--ダンプキャッシュ
キャッシュの内容を表示します。
--delcache
リクエスト キャッシュからアイテムを削除します。 --dumpcache を使用してオブジェクトを識別します。
例えば:
# postfwd --dumpcache
...
%rate_cache -> %sender=[メール保護] -> %RATE002+2_600 -> @カウント -> '1'
%rate_cache -> %sender=[メール保護] -> %RATE002+2_600 -> @maxcount -> '2'
...
# postfwd --delrate="sender=[メール保護]"
レート キャッシュ アイテム 'sender=[メール保護]' 削除
--デルレイト
レート キャッシュからアイテムを削除します。 --dumpcache を使用してオブジェクトを識別します。
ネットワーキング
postfwd はデーモンとして実行できるため、ネットワーク上で着信要求をリッスンできます。 の
次の引数は、この場合の動作を制御します。
-i, --インターフェース
postfwd を指定されたインターフェース (デフォルトは 127.0.0.1) にバインドします。
-p、--ポート
postfwd は、指定されたポート (デフォルトの tcp/10040) で listen します。
--プロト
postfwd のソケットのプロトコル タイプ。 現在、ここでは「tcp」または「unix」を使用できます。
unix ドメイン ソケットで postfwd を使用するには、次のように実行します。
postfwd --proto=unix --port=/somewhere/postfwd.socket
-u, --user
実際の有効なユーザーを次のように変更します.
-g, --group
実質的かつ効果的なグループを次のように変更します.
--umask
ファイル許可 (UNIX ドメインソケット、pidfiles) の umask を変更します。
注意: これは chmod ではなく umask です。
適用しないでください。 例: umask 077 は chmod 700 に相当します。
-R, --chroot
プロセスを指定されたパスに chroot します。
使用する前にこれをテストしてください。いくつかのライブラリが必要になる場合があります。
--pidfile
プロセス ID は、指定されたファイルに保存されます。
- 施設
syslog ファシリティを設定します。デフォルトは「mail」です
--socktype
Sys::Syslog socktype を「native」、「inet」、または「unix」に設定します。
デフォルトでは、モジュールのバージョンと OS に応じて、これを自動検出します。
-l, --logname
syslog メッセージにラベルを付けます。 複数実行するときに便利
postfwd のインスタンス。
--loglen
syslog メッセージを切り捨てます。 文字。
プラグイン
--プラグイン
ファイルから postfwd プラグインをロードします。 参照してください http://postfwd.org/postfwd.plugins
または、詳細については、tarball から入手できる plugins.postfwd.sample を参照してください。
オプション 引数
これらのパラメータは、postfwd の動作に影響を与えます。 それらのいずれかを組み合わせることができます。
-v、-verbose
詳細ログには多くの有用な情報が表示されますが、
ログファイルが著しく大きくなります。 したがって、注意して使用してください。 オプションを設定する
XNUMX 回 (-vv) を使用して詳細情報を取得します (すべての要求属性をログに記録します)。
-c, --cache (デフォルト=600)
リクエスト キャッシュのタイムアウト。同一のリクエストの結果は
構成がリロードされるか、この時間 (秒単位) が期限切れになるまでキャッシュされます。
0 を設定すると、この機能が無効になります。
--キャッシュのサイズなし
キャッシュ比較のサイズ属性を無視するため、より良い結果が得られます
キャッシュヒット率。 サイズを使用しない場合は、このオプションを設定する必要があります
ルールセットのアイテム。
--キャッシュ-送信者なし
キャッシュ比較で送信者アドレスを無視するため、より良い結果が得られます
キャッシュヒット率。 送信者を使用しない場合は、このオプションを設定する必要があります
ルールセットのアイテム。
--cache-rdomain-only
これにより、受信者のアドレスのローカル部分が取り除かれます。
キャッシュ。 これにより、キャッシュ ヒット率が大幅に増加する可能性があります。
--cache-rbl-timeout (デフォルト = 3600)
このデフォルト値は、rbl キャッシュ アイテムのタイムアウト (秒単位) として使用されます。
ルールセットで指定されていない場合。
--cache-rbl-default (デフォルト=^127\.0\.0\.\d+$)
マッチルールセットで指定されていない場合、rbl/rhsbl の回答 (正規表現) に。
--キャッシュID 、 、...
この csv で区切られたリクエスト属性のリストは、構築に使用されます
リクエストキャッシュ識別子。 これは、正確に知っている場合にのみ使用してください。
やっている。 たとえば、RBL/RHSBL 制御にのみ postfwd を使用する場合、
あなたはこれを設定することができます
postfwd --cache=3600 --cacheid=クライアント名,クライアントアドレス
これにより、キャッシュの効率が向上し、postfwd のパフォーマンスが向上します。
警告: ルールセットで使用されているすべての項目をここにリストする必要があります!
-- クリーンアップ要求(デフォルト=600)
この後、要求キャッシュはタイムアウトしたアイテムを検索しますの
秒。 最小値です。 クリーンアップ プロセスは、次の場合にのみ実行されます。
新しい依頼が来る。
--cleanup-rbls (デフォルト=600)
この後、rbl キャッシュでタイムアウトしたアイテムが検索されます。 の
秒。 最小値です。 クリーンアップ プロセスは、次の場合にのみ実行されます。
新しい依頼が来る。
--クリーンアップ率(デフォルト=600)
この後、レート キャッシュでタイムアウトしたアイテムが検索されます。 の
秒。 最小値です。 クリーンアップ プロセスは、次の場合にのみ実行されます。
新しい依頼が来る。
-S, --概要(デフォルト=600)
いくつかの使用統計を表示します (プログラム稼働時間、リクエスト カウンター、マッチング ルール)
毎日秒。 このオプションは -v スイッチに含まれています。
この機能はアラーム信号を使用するため、postfwd に統計を強制的にダンプさせることができます。
`kill -ALRM の使用` (ここでpostfwd のプロセス ID です)。
例:
19 月 12 日 39:45:1 mail666 postfwd[213000]: [STATS] カウンター: 39 秒の稼働時間、XNUMX のルール
19 月 12 日 39:45:1 mail666 postfwd[71643]: [STATS] 要求: 全体で 49、最後の間隔で 62.88、XNUMX% のキャッシュ ヒット
19 月 12 日 39:45:1 mail666 postfwd[20.18]: [STATS] 平均: 全体で 4.90、最後のインターバルで 557.30、トップで XNUMX
19 月 12 日 39:45:1 mail666 postfwd[44]: [STATS] 内容: 239 のキャッシュされた要求、XNUMX のキャッシュされた dnsbl の結果
19 月 12 日 39:45:1 mail666 postfwd[001]: [STATS] ルール ID: R-2704 が一致しました: XNUMX 回
19 月 12 日 39:45:1 mail666 postfwd[002]: [STATS] ルール ID: R-9351 が一致しました: XNUMX 回
19 月 12 日 39:45:1 mail666 postfwd[003]: [STATS] ルール ID: R-3116 が一致しました: XNUMX 回
...
--no-rulestats
ルールごとの統計を無効にします。 それらを使用しない場合、ログをクリーンに保ちます。
このオプションは、 --summary または --verbose が設定されていないと効果がありません。
-L、--stdoutlog
デバッグのために、すべての syslog メッセージを stdout にリダイレクトします。 これをpostfixで使用しないでください!
-t、-test
テストモードでは、postfwd は常に "dunno" を返しますが、それに応じてログに記録します
そのルールセットに。 -v は、このオプションで自動的に設定されます。
-n、--nodns
RBL チェックなどの DNS ベースのチェックをすべて無効にします。 含むルール
そのような要素は無視されます。
-n、--nodnslog
DNS イベントのロギングを無効にします。
--dns_timeout (デフォルト: 14)
非同期 DNS クエリのタイムアウトを秒単位で設定します。 この値が適用されます
ルール内のすべての dns 項目。
--dns_timeout_max (デフォルト: 10)
dnsbl ルックアップの最大タイムアウト カウンターを設定します。 タイムアウトがこの値を超えた場合
対応する dnsbl がしばらく無効になります (--dns_timeout_interval を参照)。
--dns_timeout_interval (デフォルト = 1200)
dnsbl タイムアウト カウンターは、この間隔 (秒単位) の後に消去されます。 これを使って
--dns_timeout_max パラメーターと組み合わせて使用します。
--dns_async_txt
dnsbl A と TXT ルックアップを同時に実行します (それ以外の場合は at を含むリストのみ)
少なくとも XNUMX つの A レコード)。 クエリが増えるため、これにはより多くのネットワーク帯域幅が必要ですが、
検索を並列化できるため、スループットが向上する可能性があります。
--dns_max_ns_lookups (デフォルト = 0)
sender_ns_addrs アイテムでルックアップする最大 ns 個の名前。 最大なしの場合は 0 を使用します。
--dns_max_mx_lookups (デフォルト = 0)
sender_mx_addrs アイテムで検索する最大 mx 名。 最大なしの場合は 0 を使用します。
-I、--instantcfg
-f で指定された設定ファイルは、リクエストごとに再読み込みされます
postfwd を受け取ります。 これにより、オンザフライの構成変更が可能になります
再起動せずに。 ファイルは必要な場合にのみ読み取られますが
(これは、最後の読み取り以降にアクセス時間が変更されたことを意味します)
システム負荷が大幅に増加します。
--config_timeout (デフォルト = 3)
単一の構成行を解析するための秒単位のタイムアウト。 超過した場合、ルールは
スキップされます。 これは、大きなファイルやループによる問題を防ぐために使用されます。
--keep_rates (デフォルト = 0)
このオプションを設定すると、postfwd はリロード時にレート制限カウンターをクリアしません。 お願いします
変更した場合は、このオプションで postfwd を再起動する (リロードしない) 必要があることに注意してください。
レート制限ルール。
--save_rates (デフォルト = なし)
このオプションを指定すると、postfwd は既存のレート制限カウンターをディスクに保存し、それらをリロードします
プログラム開始時。 これにより、プログラムの再起動または再起動全体で永続的なレート制限が可能になります。
postfwd には、指定されたファイルへの読み取りおよび書き込みアクセスが必要であることに注意してください。
--fast_limit_evaluation (デフォルト = 0)
ルールセットによってレート制限が設定されると、以降のリクエストはそれに対して評価されます
ルールセットを参照する前に。 このモードは、v1.30 までのデフォルトの動作でした。
このモードではレート制限が速くなりますが、最終的には設定もされます
ルールセット内の whitelisting-rules が期待どおりに機能しない可能性があります。
制限: このオプションでは、次のようなネストされた postfwd コマンドは許可されません。
アクション=レート(送信者/3/60/wait (3))
このオプションは、strict-rfc5321 rate() 関数では機能しません。
情報 引数
これらの引数は、コマンド ラインでのみ使用します。 それらを後置スポーンで決して使用しないでください!
-C、--showconfig
現在のルールセットを表示します。 詳細出力には -v を使用します。
-P、--perfmon
このオプションは、syslog と出力をオフにします。 含まれています
パフォーマンステスト用。
-V、-version
プログラムのバージョンを表示します。
-h、-help
プログラムの使用状況を示します。
-m、--マニュアル
プログラムのマニュアルを表示します。
REFRESH
デーモン モードでは、postfwd は HUP シグナルを受信した後にルールセットをリロードします。 をご覧ください
リクエストごとに構成を更新する「-I」スイッチの説明
postfwd を受け取ります。
例
## ホワイトリスト登録
# 1. ネットワーク 192.168.1.0/24、192.168.2.4
# 2. client_names *.gmx.net および *.gmx.de
# 3. 送信者 *@someshop.tld from 11.22.33.44
ID=WL001; アクション=ダンノ; client_address=192.168.1.0/24, 192.168.2.4
ID=WL002; アクション=ダンノ; client_name=\.gmx\.(net|de)$
ID=WL003; アクション=ダンノ; 送信者=@someshop\.tld$; client_address=11.22.33.44
## TLS 制御
# 1. *@authority.tld は正しい TLS フィンガープリントのみ
# 2. *@secret.tld キーサイズが 64 以上の場合のみ
ID=TL001; アクション=ダンノ; 送信者=@機関\.tld$ ; ccert_fingerprint=AA:BB:CC..
ID=TL002; action=REJECT 間違った TLS フィンガープリント ; 送信者=@機関\.tld$
ID=TL003; action=REJECT tls キーの長さ < 64 ; 送信者=@secret\.tld$ ; 暗号化キーサイズ=64
## RBL チェックの組み合わせ
# 以下の場合、これはメールを拒否します
# 1. ix.dnsbl.manitu.net に掲載
# 2. zen.spamhaus.org にリストされています (sbl および xbl、dns キャッシュのタイムアウトは 1200 秒ではなく 3600 秒)
# 3. bl.spamcop.net、list.dsbl.org、dnsbl.sorbs.net の 2 分目に記載
# 4. bl.spamcop.net および rhsbl.ahbl.org、rhsbl.sorbs.net の XNUMX つにリストされています
ID=RBL01; action=REJECT が ix.dnsbl.manitu.net に記載されています。 rbl=ix.dnsbl.manitu.net
ID=RBL02; action=REJECT は zen.spamhaus.org に記載されています。 rbl=zen.spamhaus.org/127.0.0.[2-8]/1200
ID=RBL03; action=REJECT がリストされている RBL が多すぎます。 rblcount=2 ; rbl=bl.spamcop.net、list.dsbl.org、dnsbl.sorbs.net
ID=RBL04; action=REJECT 結合 RBL+RHSBL チェック ; rbl=bl.spamcop.net ; rhsbl=rhsbl.ahbl.org, rhsbl.sorbs.net
## メッセージ サイズ (message_size_limit を 30000000 に設定する必要があります)
# 1. *.customer30.tld のシステム用に 1MB
# 2. SASL ユーザー joejob 用に 20MB
# 3. 10MB デフォルト
ID=SZ001; protocol_state==END-OF-MESSAGE; アクション=ダンノ; サイズ<=30000000; client_name=\.customer1.tld$
ID=SZ002; protocol_state==END-OF-MESSAGE; アクション=ダンノ; サイズ<=20000000; sasl_username==joejob
ID=SZ002; protocol_state==END-OF-MESSAGE; アクション=ダンノ; サイズ<=10000000
ID=SZ100; protocol_state==END-OF-MESSAGE; action=REJECT メッセージが大きすぎます
## 選択的グレーリスト
##
## postfwd にはグレーリストが含まれていないことに注意してください。 このセットアップには、実行中の postgrey サービスが必要です
## ポート 10031 で、main.cf の次の接尾辞制限クラス:
##
## smtpd_restriction_classes = check_postgrey, ...
## check_postgrey = check_policy_service inet:127.0.0.1:10031
#
# 1. zen.spamhaus.org にリストされ、結果が 127.0.0.10 または .11 の場合、DNS キャッシュのタイムアウトは 1200 秒
# 2. クライアントには rDNS がありません
# 3. 複数のダイヤルイン ドメインからのクライアント
ID=GR001; アクション=check_postgrey; rbl=dul.dnsbl.sorbs.net, zen.spamhaus.org/127.0.0.1[01]/1200
ID=GR002; アクション=check_postgrey; client_name=^unknown$
ID=GR003; アクション=check_postgrey; client_name=\.(t-ipconnect|alicedsl|ish)\.de$
## 日付時刻
日付 = 24.12.2007-26.12.2007 ; action=450 4.7.1 クリスマス期間中はオフィスを閉鎖
時間=04:00:00-05:00:00; action=450 4.7.1 メンテナンス中です。後でもう一度お試しください
time=-07:00:00 ; sasl_username=ジム; action=450 4.7.1 に早く、ジム
時間=22:00:00-; sasl_username=ジム; action=450 4.7.1 が遅くなりました、ジム
月=-450月; action=4.7.1 XNUMX XNUMX月にお会いしましょう
日=!!月~金; アクション=check_postgrey
## ジャンプの使い方
# 以下では、異なるメッセージ サイズで 30MB のメッセージを許可します。
# ユーザー/クライアント、その他は 10MB しかありません。
ID=R001; アクション=ジャンプ(R100) ; sasl_username=^(アリス|ボブ|ジェーン)$
ID=R002; アクション=ジャンプ(R100) ; client_address=192.168.1.0/24
ID=R003; アクション=ジャンプ(R100) ; ccert_fingerprint=AA:BB:CC:DD:...
ID=R004; アクション=ジャンプ(R100) ; ccert_fingerprint=AF:BE:CD:DC:...
ID=R005; アクション=ジャンプ(R100) ; ccert_fingerprint=DD:CC:BB:DD:...
ID=R099; protocol_state==END-OF-MESSAGE; action=REJECT メッセージが大きすぎます (最大 10MB); サイズ=10000000
ID=R100; protocol_state==END-OF-MESSAGE; action=REJECT メッセージが大きすぎます (最大 30MB); サイズ=30000000
## スコアの使い方
# 以下は、クライアントが
# - 1 つの RBL と 1 つの RHSBL に記載されています
# - 1 つの RBL または 1 つの RHSBL にリストされており、正しい rDNS がありません
# - 正しい rDNS を持たない他のクライアントはグレーリストでチェックされます
# - スコアを下げるためにいくつかのホワイトリストが使用されています
ID=S01; スコア=2.6; アクション=check_postgrey
ID=S02; スコア=5.0; action=REJECT postfwd スコアが高すぎる
ID=R00; アクション=スコア(-1.0) ; rbl=exemptions.ahbl.org,list.dnswl.org,query.bondedsender.org,spf.trusted-forwarder.org
ID=R01; アクション=スコア(2.5); rbl=bl.spamcop.net、list.dsbl.org、dnsbl.sorbs.net
ID=R02; アクション=スコア(2.5); rhsbl=rhsbl.ahbl.org, rhsbl.sorbs.net
ID=N01; アクション=スコア(-0.2) ; client_name==$$helo_name
ID=N02; アクション=スコア(2.7); client_name=^unknown$
...
## rate と size の使い方
# 以下は、「不明な」クライアントからのリクエストを一時的に拒否します。
# 1. 30 時間あたりのリクエスト数が XNUMX を超えた、または
# 2. 1.5 分以内に 10 MB 以上を送信しようとした
ID=レート01; client_name==不明; protocol_state==RCPT
action=rate(client_address/30/3600/450 4.7.1 申し訳ありませんが、30 時間あたり最大 XNUMX リクエスト)
ID=SIZE01; client_name==不明; protocol_state==END-OF-MESSAGE
action=size(client_address/1572864/600/450 4.7.1 申し訳ありません、1.5 分あたり最大 10MB)
## マクロ
# 意味
&&RBLS { rbl=zen.spamhaus.org,list.dsbl.org,bl.spamcop.net,dnsbl.sorbs.net,ix.dnsbl.manitu.net; };
&&GONOW { action=REJECT あなたのリクエストにより、スパム検出ポリシーによりこのメッセージは拒否されました。 詳細はこちら http://www.domain.local; };
# ルール
&&今行く ; &&RBLS; client_name=^unknown$
&&今行く ; &&RBLS; client_name=(\d+[\.-_]){4}
&&今行く ; &&RBLS; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_]
## グループ
# 意味
&&RBLS{
rbl=zen.spamhaus.org
rbl=list.dsbl.org
rbl=bl.spamcop.net
rbl=dnsbl.sorbs.net
rbl=ix.dnsbl.manitu.net
};
&&RHSBLS{
...
};
&&動的{
client_name==不明
クライアント名~=(\d+[\.-_]){4}
client_name~=[\.-_](adsl|dynamic|ppp|)[\.-_]
...
};
&&BAD_HELO{
helo_name==my.name.tld
helo_name~=^([^\.]+)$
helo_name~=\.(ローカル|LAN)$
...
};
&&メンテナンス{
日付= 15.01.2007
日付= 15.04.2007
日付= 15.07.2007
日付= 15.10.2007
time=03:00:00 - 04:00:00
};
# ルール
ID = 結合; &&RBLS; &&ダイナミック; action=REJECT 動的クライアントであり、RBL にリストされている
id=メンテナンス; &&メンテナンス ; action=DEFER メンテナンス時間 - 後でもう一度お試しください
# set() コマンドを使用すると、長い項目に注意してください
# リストを XNUMX 回比較する必要はありません
ID=RBL01; &&RBLS; アクション=セット(HIT_rbls=1)
ID=HELO01; &&BAD_HELO ; アクション=セット(HIT_helo=1)
ID=DYNA01; &&ダイナミック; アクション=セット(HIT_dyna=1)
ID=拒否01; HIT_rbls==1; HIT_helo==1 ; action=REJECT ご覧ください http://some.org/info?reject=01 詳細については
ID=拒否02; HIT_rbls==1; ヒットダイナ==1; action=REJECT ご覧ください http://some.org/info?reject=02 詳細については
ID=拒否03; HIT_helo==1 ; ヒットダイナ==1; action=REJECT ご覧ください http://some.org/info?reject=03 詳細については
## 強化された rbl 機能と組み合わせる
#
ID=RBL01; rhsblcount=すべて; rblcount=すべて; &&RBLS; &&RHSBLS
アクション=セット(HIT_dnsbls=$$rhsblcount,HIT_dnsbls+=$$rblcount,HIT_dnstxt=$$dnsbltext)
ID=RBL02; HIT_dnsbls>=2 ; action=554 5.7.1 $$HIT_dnsbls DNSBL を使用してブロックされました [INFO: $$HIT_dnstxt]
パーサー
postfwd ルールセットは、コマンドライン (-r オプション) で指定するか、ファイルから読み取ることができます
(-f)。 引数の順序は保持されます。 -C | でパーサーをチェックする必要があります。
--showconfig 新しい構成を適用する前に、コマンド ラインで切り替えます。 次の呼び出し:
postfwd --showconfig \
-r "id=TEST; recipient_count=100; action=WARN mail with 100+ recipients" \
-f /etc/postfwd.cf \
-r "id=DEFAULT; action=dunno";
次の出力が生成されます。
ルール 0: id->"TEST" action->"WARN mail with 100+ recipients"; 受信者数->「100」
...
... ...
...
ルール: id->"DEFAULT" action->"dunno"
同じタイプの複数のアイテムがリストに追加されます (詳細については、「アイテム」セクションを参照してください)
情報):
postfwd --showconfig \
-r "client_address=192.168.1.0/24; client_address=172.16.26.32; action=dunno"
結果は次のようになります:
ルール 0: id->"R-0"; アクション->「わからない」; client_address->"192.168.1.0/24, 172.16.26.32"
マクロは構成段階で評価されます。つまり、
postfwd --showconfig \
-r "&&RBLS { rbl=bl.spamcop.net; client_name=^unknown$; };" \
-r "id=RBL001; &&RBLS; action=REJECT が spamcop および不正な rdns に記載されています";
結果は次のようになります:
ルール 0: id->"RBL001"; action->"REJECT は spamcop と悪い rdns に記載されています"; rbl->"bl.spamcop.net"; client_name->"^unknown$"
リクエスト 処理
ポリシー委任リクエストが到着すると、postfwd のルールセットと比較されます。 に
処理を詳細に調べるには、「-v」または「-vv」を使用して冗長性を高める必要があります
スイッチ。 「-L」は、ログ メッセージを stdout にリダイレクトします。
一般にルールセットの順序を維持すると、アイテムはランダムな順序で比較されます。
基本的には
ID=R001; アクション=わからない; client_address=192.168.1.1; 送信者=[メール保護]
等しい
ID=R001; 送信者=[メール保護]; client_address=192.168.1.1; アクション=わからない
リストは指定された順序で評価されます。 これにより、より速く配置できます
最初の式:
postfwd -vv -L -r "id=RBL001; rbl=localrbl.local zen.spamhaus.org; action=REJECT" /some/where/request.sample
以下を生成します
[ログ情報]: rbl を比較: "remotehost.remote.net[68.10.1.7]" -> "localrbl.local"
[ログ情報]: count1 rbl: "2" -> "0"
[ログ情報]: クエリ rbl: localrbl.local 7.1.10.68 (7.1.10.68.localrbl.local)
[ログ情報]: count2 rbl: "2" -> "0"
[ログ情報]: rbl に一致: FALSE
[ログ情報]: rbl を比較: "remotehost.remote.net[68.10.1.7]" -> "zen.spamhaus.org"
[ログ情報]: count1 rbl: "2" -> "0"
[ログ情報]: クエリ rbl: zen.spamhaus.org 7.1.10.68 (7.1.10.68.zen.spamhaus.org)
[ログ情報]: count2 rbl: "2" -> "0"
[ログ情報]: rbl に一致: FALSE
[ログ情報]: アクション: わからない
否定演算子 !!( ) は優先度が最も高いため、評価されます。
初め。 次に、変数置換が実行されます。
postfwd -vv -L -r "id=TEST; action=REJECT; client_name=!!($$heloname)" /some/where/request.sample
あげる
[ログ情報]: client_name を比較: "unknown" -> "!!($$helo_name)"
[ログ情報]: client_name を否定: "unknown" -> "$$helo_name"
[ログ情報]: client_name の代替: "unknown" -> "english-breakfast.cloud8.net"
[ログ情報]: client_name に一致: TRUE
[ログ情報]: アクション: REJECT
ルールセット 評価
すべてのアイテム (または各アイテムのリストの少なくとも XNUMX つの要素) が一致すると、ルールがヒットします。
XNUMX つの項目 (またはリストのすべての要素) が要求との比較に失敗するとすぐに
パーサーは postfwd ルールセットの次のルールにジャンプします。
ルールが一致する場合、次の XNUMX つのオプションがあります。
* ルールは後置アクション (dunno、reject、...) を返します。パーサーはルールの処理を停止し、
アクションを postfix に返します。 他のルールは評価されません。
* ルールは postfwd アクションを返します (ジャンプ(), ノート()、...) パーサーは指定されたアクションを評価します
次のルールに進みます (ただし、 ジャンプ() or 終了する() アクション - をご覧ください
詳細については、「アクション」セクションを参照してください)。 postfix には何も送信されません。
一致するルールがなく、ルールセットの最後に到達した場合、postfwd は dunno を返します。
詳細モードでない限り、何もログに記録しません。 最後の `catch-allAX を配置するだけです。
その動作を変更するルール:
... ...
ID=デフォルト; アクション=わからない
前のルールにヒットせずにルールセットを通過するリクエストをログに記録します。
統合
統合 、 デーモン モード
postfwd を使用する一般的な方法は、デーモンとして起動し、指定された tcp ポートでリッスンすることです。
postfwd は単一のインスタンス (多重化モード) で実行されるため、最大限のメリットが得られます。
その場合は内部キャッシングです。 次のパラメーターを使用して postfwd を開始します。
postfwd -d -f /etc/postfwd.cf -i 127.0.0.1 -p 10040 -u 誰も -g 誰も -S
効率的なキャッシングのために、オプション --cache-rdomain-only を使用できるかどうかを確認する必要があります。
--cache-no-sender および --cache-no-size。
次に、syslog (デフォルトのファシリティ「メール」) で次のような行を確認します。
9 月 23 日 00:24:5158 メール postfwd[XNUMX]: postfwd n.nn 入力可能
「netstat -an|grep 10040」を使用して、次のようなものを確認します
tcp 0 0 127.0.0.1:10040 0.0.0.0:* 聞く
すべてが機能する場合は、postfix main.cf を開き、次を挿入します。
127.0.0.1:10040_time_limit = 3600 <--- 統合
smtpd_recipient_restrictions = permit_mynetworks <--- 推奨
reject_unauth_destination <--- 推奨
check_policy_service inet:127.0.0.1:10040 <--- 統合
`postfix reload` で構成をリロードし、ログを監視します。 その中であなたは働きます
メール ログに次のような行が表示されるはずです。
9 月 23 日 01:24:5158 メール postfwd[22]: rule=9、id=ML_POSTFIX、client=english-breakfast.cloud168.100.1.7.net[XNUMX]、sender=[メール保護]、受信者=[メール保護]、helo=english-breakfast.cloud9.net、proto=ESMTP、state=RCPT、action=dunno
サイズまたは rcpt_count アイテムを確認したい場合は、postfwd を統合する必要があります
smtp_data_restrictions または smtpd_end_of_data_restrictions。 もちろん、指定することもできます
制限クラスを作成し、アクセス テーブルで使用します。 最初にファイルを作成します
/etc/postfix/policy 以下を含む:
Domain1.local postfwdcheck
Domain2.local postfwdcheck
...
次に、そのファイルをポストマップし (`postmap hash:/etc/postfix/policy`)、main.cf を開いて次のように入力します。
# 制限クラス
smtpd_restriction_classes = postfwdcheck, ... <--- 統合
postfwdcheck = check_policy_service inet:127.0.0.1:10040 <--- 統合
127.0.0.1:10040_time_limit = 3600 <--- 統合
smtpd_recipient_restrictions = permit_mynetworks, <--- 推奨
reject_unauth_destination, <--- 推奨
... <--- オプション
check_recipient_access hash:/etc/postfix/policy, <--- 統合
... <--- オプション
postfix をリロードして、ログを監視します。
統合 、 しねっと
次のようなtcpラッパーパッケージを介してpostfwdを使用する理由はいくつかあるかもしれません
xinetd (参照http://www.xinetd.org/>)。 ここではそれについて議論しません。 そうする予定がある場合は、
次の行を /etc/services ファイル:
# postfwd ポート
postfwd 10040/tcp
次に、ファイル '/etc/xinetd.d/postfwd' を作成します。
{
インターフェイス = 127.0.0.1
socket_type = stream
protocol = tcp
待機=いいえ
ユーザー = 誰も
サーバー = /usr/local/bin/postfwd
server_args = -f /etc/postfwd.cf
無効=いいえ
}
xinetd デーモンを再起動します (通常は SIGHUP で問題ありません)。 経験すれば
システムのログで "socket already.
使用中で"。
postfix との統合は、 統合 、 デーモン モード 上記のセクション。
postfix をリロードし、ログを見て、すべてが機能するかどうかを確認します。
TESTING
まず、ルールセットを作成する必要があります (構成セクションを参照)。 で確認してください
postfwd -f /etc/postfwd.cf -C
「request.sample」と呼ばれる、postfwd で配布されるポリシー リクエストの例があります。
要件に合わせて変更して使用するだけです
postfwd -f /etc/postfwd.cf
次のような答えが得られるはずです
アクション=
ネットワーク テストには、netcat を使用します。
NC 127.0.0.1 10040
postfwd にリクエストを送信します。 何も受信しない場合は、postfwd が実行されていることを確認してください
指定されたネットワーク設定でリッスンします。
パフォーマンスとは
これらの提案の一部は、ご使用の環境に適合しない場合があります。 要件を確認してください
新しいオプションを慎重にテストしてください!
- キャッシュ オプションを使用する
- 正しい一致演算子 ==、<=、>= を使用してください
- 正規表現で ^ および/または $ を使用する
- アイテム リストを使用する (単一のルールよりも高速)
- 繰り返し項目リストで set() アクションを使用する
- ジャンプとレート制限を使用する
- 空の note() アクションで rbl/rhsbls の事前検索ルールを使用する
関連項目 ALSO
見るhttp://www.postfix.org/SMTPD_POLICY_README.html> Postfix の方法の説明
ポリシー サーバーは動作します。
onworks.net サービスを使用してオンラインで postfwd1 を使用する
