これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MAC OSオンラインエミュレーターなどの複数の無料オンラインワークステーションのいずれかを使用して、OnWorks無料ホスティングプロバイダーで実行できるコマンドアベンジャーです。
プログラム:
NAME
アベンジャー - メールアベンジャー
DESCRIPTION
Mail Avengerは、MTAに依存しない高度な設定が可能なSMTP(Simple Mail Transport)です。
スパムをフィルタリングして対処できるように設計されたプロトコルサーバー 受信メールの受信
クライアントマシンから。 復讐者 各ユーザーに代わって実行されるスクリプトは、
受信メールを受け入れます。
クライアントがシステム上のユーザーにメールを送信しようとすると、アベンジャーSMTPデーモンが
asmtpdは、avengerを実行してファイルを処理します。 .アベンジャー/rcpt ユーザーのホームディレクトリにあります。
ファイルは特別な機能にアクセスできるシェルスクリプトであり、SMTPサーバーがどのように動作するかを決定します。
続行する必要があります。考えられる結果は次のとおりです。
· メールを暫定的に受け入れ、システムのデフォルトルールにフォールバックする
· それ以上のチェックをせずにメールをすぐに受け入れる
· メールをすぐに拒否する
· メールを延期し、クライアントに後で再送信するように指示する
· 処理を別のローカル名にリダイレクトします。名前は別のメールアドレスでもかまいません。
現在のユーザーに属するメールアドレス、または特別な
アベンジャーユーザー 後者の場合、avengerは別のユーザーIDで再実行されます。
したがって、例えば、複数のユーザー間で状態を維持するユーティリティを採用することができる。
(すべてが同じ方法で処理をリダイレクトすると仮定します)。
· 「bodytest」ルールを実行します。この結果により、SMTPトランザクションは続行されます。
メールメッセージの全内容を受信し、その後プログラムが実行される。
メールメッセージの内容。そのプログラムは内容に基づいて、
メッセージを受け入れるか、拒否するか、延期するか、または黙って破棄するかを選択します。
Mail Avengerは通常、 セパレータ 文字、それぞれ
ユーザーは複数のメールアドレスを管理できます。sendmailを使用すると、 セパレータ 通常は「+」です。
qmailでは通常「-」です。区切り文字が「+」の場合、
ユーザー+EXT@あなたのホスト ファイルによって処理されます user's .アベンジャー ディレクトリにあります。
Avengerはまず、 rcpt+ext ユーザーの .アベンジャー ディレクトリ、その後
rcpt+デフォルト。 場合 EXT 区切り文字を含む。例えば
ユーザー+ext1+ext2@あなたのホスト、アベンジャーはまず rcpt+内線1+内線2、次に
rcpt+ext1+デフォルト、次に rcpt+デフォルト同じアルゴリズムを任意の範囲に拡張すると、
区切り文字が多すぎます。(区切り文字が「-」の場合は、単に「+」を「-」に置き換えてください。
上記の説明は、ファイル名などにも適用されます。 rcpt-デフォルト.)
メールが受信者のチェックによって拒否されたが、メッセージの送信者アドレスがローカルの場合
ユーザーメール 1インチ asmtpd.conf (デフォルトではありません)、メールを拒否する前に、
avengerは送信ユーザーに代わって実行されます。この場合、アドレスは
上記のように解析されますが、Avengerは、 mail rcpt.
このメカニズムは、サーバーを介してメールを中継したいローカルユーザーが使用できます。
信頼できない IP アドレス。
使い方 mail 設定ファイルでは、各ユーザーは、例えば メール+... file
たとえそのアドレスが信頼されていない場合でも、信頼するIPアドレスからのメールを受け入れる
すべてのユーザー。(あるいは、macutilなどのツールを使用して、ユーザーは
封筒の送信者が暗号コードを含むメール。 メール+...
スクリプト。)
アベンジャースクリプトのエラー出力 rcpt+ext or メール+内線 というファイルにリダイレクトされます
ログ+拡張子 デバッグに使用するために、同じディレクトリに保存します。
アベンジャー 構文
Avengerの設定ファイルは、単にシェルスクリプトであり、 shとします。
ファイルの各行には、実行する変数の割り当て、コマンド、または関数が含まれています。
スクリプトでは、さらに、Avenger 固有の関数と変数をいくつか利用することもできます。
このセクションでは、アベンジャー関数について説明します。次の 2 つのセクションでは、変数について説明します。
エラーチェック
特定のエラー条件により、Mail Avengerはデフォルトでメールを拒否します。
メッセージは明示的に 許可 または成功した ボディテスト チェック。これら
条件は メールエラー 環境変数は以下で説明します。
スクリプトがメールを拒否するか、デフォルトの動作に戻る場合、
いずれにせよ拒否されることになるメッセージに対してテストを実行する理由はほとんどありません。
エラーチェック デフォルトでは拒否または
メールを延期します。
許可 [メッセージ]
メッセージをすぐに受け入れます(デフォルトのルールにフォールバックせずに)。
メッセージが指定されると、SMTPクライアントに返されます。デフォルトのメッセージは
"わかりました"。
拒否する [メッセージ]
メールを拒否する メッセージ(デフォルトのメッセージは「ポリシーによりコマンドが拒否されました」です。
理由」を参照してください。
延期する [メッセージ]
一時的なエラーコードでメールを拒否し、正当なメールクライアントが
後で再送信を試みます。 メッセージ 「一時的なエラー」
処理"。
ボディテスト command [argは ...]
現在のSMTP「RCPT」コマンドを受け入れます。ただし、メールメッセージ全体が送信されたら、
SMTP「DATA」コマンドで受信した場合、 command メッセージを基準として
入力。終了ステータスに応じて command クライアントの「DATA」コマンドに戻る
成功、一時的、または永続的な失敗。終了コード0はメールを受け入れることを意味し、
100 は拒否を意味し、111 は一時的なエラー コードで拒否する (つまり、メールを延期する) ことを意味します。
の説明を参照してください ボディテスト 詳細については、asmtpd/avengerインターフェースの説明をご覧ください。
情報 ボディテスト (この関数は直接 ボディテスト asmtpd 内)。
エラー出力 command 出力と同じログファイルにリダイレクトされます
rcpt+... アベンジャースクリプトを呼び出す ボディテスト 関数。標準出力 command
終了コードが延期または拒否された場合、診断バウンスメッセージとして含まれる。
メール。
注意してください command そして渡される引数は ボディテスト シェルによって実行されます。
したがって、シェルを含む可能性のある引数を渡さないことが重要です。
「>」や「$」などのメタ文字。
リダイレクト ローカル
処理を終了し、メールが別の宛先に送信されているかのようにアベンジャーを再実行します。
ユーザ名 ローカル (おそらく特別な アベンジャーユーザー ユーザー)。
の説明 リダイレクト 詳細については、asmtpd/avengerインターフェースの説明をご覧ください。
情報 リダイレクト (この関数は直接 リダイレクト asmtpd 内)。
グレーリスト [送信者キー]
このコマンドは、特定の送信者から最初にメールを受信したときにメールを延期します。
特定のIPアドレス。ただし、一定期間が経過すると、 グレーリスト遅延、 もし
クライアントがメールを再送信すると、メールは受け入れられます。さらに、その時点から、すべての
送信者が
一定期間メールの送信を停止する グレーリスト_ttl2 またはそれ以上。ただし、送信後に
最初の延期されたメールの場合、クライアントは一定期間内に再試行しません。
グレーリスト_ttl1すると、クライアントの記録はすべて消去され、次回
メールを送信しようとすると、再度延期されます。
スクリプト内の変数を設定することでパラメータを調整できます。デフォルト値は
には次の値があります:
greylist_delay=30m # メッセージを許可するまでの待機時間
greylist_ttl1=5h # 初回送信者を記憶する期間
greylist_ttl2=36D # OK 送信者を記憶する期間
m 分を意味します。 h 時間、そして D 日。使用可能な接尾辞の完全なリストについては、
のドキュメント dbutil(1)(特に - 期限切れ オプション)。
送信者キーが指定されている場合は、送信者を識別するために使用されます。デフォルト値は
「$CLIENT_IP $RECIPIENT $SENDER」。例えば、最初の1件だけを記録したい場合、
24 ビットの IP アドレスを使用し、受信者を気にしない場合は、次のコマンドを使用できます。
グレーリスト "${CLIENT_IP%.*} $送信者"
セット変数
asmtpdへの外部クエリによって変数を設定するすべての関数は
非同期で実行されます。 セット変数 実際に結果を待って値を設定する
これらの変数を次のように変更します。これにより、潜在的に遅いリクエスト(DNS
複数の検索を同時に開始することができ、そのレイテンシが重複する。しかし、
電話を忘れないように セット変数、または結果を格納する変数
操作は未設定のままになります。
DNS VAR type ドメイン名
DNSルックアップを実行します ドメイン名 タイプのレコードの場合 type、その結果を割り当てる
変数に VAR 電話するとき セット変数. type のいずれかである必要があります a, mx, PTRまたは TXT (より低い-
ケースのみ)。
rbl [-ipf] VAR ドメイン
リアルタイム ブラックホール リスト (RBL) で現在のメール送信者を検索します。 ドメイン は
RBLのドメイン名(例:bl.spamcop.net)。送信者がリストされている場合は、 VAR 〜へ
次回の呼び出し時のDNSルックアップの結果 セット変数. -i 送信者のIPを調べる
アドレス(オプションが指定されていない場合のデフォルト)。 -p 送信者のドメインを調べる
名前(検証済みの DNS PTR レコード)。 -f エンベロープ送信者のドメイン名を検索します
RBL。
SPF0 VAR [SPFメカニズム ...]
SPF VAR [SPFメカニズム ...]
SPF言語で作成された任意のクエリに対して送信者をテストします。これは
特定の送信者をホワイトリストまたはブラックリストに登録する強力な方法です。たとえば、
trusted-forwarder.org が管理するリスト内のマシンからのメールをすべて受け入れたい場合、
「yahoo.com」で終わるマシン名からのメールは受け入れるが、
spamcop RBL、他のユーザーの場合はデフォルトのシステム全体のルールに戻ります。
以下を使用するかもしれない rcpt ファイル:
spf MYSPF +include:spf.trusted-forwarder.org \
+ptr:yahoo.com -exists:%{ir}.bl.spamcop.net ?all
セット変数
ケース「$MYSPF」
合格)
「あなたが好き」を受け入れる
;;
失敗)
「あなたは好きじゃない」と拒否する
;;
エラー)
# 注意: ここでデフォルトにフォールスルーすることもできます
「一時的な DNS エラー」を延期する
;;
ESAC
コマンド SPF0 SPF は同義ですが、 SPF は非推奨です。
Mail Avengerの後のリリース SPF 同義語になる SPF1.
SPF1 VAR [SPFメカニズム ...]
同じテストを実行します SPF ディレクティブは、結果文字列を返します なし,
普通, 合格, 失敗する, ソフトフェイル, 温度エラー, パーマエラー なし, ニュートラル,
パス, 失敗する, ソフトフェイル, エラー, 未知の.
アベンジャー 変数
これらの変数はavengerスクリプトによって設定されます。さらに、asmtpdはいくつかの変数を設定します。
avengerを実行する前に環境変数を設定してください。これらについては次のセクションで説明します。
環境。
フィレックス
現在処理中のファイルの拡張子。たとえば、ファイル rcpt+ext is
処理中の場合は「+ext」に設定されます。処理中の場合は空です。 rcpt (または mail ).
含む場合もある デフォルト あるサフィックスのデフォルトのルール ファイルが実行されている場合。
プレフィックス
サフィックス
区切り文字が「+」であると仮定すると、ファイルを処理するときに rcpt+ベース+デフォルト or
メール+ベース+デフォルト, プレフィックス に設定されています ベース一方、 サフィックス の部分に設定されます
名前 デフォルト ファイルが デフォルト,
サフィックス ファイルが空の場合 rcpt 延長なしで、両方とも プレフィックス サフィックス
空です。 サフィックス それ自体に「+」文字が含まれている場合、 サフィックス1 部分に含まれる
of サフィックス 最初の「+」文字の後に、 サフィックス2 2番目以降の部分を含む
サフィックス内の各「+」文字に対して、「+」などとなります。
ENVIRONMENT
認証ユーザー
Mail AvengerがSASLサポート付きでコンパイルされている場合(これはデフォルトではありませんが、
供給した --enable-sasl 引数「configure」に渡され、クライアントが正常に
SASLを使用してサーバーに認証し、 認証ユーザー の名前に設定されます
認証されたユーザー。
アベンジャーモード
受信者がメールを受信するかどうかをテストする場合は「rcpt」に設定します。「mail」に設定します
(おそらく「rcpt」チェックが失敗した後)メールを中継するかどうかをチェックするとき(おそらく
ローカル ユーザーに代わって)。
AVユーザー
avengerが実行される有効なローカルユーザー名。通常は、
以下と同じです:
$USER${PREFIX+$SEPARATOR}$PREFIX\
${サフィックス+$セパレーター}$サフィックス
ただし、次のような特別なアベンジャーファイルの場合 未知の デフォルト、それは有用なものを含むことができる
情報、なぜなら 受信者_ローカル 環境変数、 AVユーザー 反映
メールアベンジャーからの代替 ドメイン エイリアス ファイル。
クライアント
この変数には、クライアントマシンの名前が含まれます。通常は、
「Received:」ヘッダー。その値の形式は次のようになります。
[user@]host
user クライアントが報告した接続のユーザー名です(クライアントが
RFC 1413 識別プロトコルをサポートします。それ以外の場合は省略されます。 host
asmtpdがIPのDNSホスト名を見つけた場合は、検証済み。そうでない場合は、単に
数値の IP アドレス。
クライアント_コロンスペース
クライアントがコマンド「MAIL FROM:」のコロンの間にスペースを含めた場合は 1 に設定されます。
または「RCPT TO:」とそれに続く電子メール アドレスを開始する「<」。
クライアントDNSFAIL
If DNS失敗を許可する 1に設定されています asmtpd.conf ファイルを作成し、クライアントのIPを
ホスト名が一時的なエラーを返す場合、この変数は
エラー。
クライアント_HELO
クライアントが SMTP "HELO" または "EHLO" コマンドに指定した引数に設定します。
クライアントIP
クライアントの IP アドレスに設定します。
CLIENT_NAME
asmtpd がクライアントの検証済み DNS 名を見つけることができる場合は、その DNS 名を設定します。
クライアント_NETHOPS
asmtpdが取得できる場合、サーバーとクライアント間のネットワークホップ数を設定します。
クライアントまたはそのファイアウォールが ICMP 宛先到達不能 (タイプ 3 パケット) を返す
UDPプローブへの応答。これが設定されているかどうかはファイアウォールによって異なります。
構成。
クライアント_NETPATH
asmtpdがサーバー間で決定できる中間ネットワークホップの数を設定します。
およびクライアント。asmtpd がクライアントにどれだけ近いかをプローブできるかどうかは、ファイアウォールによって異なります。
クライアント_パイプライン
クライアントがSMTP後にデータを書き込んだ場合は1に設定されます HELO or えーろ コマンド、前
応答を受信するまで、正しいSMTPクライアントはコマンドを「パイプライン」すべきではありません。
の結果を受け取った後 HELO コマンドを実行し、サーバーが受け入れるかどうかを確認します
パイプライン化されたコマンド。
クライアントポート
クライアントの TCP ポート番号。
クライアント_POST
SMTP セッション中のある時点でクライアントが「POST」コマンドを送信した場合は 1 に設定されます。
「POST」は有効なSMTPコマンドではなく、HTTPコマンドです。しかし、
スパムを送信するには、オープンウェブプロキシを利用してSMTPセッションをメールに「投稿」する。
サーバー。初期のHTTPヘッダー(HTTP postコマンドを含む)は、SMTP
構文エラーがありますが、POSTコマンドの本文にはSMTPコマンドが含まれています。
クライアント_POST 環境変数を設定すると、この方法で送信されたメールを拒否できます。
クライアント_REVIP
の値 クライアントIP バイトの順序が逆になります。先頭に追加する場合に適しています
IP アドレスに基づいて DNS ルックアップを実行するには、「.in-addr.arpa」または RBL ドメインに追加します。
CLIENT_SYNFP
初期TCP SYNパケットの内容を抽象化したフィンガープリントが含まれています。
クライアントはTCP接続を確立するためにSYNパケットを送信します。SYNパケットの正確な内容は
オペレーティングシステムとクライアントのバージョンに依存しているため、
メールサーバーに接続しているクライアントの種類に関する興味深い情報。
指紋の形式は次のとおりです。
WWWW:TTT:D:ss:または
フィールドは次のとおりです。
WWWW
初期TCPウィンドウサイズ
TTT 受信パケットの IP TTL
D IPの「断片化しない」ビット
ss SYN パケットの合計サイズ (IP ヘッダーを含む)
または 次のように、TCP オプションをコンマで区切ったリストを指定します。
N NOPオプション
WNNN
値を持つウィンドウスケーリングオプション NNN
MNNN
最大セグメントサイズ値 NNN
S 選択的ACK OK
T タイムスタンプオプション
T0 値がゼロのタイムスタンプ オプション
クライアントシノス
asmtpdがクライアントのオペレーティングシステムを推測できる場合 CLIENT_SYNFP、それは設定されます
クライアントシノス その推測値に。例えば、Windowsからのメールをグレーリストにするには
マシンでは、以下を実行できます。
match -q "*Windows*" "$CLIENT_SYNOS" && グレーリスト
データバイト
この変数は実際にはアベンジャー変数ではなく、 ボディテスト
コマンド。SMTPデータで転送されるメッセージのバイト数を指定します。
コマンドですが、CR NLシーケンスをNLに変換した後です。大まかに言うと、
X-Avenger:、SPF-の後のすべてのヘッダーを含むメッセージには多くのバイトが含まれています。
Received、または Received: ヘッダー。
ETCDIR
の値 その他ディレクトリ asmtpd設定ファイル(または アベンジャー デフォルト)。
EXT アベンジャーがユーザーに代わって実行する場合 EXT アドレスの部分に設定されます
の接尾辞を決定する rcpt or mail ファイル。例えば、 セパレータ は "-"
そして受信者は リスト購読@hostここで、 host 仮想ドメインではありません。
エイリアスファイル 含まれています。
リスト: ユーザー-mylist
すると、avengerは「user」の代わりに実行されます(エイリアス展開により ユーザー-
マイリスト購読). EXT に設定されます マイリスト購読.
注意してください EXT 接尾辞がない場合には空となり、
avengerがシステムファイル上で実行されるときに処理されるシステムファイル。 レシピエント,
この変数は設定されていません ボディテスト コマンド。
主催者
指定されたローカルホストの名前に設定されます。 ホスト名 の指令
アベンジャー.conf.
メールエラー
この変数は、送信者のSPF処理が 失敗する、またはasmtpdが
送信者アドレスにバウンスメッセージを送信できません。いずれの場合も、Mail Avenger
スクリプトがデフォルトに戻った場合、メールを拒否します。
MSGID
このメッセージ用にランダムに生成された文字列。通話を関連付けるのに役立ちます。
bodytestスクリプトでrcptスクリプトを実行します。これはMessage-IDとは無関係です。
メッセージのヘッダーには表示されませんが、Mail AvengerのReceivedヘッダーには表示されます。
挿入します。
マイIP
SMTP TCP 接続のローカル側の IP アドレス。
マイポート
SMTP TCP 接続のローカル側の TCP ポート番号。通常は 25 になります。
レシピエント
メッセージのエンベロープ受信者。この環境変数は
プレゼント ボディテスト このようなプログラムは複数の
ユーザー。
受信者ホスト
ドメイン部分 レシピエントを小文字に折り返すと、 host を特定いたします。 レシピエント is
ローカル@host. 存在しない ボディテスト プログラムの説明に記載されているように、
レシピエント.
受信者_ローカル
ローカル部分 レシピエントを小文字に折り返すと、 ローカル を特定いたします。 レシピエント is
ローカル@host. 存在しない ボディテスト プログラムの説明に記載されているように、
レシピエント.
送信者
このメールメッセージのエンベロープ送信者(つまり、クライアントが
「MAIL FROM:」SMTP コマンド。
送信ホスト
ホスト名の部分 送信者を小文字に変換します(つまり、 host in user@host).
送信者_ローカル
ローカル部分 送信者を小文字に変換します(つまり、 user in user@host).
送信者MXES
DNS MXレコードのリスト 送信ホストそのホスト名に MX レコードがある場合。
送信者_バウンス
空でないエンベロープ送信者の場合、asmtpdは配信が可能かどうかを確認しようとします。
送信者へのバウンスメッセージ。そうでない場合は、 送信者_バウンス 3桁のSMTPに設定されている
エラーコード。最初の数字が4の場合、エラーは一時的なものです。最初の数字が
5、エラーは永続的でした。バウンスメッセージの受信に失敗したとみなされることに注意してください。
a メールエラー 上記のように、メールはデフォルトで拒否されます。
セパレーター
の値 セパレータ asmtpd設定ファイルから。デフォルトはありません
(セパレーター ない場合は設定されません セパレータ 設定ファイルで指定されます)。
ただし、sendmail の場合は「+」、qmail の場合は「-」に設定する必要があります。
SPF0
SPF メッセージに対して SPF チェックを実行した結果。次のいずれかになります。 なし, ニュートラル,
パス, 失敗する, ソフトフェイル, エラーまたは 未知の。 ご了承ください SPF0 SPF は同義ですが、
SPF Mail Avengerの将来のリリースでは廃止される予定です。 SPF と同義
SPF1.
SPF1
メッセージに対してSPFチェックを実行した結果ですが、異なる名前が返されます
結果については、SPFプロトコルの新しいリビジョンと互換性があるようにする
仕様。新しい名前は なし, 普通, 合格, 失敗する, ソフトフェイル, 温度エラー,
パーマエラー.
SPF_EXPL
不良な SPF ステータスに付随する説明文字列。
SSL_CIPHER
Mail AvengerがSTARTTLSコマンドのサポート付きでコンパイルされている場合(
--enable-ssl オプションを「構成」に設定し、クライアントがSSL/TLS経由で通信している場合、
この変数にはアルゴリズムのテキストによる説明が含まれます。
SSL_CIPHER_BITS
SSL_ALG_BITS
SSL_CIPHER_BITS SSL/TLS 暗号で使用される秘密鍵のビット数が含まれます。
SSL_ALG_BITS アルゴリズムで使用されるビット数です。たとえば、
128ビットのRC4を使用し、88ビットを平文で送信し、 SSL_CIPHER_BITS 40歳になるだけ、
それは効果的なセキュリティであるため、 SSL_ALG_BITS 128になります。
SSL_発行者
SSL_発行者DN
クライアントがSSL証明書を使用して正常に認証された場合、
SSL_発行者 証明書署名者の共通名に設定され、 SSL_発行者DN
署名者の完全な識別名の短縮表現に設定されます。
完全な識別名は、次のコマンドによって出力される形式になります。
openssl x509 -noout -issuer -in cert.pem
この変数は、 SSLCA証明書 メールに渡したファイル
Avenger には複数の証明機関が含まれているか、他の CA 証明書に署名しています。
Mail Avengerは署名者を認識しない場合、クライアント証明書を受け入れません。
証明書の。
SSL_SUBJECT
SSL_SUBJECT_DN
クライアントがSSL証明書を使用して正常に認証された場合、
SSL_SUBJECT 証明書内のクライアントの共通名に設定されますが、
SSL_SUBJECT_DN クライアントの完全な表現をコンパクトに表示するように設定されます
識別名。完全な識別名は、次のコマンドによって出力される形式になります。
openssl x509 -noout -subject -in cert.pem
SSL_バージョン
使用されている SSL/TLS プロトコルのバージョン。
ユーフライン
メッセージを渡す前にメッセージの先頭に追加するのに適した mbox の「From」行
配信プログラムに。(これは主に bodytest ルールに役立ちます。)
USER
avenger を実行しているユーザーの名前。
アベンジャー/ASMTPD INTERFACE
avenger は単なる単純なシェル スクリプトです。ファイルを調べて、何を実行しているかを確認できます。
興味深い操作のほとんどは、asmtpdまたは外部プログラムで発生します。
avenger から生成されます。このセクションでは、asmtpd と avenger 間のインターフェースについて説明します。
avengerは標準入力でasmtpdに接続されたunixドメインソケットを継承し、
出力。このソケットを介してasmtpdにコマンドを送信し、同様に応答を読み取ります。
asmtpdへのメッセージと他の出力が混在しないようにするため、
ただし、実行するプログラムによっては、アベンジャーシェルスクリプトがファイル記述子を再編成して
asmtpd との間のすべての通信はファイル記述子番号 3 を介して行われます。
各コマンドは1行で構成され、その後に改行が続きます( return コマンド、
複数行に渡る場合もあります。返信がある場合もありますが、ない場合もあります。
コマンドの結果に応じて応答は0行以上の
フォーム
変数=値
変数 通常はコマンドの一部として指定された変数名です。
avengerシェルスクリプトは環境変数を設定して結果を記録します 変数 〜へ
値スクリプトの後続の行からアクセスできるようにします。
応答は対応するコマンドが受信された順に送信されます。ただし、
asmtpdはリクエストを非同期に実行します。そのため、複数の同時実行が可能です。
複数のコマンドを記述するだけで、DNSリクエストやSPFテストなどの操作を実行できます。
応答を受信する前に asmtpd を実行します。
「.」コマンドは何もしませんが、asmtpdは「.」をアベンジャーに返答として返します。
1 つ以上のコマンドを発行した後、Avenger プロセスの状態を同期できます。
たとえば、複数のDNSルックアップを実行して、さまざまなRBL(リアルタイム
ブラックホールリスト)を発行し、 . コマンドを実行してから応答を待ちます。 . 戻ってくる、
以前のコマンドもすべて完了します。復讐者 セット変数 コマンドは単に送信する
「.」を読み戻すまでループし、以前の変数を設定します。
プロセス中に応答を読み取るコマンド。
次のコマンドを使用できます。
. 当学校区の . コマンドは asmtpd によって単純にエコーバックされます。
ボディテスト command
現在のアベンジャースクリプトを終了します。asmtpdが本文全体を受信するように指定します。
メッセージの command (現在のアベンジャーと同じユーザーIDで
スクリプト)を標準入力としてメールメッセージ全体を読み込みます。その後、asmtpdは
SMTP「DATA」コマンドは、終了ステータスに基づいて command 次のように:
0もし command ステータス0で終了すると、asmtpdは「DATA」コマンドに次のように応答します。
成功(SMTPコード250)を返し、メッセージをsendmail(または
次のように設定しました センドメール in asmtpd.conf)にて配送いたします。
99もし command ステータス99で終了しても、asmtpdは「DATA」コマンドに応答します。
250の応答コードで成功しますが、データはスプールされません。 command
データに対して何らかの処理を行わないと、メッセージは失われます。
100 (64、65、70、76、77、78、112 も含む)
If command ステータス100(または上記の終了ステータスのいずれか)で終了した場合、アベンジャーは
ハードSMTPエラー(コード554)でメールを拒否します。 command 出力を書き込みました
標準出力の場合、この出力はメールクライアントに返されます。それ以外の場合は、
asmtpd は「メッセージの内容が拒否されました」というテキストを提供します。
111 (またはその他の終了ステータス)
If command ステータス111で終了すると、結果は終了ステータス100と同じになります。
ただし、asmtpd は 451 ではなく一時エラー コード (554) を使用します。
信号
If command シグナルにより異常終了した場合、asmtpdも451を使用しますが、
この場合、プログラムの出力はクライアントに返されません。代わりに
問題の説明を返します。
asmtpdは1つしか実行できないことに注意してください ボディテスト メッセージごとにコマンドを指定します。複数の
メッセージの受信者全員が同じ ボディテスト 同じユーザーIDで
2人のユーザーが異なる ボディテスト コマンドを実行するか、同じコマンドを
異なるユーザー ID の場合、asmtpd は 2 番目の SMTP "RCPT" コマンドを次のメッセージとともに延期します。
452 このユーザーにメッセージの別のコピーを送信します
これにより、メールクライアントは後で2番目のユーザーにメッセージを再送信します。
クライアントにメッセージを複数回送信させないようにするには、 ボディテスト
システム全体のファイル内のコマンド( デフォルト ルールファイルを使用するか、 リダイレクト
リダイレクトするコマンド アベンジャーユーザー複数のユーザーに対してコマンドを実行できるようにする
下 アベンジャーユーザー ユーザーID。
ファイル記述子0は、 command 読書と
書き込み。したがって、メッセージがローカルサーバーにスプールされる前に変更することが可能です。
MTA。コマンド エディンプレイス(1)はスパムフィルターを通してメッセージを処理するのに役立つ
メッセージをスプールする前に注釈を付けます。
dns-a 変数 ドメイン名
asmtpdにA(IPv4アドレス)レコードのDNSルックアップを実行するように要求します。 ドメイン名.
このような A レコードが存在する場合、応答は 1 つ以上の IP アドレスのリストになります。
変数=IPアドレス ...
そのような A レコードが存在しない場合は、応答は次のようになります。
変数=
標準的なアベンジャースクリプトでは、これは 変数 空の文字列に置き換えます。
DNSの名前解決に一時的なエラーが発生し、応答がないため、
デフォルトのアベンジャースクリプト 変数 未設定のままになります。
RBLなどをチェックする際は、
一時的なDNSエラーです。シェル構文${を使用できます。変数-デフォルト}$ 戻る
$変数 を特定いたします。 変数 が設定され、 デフォルト を特定いたします。 変数 設定されていません。同様に
${変数+セッションに} は戻り値 セッションに if 変数 設定されている場合は空の文字列、そうでない場合は空の文字列になります。
たとえば、bad-senders.org に望ましくない送信者ホストの RBL が含まれていた場合:
echo dns-a BADSENDER "$SENDER_HOST".bad-senders.org >&3
セット変数
test -n "$BADSENDER" && deny "$SENDER_HOST は不正な送信者です"
テスト -z "${BADSENDER+set}" \
&& defer "$SENDER_HOST.bad-senders.org: DNS エラー"
avengerスクリプトを使用する場合、すでに関数が存在することに注意してください rbl チェックする
RBL。
dns-mx 変数 ドメイン名
そして dns-aただし、MX レコードを検索します。成功した応答の形式は次のようになります。
変数=優先度1:ホスト-1 [優先度2:ホスト-2 ...]
場所 優先度1 MX優先度は ホスト-1以前と同様に、空の文字列は
MX レコードが存在せず、応答がない場合はエラーを示します。
dns-ptr 変数 IPアドレス
検証済みのDNSホスト名のリストを返します IPアドレス以前と同様に、空の文字列
の 変数 PTR レコードが存在しないことを示します。応答がない場合はエラーを示します。
dns-txt 変数 ドメイン名
他と同様 DNS コマンドではなく、TXTタイプのレコードを検索します。複数のTXT
レコードが存在する場合、1つだけ返します。TXTレコードにはいくつかの制限があります。
この例では、改行文字を含むものは返されません。
ネットパス 変数 IPアドレス
ネットワークホップをマップする IPアドレス (これはtracerouteシステムに似ています
実用的ではありませんが、より効率的です。応答は次の形式になります。
変数=#ホップ hop1 hop2 ...
#ホップ ネットワークホップの総数 IPアドレス asmtpd がこれを理解できる場合。
(必ずしもそうとは限りませんが、 IPアドレス asmtpdがファイアウォールの背後にある場合
これを計算すると、値は -1 になります。 hop1 残りの引数はアドレスである
途中のルーターの数 IPアドレス.
リダイレクト ローカル
現在のアベンジャープロセスを終了し、メールを
送られる ローカルこのコマンドは「rcpt」モードでのみ使用可能です。
「メール」モード(asmtpdがavengerを実行して、ローカルのメールを中継するかどうかを確認します)
ローカル以外のクライアント マシン上のユーザー)。
ローカル ローカルユーザー名、またはローカルユーザー名の後に区切り文字が続く
文字と拡張子で構成されている。名前は エイリアス (によって指定された
エイリアスファイル in asmtpd.conf).
なお、 アベンジャーユーザー ユーザーは他のユーザーにリダイレクトできますが、一般ユーザーは
自分自身または アベンジャーユーザー.
return コード 説明
or
return コード-説明
コード-説明
コード 説明
必要なSMTP応答を指定します。また、メッセージのそれ以上の処理を回避します。
システム全体のデフォルトのルールセット(通常、avengerが単に終了するときに発生します)
ステータス0)。 コード 2、4、または5で始まる250桁の数字でなければなりません。(通常はXNUMX)
成功の場合は 451、メールを延期する場合は 554 です。
このコマンドの最初の形式( コード 説明)は
結果コードとともに1行の説明。2番目の形式では、avenger
複数行の応答を指定します。この場合、最後の行を除くすべての行に -
間に コード 説明最後の行にはスペースを含める必要があります。(注
その return キーワードは最初の行にのみ表示されます。
return コマンドを実行すると、それ以上のコマンドを発行できなくなります。
SPF 変数 SPFメカニズム ...
SPF0 変数 SPFメカニズム ...
SPF1 変数 SPFメカニズム ...
SPF メカニズムに基づいてメール クライアントを評価します。次の結果が返されます。
変数=配置
ここで、 SPF0, 配置 の一つであります: なし, ニュートラル, パス, 失敗する, ソフトフェイル, エラー,
or 未知の (ただし、 なし 実際には不可能である)。 SPF1
同等の 配置 名前は なし, 普通, 合格, 失敗する, ソフトフェイル, 温度エラー,
パーマエラー。 (現在 SPF の同義語です SPF0ただし、避けることをお勧めします
SPF 将来のリリースでは、 SPF1.)
例えば、ユーザー名が「joe」だとします。 セパレータ は「+」で、
メールアドレス「joe+yahoo」を使用して、いくつかのYahooメーリングリストに登録しました。
スパマーが「joe+yahoo」にメールを送信し始めたら、すべてのメールを拒否する必要があります。
そのアドレスはヤフーのコンピュータから発信されたものを除いては、ヤフーのコンピュータから発信される可能性がある。
「.yahoo.com」で終わるものや、24ビットのIPアドレスプレフィックスを共有するもの
yahoo.comのMXレコードのいずれか。これは、次のスクリプトで実行できます。
$HOME/.avenger/rcpt+yahoo:
エコーspf YAHOO ptr:yahoo.com mx:yahoo.com/24 -all >&3
セット変数
「$YAHOO」の場合
失敗)
拒否「申し訳ありませんが、このプライベートエイリアスは Yahoo リスト専用です」
;;
エラー)
延期「申し訳ありません、一時的な DNS エラーです」
;;
ESAC
例
メールアドレスをエンベロープ送信者として使用しない場合は、すべてのバウンスを拒否することができます。
そのアドレスにこれらのコマンドを rcpt ファイル:
テスト -z "$SENDER" \
&& 拒否 "<$RECIPIENT> は有効な送信者ではありません。" \
「バウンスを受信しない」
次のスクリプトは、spamassassin(人気のスパムフィルタ、以下から入手可能)を実行します。
<http://www.spamassassin.org/メッセージの送信者が
SPF 処理が合格であるか、またはデフォルトで拒否される予定です。
# 次の行はすぐにデフォルトの拒否にフォールスルーします
# メールのSPF処理が失敗の場合の処理、または
# 送信者はバウンスメッセージを受け入れません。
エラーチェック
テスト "$SPF" = 合格 \
|| ボディテスト edinplace -x 111 スパマサシン -e 100
次のスクリプトは、MITまたはNYUの任意のマシンからのメールを即座に受け入れます(
MAIL_ERRORが設定されていない場合、これらのドメインに属さないマシンを「グレーリスト」に登録し、
グレーリストが通過すると、デフォルトのシステム全体のルールが適用されます。
エラーチェック
spf 信頼済み ptr:nyu.edu ptr:mit.edu ?all
セット変数
test pass = "$TRUSTED" && accept 信頼できる送信者 OK
グレーリスト遅延=5分
グレーリスト
次のスクリプトは、SMTP「POST」コマンドを発行したクライアントからのメールを拒否します。
(存在しない)または、コマンドの積極的で早まったパイプライン化が使用されました。クライアントが
MAIL FROM:またはRCPT TO: SMTPコマンドのコロンの後にスペースを入れると、
SYN フィンガープリントと IP アドレスの最初の 24 ビットを含むキーを使用してメッセージを送信します。
メッセージのSPF処理がエラーの場合、メッセージは延期されます。SPF
メッセージの処置がsoftfailまたはnoneの場合、メッセージの本文は
スパマサシン。
エラーチェック
テスト -n "$CLIENT_POST" -o -n "$CLIENT_PIPELINING" \
&& 拒否「スパムはご遠慮ください」
テスト -n "$CLIENT_COLONSPACE" \
&& グレーリスト "${CLIENT_IP%.*} $CLIENT_SYNFP $SENDER"
ケース「$SPF」
エラー)
「SPF レコード処理中に一時的なエラーが発生しました」を延期する
;;
ソフトフェイル|なし)
bodytest edinplace -x 111 spamassassin -e 100
;;
ESAC
を設定した場合、 MACUTIL_SENDER 環境変数を「user+bounce+*@your.host.com」にする
メールを送信する マチル --sendmail次のようなものを作成できます rcpt+バウンス+デフォルト 〜へ
有効なバウンス アドレスへのメールのみを受け入れます。
macutil --check "$SUFFIX" > /dev/null \
|| 「<$RECIPIENT>.. ユーザーは不明」を拒否
このスクリプトと併せて、通常のメール送信先へのバウンスメッセージを拒否することもできます。
メールアドレスを rcpt 最初の例で説明したスクリプト。
この例は少し複雑で、ボディテストを使用してメールを拒否する方法を示しています。
メッセージの内容に基づいて、各メッセージを
ClamAVウイルス対策ソフトウェア(http://www.clamav.net/>) と spamassassin メール
フィルター。メッセージにウイルスが含まれていたり、スパムとしてフラグが付けられている場合は、
問題の説明。シェルスクリプトを作成し、 $HOME/.avenger/本体、実行する
これらのテストはメッセージ本文に対して行われます。スクリプトは次の行で呼び出すことができます。
ボディテスト $HOME/.avenger/本体
自分で $HOME/.avenger/rcpt ファイル。あるいは、スクリプトを次のように実行するように設定することもできます。
システム全体で /etc/アベンジャー/デフォルト ファイル(その場合、
アベンジャーユーザー 独自のホームディレクトリを書き込むことができ、spamassassinファイルを保存できます。
スクリプトは次のとおりです。
#!/bin/sh
out="`clamscan -i --no-summary --mbox - 2>&1`"
テスト「$?」= 1の場合、
echo このメッセージはウイルスに感染しているようです
printf "%s\n" "$out" \
| sed -e '/警告:/d' -e 's/^[^:]*: //' | sort -u
100番出口
fi
出力="`edinplace -x 111 spamassassin -e 100`"
「$?」の場合で
0)
0番出口
;;
100)
echo 申し訳ありませんが、spamassassin があなたのメッセージをスパムとしてフラグ付けしました
abcを読みながら、
test "$a $b" = "コンテンツ分析" && break
行われ
読む
読む
読む
abcを読みながら、
ケース「$a」
"")
破る
;;
-*)
;;
[0-9]*)
printf " %s\n" "$c"
;;
*)
printf " %s\n" "$a $b $c"
;;
ESAC
行われ
100番出口
;;
*)
テスト -n "$out"; の場合
echo スパマサシンの失敗:
printf "%s\n" "$out"
ほかに
spamassassin のエコー システム エラー
fi
111番出口
;;
ESAC
このスクリプトの前半はclamscanウイルスチェッカーを実行し、出力を
変数out。clamscanはウイルスが見つかった場合はコード1で終了し、成功した場合はコード0で終了し、
さまざまなシステムエラーを示すために他のエラーコードを使用します。メールを拒否したいのは、
clamscanはコード1で終了します。これが発生すると、clamscanの出力を取得し、フォーマットします。
より満足のいく方法で(警告を取り除いて)標準出力に送信します。
このボディテストを使用してウイルスを検出するSMTPトランザクションの例は次のようになります。
これは(ほとんどのウイルスで陽性を示す特別なEICARテスト文字列でテストされています)
チェッカーズ):
DATA
354 メールを入力し、行末に「.」のみを入力します
件名: EICAR テスト
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
554-このメッセージはウイルスに感染しているようです
554 Eicar テスト署名が見つかりました
ウイルスチェックに失敗した場合、スクリプトはメッセージをspamassassinで実行して、
スパム。spamassassinはメールメッセージを変更するので、
edinplace。clamscanは入力ファイルの最後まで読み取りますが、これは
edinplaceは標準入力を巻き戻すので大丈夫です。 -e spamassassinに伝えるためのフラグ
スパムの場合は100で終了します。その後、spamassassinが0で終了した場合は、メールを受け入れます。
100以外の場合は、問題が発生したため、メールを一時的に延期します。
この時点でメールを受け入れることも可能かもしれないが、spamassassinは
ファイルを所定の場所に配置しないと、spamassassin が予期せず終了した場合にメッセージが切り捨てられる可能性があります。
spamassassinが100で終了した場合、メールを拒否します。また、spamassassinがなぜ終了したかについても報告します。
メールを拒否しました。ここでも、edinplaceが巻き戻すという事実を利用します
メッセージを処理する前と後に標準入力にファイル記述子が渡される。
巻き戻されたら、シェルでメッセージを1行ずつ処理し始めることができます。
スクリプト。デフォルトでは Spamassassin です (「report_safe 0」を設定していない場合)
次のようなスパムレポートが含まれています:
コンテンツ分析の詳細: (11.7 ポイント、5.0 必要)
ptsルール名説明
--------------------------------------------------------------------
1.0 RATWARE_RCVD_AT バルクメールのフィンガープリント(受信@)が見つかりました
4.2 X_MESSAGE_INFO バルクメールのフィンガープリント(X-Message-Info)が見つかりました
0.0 MONEY_BACK BODY: 返金保証
0.5 BIZ_TLD URI: BIZトップレベルドメインのURLを含む
0.6 URIBL_SBL SBLブロックリストにリストされているURLが含まれています
[URI: crocpeptide.biz]
0.5 URIBL_WS_SURBL WS SURBLブロックリストにリストされているURLが含まれています
[URI: crocpeptide.biz]
...
ヘッダーをスキップし、結果ごとに SMTP セッションに出力します。
否定的/ホワイトリスト結果(-で始まるもの)は報告せず、コメント行(
数字で始まる場合、インデントして印刷します。典型的なSMTPセッションは次のようになります(
スパムフィルターをトリガーする特別な GTUBE テスト ライン):
DATA
354 メールを入力し、行末に「.」のみを入力します
件名: gtube テスト
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
.
554-申し訳ありませんが、spamassassin があなたのメッセージをスパムとしてフラグ付けしました
554- 日付がありません: ヘッダー
554 本文: 迷惑メールの一般的なテスト
SSLクライアント証明書を認証に使用する例を示します。
共通名「My CA」を持つプライベートCAで、すべての承認済みCAの証明書に署名します。
メールクライアントでは、次のものを /etc/アベンジャー/リレー これらのクライアントに
リレー:
テスト "My CA" = "$SSL_ISSUER" \
&& accept "クライアント $SSL_SUBJECT の中継が許可されました"
「中継拒否」を拒否
onworks.net サービスを使用して Avenger をオンラインで使用する
