Sieve Scripts や SecurityGateway Sieve拡張 ページに加え、このページではSieveメールフィルタリング言語とSecurityGateway上での実装に関する概要を説明します。最初にSieveスクリプトの基本を説明します。次にこの言語の様々な構成エレメントについて説明します。対応している、標準的なコントロール, テスト, アクション コマンド一覧も紹介します。最後に、ページの下部にサンプルスクリプトを紹介しているので、ご参照下さい。
|
Sieveメールフィルタリング言語に関する詳細な情報については、IETFウェブサイトでドキュメントを参照してください: Sieve: An Email Filtering Language (RFC-5228), Sieve's Copy Extension (RFC 3894), Sieve's Body Extension (RFC-5173), Sieve's Reject Extension (RFC-5429), Sieve's Variables Extension (RFC-5229), Spamtest and VirusTest Extensions (RFC-3685) SecurityGatewayの電話やメールサポート、ナレッジベース、FAQ、フォーラム等の技術サポートやヘルプ情報については www.mdaemon.com/Support/ を参照してください。 |
Sieveスクリプトは、基本的には次の4つの要素で構成されています。
1.Requirements(要件)—この要素は、提供されたスクリプトに必要とされるSieve拡張を宣言するために使用されます。オプションの拡張に属しているコマンドがスクリプトで使用される場合、スクリプトの始めで必要な拡張を一覧にするrequireコントロールコマンドを使用する必要があります。セミコロンはrequireコマンドの引数の終わりで必要です。
例:
require "SecurityGateway";
-and-
require ["SecurityGateway", "fileinto"];
2.Conditions(条件)—スクリプトのこの要素は、メッセージ中でテストする任意のタイプと、テストや比較の方法を宣言するのに使用します。
例:
if size :over 1M
-and-
if header :contains ["to", "cc"] "Frank Thomas"
3.アクション—これらは、必要とされる処置および指定された条件がTrueである場合、実行されるコマンドです。各Actionは、セミコロンが必要で、処置の各ブロックは、波括弧"{"および"}"を含む必要があります。
例:
if size :over 1M { discard; }
-and-
if header :contains ["to", "cc"] "Frank Thomas" {
bayes-learn "spam";
fileinto "spam";
}
4.コメント—自分自身の参照のためにコメントをSieveスクリプトに含むことができます。使用することができる2種類のコメント、1行コメントおよび複数行コメントがあります。1行コメントは"#"から始めて、行の終わり(すなわち次のCRLF)まで継続します。複数行コメントは"/*"から始めて、複数の行にすることができ、"*/"で終わります。
例:
# discards messages over 1 mb
if size :over 1M { discard; }
-and-
if header :contains "from" "Frank Thomas" {
/* Frank Thomas sends mostly spam to us, so this script
will automatically move everything we get from him to
the user quarantine. */
fileinto "spam";
}
文字列
テキスト文字列は1つダブルクォートで始めと終わりにおきます。例えば: "Frank Thomas"。
バックスラッシュまたはダブルクォート引用符で囲まれた文字列内の文字にバックスラッシュまたはダブルクォートを含むには、もう一つバックスラッシュの後に存在する必要があります。従って、\\は\と\"として処理され、引用符で囲まれた文字列において"とみなされます。他の文字は文字列でエスケープキャラクタにはなりません。
文字列のリスト
スクリプトでグループの文字列を使用する場合、各引用符で囲まれた文字列をカンマで区切って、セットを角括弧に入れます。
例:
if header :contains ["to", "cc"] ["me@xyz.com", "you@xyz.com", "us@xyz.com"]
ToまたはCCヘッダが3つのアドレスのうち、いずれかを含んでいる場合、このテストの結果はTrueです。
ヘッダ
ヘッダ名でコロンは不要です。
例:
if header :is "to:" (invalid)
if header :is "to" (valid)
テストリスト
文字列リストと同様に、グループを括弧に入れることによって、スクリプトで一群のテストを含むことができます。これは、それぞれ論理的な"AND"および"OR"ステートメントなので、全部または任意のTestコマンドを使用する時に必要です。
例:
if anyof (size :over 1M, header :contains "subject" ["big file", "mega file"])
{
discard;
}
引数と比較タイプ
大部分のコマンドは、実行する内容について指定するために、一つ以上引数を必要とします。いくつかのタイプの引数(例えば位置引数、タグを付けられた引数およびオプションの引数)があります。タグを付けられた引数およびMatch Type引数、コロンで先行されます。:contains、:is、:matches:overおよび:underは、タグを付けられた引数のすべてのサンプルです。一部のタグを付けられた引数は、特定のコマンドに限られています。異なるタイプの引数の詳細について、以下を参照:RFC-5228
アクション
各処置は、セミコロンで区切る必要があり、そして、処置の各ブロックは、波括弧で囲む必要があります。
例:
if header :contains ["to", "cc"] "Frank Thomas" {
bayes-learn "spam";
fileinto "spam";
}
Sieve言語で使用される3つのコントロールコマンドがあります。
require
このコントロールコマンドは、どのオプションの拡張をスクリプトで使用するか宣言するためにスクリプトの始めに使用されます。
例:
require ["SecurityGateway", "fileinto"];
if / elsif / else
if コマンドは、中心的なコントロールコマンドです。3つの相互関係あるコマンドが技術的にありますが、elsifおよびelseは、 if で独立して使用することができません。 if がスクリプトで遭遇される時に、テスト条件はTrueであるか判定するために評価されます。Trueの場合、関連する処置が実行されます。
if テストがfalseである場合、最初の elsif テストが評価されます。 elsif がtrueである場合、そのテストと関連する処置が実行されます。 elsif テストがfalseと判明する場合、続いて、それらの1つがtrueになるまで、処理は次のelsifに続きます。
ifおよびすべての elsif テストがfalseである場合、elseコマンドがある場合、そのコマンドの処置は実行されます。
stop
stopコントロールコマンドは、すべての処理を終わらせます。
これらは、SieveのSecurityGatewayの実装でサポートされる標準テストコマンドです。bodyおよびenvelopeコマンドは拡張です。しかしスクリプトで、Testコマンドのいずれかを使用する場合には、requireコントロールコマンドで、これらを含む必要があります。さらに、SecurityGateway Sieve拡張ページで要点をまとめられるSecurityGateway拡張に含まれる追加されたテストコマンドがあります。
address
このコマンドで、含んでいる可能性のあるフレーズまたは名前ではなくヘッダでメールアドレスのみテストすることができます。例えば、"to"ヘッダで"Frank Thomas" <frank@example.com>を含む場合、テストヘッダ:is "to" "frank@example.com"の結果はfalseになります。しかし。アドレスだけが評価されるので、テストアドレス:is "to" "frank@example.com"はtrueになります。
同様に、このコマンドで使用できるオプションのタグを付けられた引数":localpart", ":domain"および":all"があります。:localpart引数は、アドレス(例えば"frank@example.com"の"frank")の左辺だけを評価します、:domain引数は、アドレス(例えば"example.com")のドメイン一部を使用するだけです、:allは全アドレスを使用します。これらの引数のいずれも含まれない場合、:allはデフォルトにより使用されます。
例:
require "fileinto";
if address :domain :is "from" "spammer.com" {
fileinto "spam";
}
allof
このテストは、論理的な"AND"で、処置のために評価される条件の全てがtrueである必要があります。
例:
if allof (header :contains "from" "J.Lovell", header :contains "to" "Bubba")
{
fileinto "spam";
}
anyof
このテストは、論理的な"OR"で関連する処置のために評価される条件のいずれかがtrueである必要があります。
例:
if anyof (size :over 1M, header :contains "subject" "big file attached")
{
reject "I don't want messages that claim to have big files.";
}
body
bodyテストコマンドは、オプションの拡張で、使用する任意のスクリプトの始めに、require "body"コントロールコマンドを使用する必要があります。このコマンドは、メッセージの本文に対して比較します。このコマンドの詳細は、以下を参照してください:Sieve's Body Extension (RFC-5173)
例:
require ["body", "fileinto"];
if body :text :contains "secret formula" {
fileinto "admin";
}
envelope
envelopeコマンドは、オプションの拡張で、使用する任意のスクリプトの始めに、require "envelope"コントロールコマンドを使用する必要があります。"from"またはto"がコマンドの引数として個々に使用される場合、このコマンドはSMTP MAIL FromおよびRCPT To envelopeパートに対して比較します。
require "envelope";
if envelope :is "from" "MrsFrank@company.com" {
redirect "frankshome@example.com";
}
exists
引数にリストされるヘッダがメッセージ内で存在する場合、このテストはtrueです。すべてのリストされたヘッダが存在する必要がありか、またはテストがfalseである必要があります。
例:
if exists "x-custom-header" {
redirect "admin@example.com";
}
-and-
if not exists ["from", "date"] {
discard;
}
false
このテストは、"FALSE"に常に評価します。
header
指定されたヘッダの値が引数によって設定される条件に適合させる場合、ヘッダテストはtrueに評価します。Match Type引数なしが指定される場合、:isはデフォルトにより使用されます。
例:
require "fileinto"
if header :is "x-custom-header" "01" {
fileinto "admin";
}
not
別のテストで、このコマンドの使用は、テストの結果が、テストの処置が必要とされる逆転することを意味します。例えば、テストif not exists ["from", "date"] { discard; }は、メッセージが"from"および"date"ヘッダ両方を含んでいない場合、discard処置が必要とされることを意味します。notコマンドが省略される場合、それはヘッダDIDが存在する場合、メッセージが廃棄されることを意味します。
size
sizeコマンドはタグを付けられた引数":over"および":under"を受け入れ数値によって適用される必要があります。これらの引数は、メッセージサイズが、テストでTRUEとなるよう指定される値より高いまたは低いか指定するために用います。メガバイトを示す値の後のM、キロバイトのK、またはバイトには文字を指定なしで使用することができます。
例:
if size :over 500K {
discard;
}
spamtest
spamtest コマンドは、ietf.orgのSpamtest and VirusTest Extensions (RFC-3685)ドキュメントで定義されているSieve拡張です。この拡張に関する情報についてはそのドキュメントを参照してください。
true
このテストは、"TRUE"に常に評価します。
virustest
virustestコマンドは、ietf.orgのSpamtest and VirusTest Extensions (RFC-3685)ドキュメントで定義されているSieve拡張です。この拡張に関する情報についてはそのドキュメントを参照してください。
vnd.mdaemon.ai.prompt
AI分類で使用されるこのテストでは、事前に構成されたAIプロンプト(「セキュリティ」>「AI分類」>「AIプロンプト」で定義)が呼び出され、メッセージ・コンテンツがAIサービスに送信され、分類応答が受信される。
構文: vnd.mdaemon.ai.prompt [MATCH-TYPE] <prompt-name> <expected-response>
•prompt-name (string) - 設定されているAIプロンプトの名前
•expected-response (string) - AIのレスポンスと照合する値
対応するマッチタイプ
•:is - 文字列の完全一致(デフォルト)
•:contains - 部分文字列の一致
•:matches - ワイルドカード・パターンマッチ(*と?)
必要: vnd.mdaemon.ai
で有効: DATA event and later (after message content is available)
パフォーマンスに関する考慮事項
重要:AIプロンプトの実行は同期的であり、メッセージ処理中に行われる。メール配信を遅延させないために
•プロンプトを素早く返すように設計する- 簡潔なプロンプトと効率的なAIモデルを使用する。
•適切なタイムアウトを設定する- AIモデルの設定でタイムアウト値を設定し、無期限のブロックを防ぐ。
•思考モードを避ける- 「思考」または「推論」モードが拡張されたAIモデル(例:o1、o3、o1-pro)は、応答時間を大幅に増加させるため、使用しないでください。
•選択条件を使用する- 他のSieveテストと組み合わせて、AIが起動するタイミングを制限する:
require ["vnd.mdaemon.ai", "spamtest"];
# 基本的なスパムチェックを通過したメッセージに対してのみAIを実行する。
if allof(spamtest :value "lt" :comparator "i;ascii-numeric" "5",
not header :contains "subject" "unsubscribe") {
if vnd.mdaemon.ai.prompt :is "PhishingCheck" "YES" {
discard;
}
}
設定要件
Sieveルールでこのテストを使用する前に、SecurityGatewayのWebインタフェースで以下を設定する必要があります:
1.AIモデル(Security > AI Classification > AI Models)
oOpenAI互換のAIサービスへの接続を設定する
oエンドポイントURL、モデル名、認証トークンの設定
oタイムアウトの設定
2.AIプロンプト(Security > AI Classification > AI Prompts)
o一意の名前を持つプロンプトを作成する(Sieveルールで参照される)
o設定済みのAIモデルにプロンプトを関連付ける
oメッセージ変数でプロンプトテンプレートを定義する
o応答解析の構成
Sieveテストで指定するプロンプト名は、構成済みのAIプロンプトの名前と完全に一致する必要があります。
例
フィッシング検知
巧妙なフィッシングを検出して隔離します:
require "vnd.mdaemon.ai";
if vnd.mdaemon.ai.prompt :is "PhishingCheck" "YES" {
quarantine "AI detected potential phishing attempt";
}
ワイルドカードによるコンテンツ分類
メッセージをカテゴリ別に分類し、適切なフォルダにファイルします:
require ["vnd.mdaemon.ai", "fileinto"];
if vnd.mdaemon.ai.prompt :matches "CategoryClassifier" "SPAM*" {
fileinto "Junk";
} elsif vnd.mdaemon.ai.prompt :matches "CategoryClassifier" "MARKETING*" {
fileinto "Marketing";
}
優先度検出
緊急メッセージにフラグを立て、すぐに対応できるようにします:
require ["vnd.mdaemon.ai", "imap4flags"];
if vnd.mdaemon.ai.prompt :contains "UrgencyLevel" "HIGH" {
addflag "\\Flagged";
addheader "X-Priority" "1";
}
センチメント分析
AIが検出したセンチメントに基づいてメッセージをルーティングします:
require "vnd.mdaemon.ai";
if vnd.mdaemon.ai.prompt :is "SentimentAnalysis" "NEGATIVE" {
addheader "X-Customer-Sentiment" "Negative";
redirect "customer-support@example.com";
}
コンプライアンスの検出
機密情報が含まれる可能性のあるメッセージを特定します:
require "vnd.mdaemon.ai";
if vnd.mdaemon.ai.prompt :contains "ComplianceCheck" "PII" {
addheader "X-Contains-PII" "Yes";
redirect "compliance@example.com";
}
vnd.mdaemon.display_name_protection
表示名保護では、メッセージ送信者の表示名(Fromヘッダー)が保護対象ユーザーの表示名と類似しているかどうかをテストし、表示名によるなりすまし攻撃の可能性を示します。類似度のしきい値パラメータ(0.0~1.0)は、類似度の感度を制御し、値が高いほど一致度が高くなります。デフォルトは1.0である。送信者の表示名が閾値以上の保護されたユーザー名と一致し、除外されなければ真を、そうでなければ偽を返す。
このテストには2段階の除外チェックが含まれます:
•ドメインレベルの送信者除外リスト:このリスト内の送信者からのメッセージは、類似性に関係なく、表示名詐称としてフラグが立つことはありません。ワイルドカード・パターンがサポートされています(例:*@company.com、user*@domain.com)。このリストは、表示名なりすまし設定の「以下のメールアドレスから送信されたメッセージをチェックしない」で設定します。
•ユーザーごとの個人アドレスリスト:送信者が保護されたユーザーの個人アドレスリストに登録されている場合、テストはその特定の受信者に対してメッセージのフラグを立てません。
構文: vnd.mdaemon.display_name_protection [:nicknames] [threshold]
•DATAイベント以降で有効(メッセージヘッダが利用可能になった後)
•:nicknames (オプション): 指定された場合、ニックネーム/短縮形の検出を有効にします。一般的なファーストネームのバリエーションはマッチとして扱われます (例えば、"Bob Smith" は "Robert Smith" にマッチし、"Matt Jones" は "Matthew Jones" にマッチします)。これは、非公式な名前のバリエーションを使用したなりすましの試みを検出するのに役立ちます。
•threshold (オプション): 類似度のしきい値を表す0.0から1.0の間の10進数値(デフォルト:1.0)。値が高いほど、より近い一致がスプーフィングとみなされます。
例
デフォルトのしきい値を使用して、表示名偽装のメッセージを拒否する:
require "securitygateway";
if vnd.mdaemon.display_name_protection {
reject "Display name spoofing detected";
}
ニックネームの検出を有効にして、インフォーマルな名前のバリエーションをキャッチします:
require "securitygateway";
if vnd.mdaemon.display_name_protection :nicknames "0.85" {
reject "Display name spoofing detected";
}
より厳しいしきい値(0.90)を使用し、拒否する代わりに隔離する:
require "securitygateway";
if vnd.mdaemon.display_name_protection "0.90" {
fileinto "spam";
}
ニックネーム検出機能付きフリーメールを使用する外部送信者に対して、より厳格なポリシーを適用:
require "securitygateway";
if allof (vnd.mdaemon.sender_is_free_email,
vnd.mdaemon.display_name_protection :nicknames "0.85") {
reject "Potential impersonation from free email provider";
}
境界線上のケースに対する警告ヘッダーを追加する:
require "securitygateway";
if vnd.mdaemon.display_name_protection "0.75" {
addheader "X-Possible-Spoofing" "Display name similarity detected";
}
vnd.mdaemon.sender_is_free_email
メッセージ送信者のメールアドレス(Fromヘッダから)がGmail、Yahoo、Hotmail、Outlook、ProtonMailなどのフリーメールプロバイダーのものかどうかをテストする。このテストは、送信者のドメインが既知のフリーメールのプロバイダと一致すれば真を、そうでなければ偽を返します。
構文: vnd.mdaemon.sender_is_free_email
•DATAイベント以降で有効(メッセージ・ヘッダが利用可能になった後)
•引数はありません。
認識されるフリー・メール・プロバイダー
このテストでは、以下の主要なフリー・メール・プロバイダーを認識します:
•Gmail(gmail.com , googlemail.com )
•Yahoo Mail(yahoo.comおよび地域別)
•Outlook/Hotmail(hotmail.com , outlook.com , live.com , msn.com )
•プロトンメール(protonmail.com , proton.me)
•iCloud(icloud.com , me.com , mac.com )
•AOL(aol.com )
•その他多数(GMX、Mail.com、Zoho、Yandex、Mail.ru、FastMail、Tutanotaなど)
例
無料メールプロバイダからのメッセージにフラグを立て、追加レビューを行います:
require "securitygateway";
if vnd.mdaemon.sender_is_free_email {
addheader "X-Free-Email-Provider" "Yes";
}
フリーメールを使用する外部送信者に対して、より厳格なポリシーを適用する:
require "securitygateway";
if allof (vnd.mdaemon.sender_is_free_email,
not vnd.mdaemon.display_name_spoofed "0.90") {
reject "Potential impersonation from free email provider";
}
これらの標準アクションコマンドは、SecurityGatewayによってサポートされます。fileintoおよびrejectコマンドは拡張で、従って、スクリプトで、どちらかのコマンドを使用する場合には、require controlコマンドで、これらを持つ必要があります。SecurityGateway Sieve拡張ページで概説されるSecurityGateway拡張を通して利用可能な多くのその他actionコマンドがあります。
fileinto
fileintoアクションコマンドはオプションの拡張で、使用する任意のスクリプトの始めに、require "fileinto"コントロールコマンドを使用する必要があります。このコマンドは、2つの引数"spam"および"admin"を受け入れます。"spam"はメッセージをユーザー隔離 へ、"admin"は管理隔離へ移動します。
例:
require "fileinto";
if header :contains "from" "Frank Thomas" {
fileinto "spam";
}
discard
この処置は、配信に状況通知を送信することなく確認なしでメッセージ削除します。
例:
if size :over 2M { discard; }
keep
この処置は、デフォルトロケーションにメッセージを保存します。
redirect
メッセージの本文または既存のヘッダを変更することなく、このコマンドは、メッセージを関連した引数で指定されているアドレスにリダイレクトします。このコマンドは:copyという追加の拡張機能に対応しており、メッセージをリダイレクトするのではなく、指定されたアドレスにコピーを送信できます。ここでは指定のアドレスへのコピー送信に加え、追加の処理を行う事ができます。
例:
require "copy";
if header :contains "subject" "Response to XYZ" {
redirect :copy "offers@example.com";
bayes-learn "ham";
}
reject
rejectアクションコマンドは追加の拡張機能であるため、使用するにはスクリプトの始めにrequire "reject"コントロールコマンドを使用する必要があります。このコマンドは、SMTP処理中に5xx応答コードでメッセージを拒否し引数で指定されている任意の短いメッセージを送信します。
require "reject";
if size :over 5M {
reject "No way! This message is too big for me to accept.";
}
vnd.mdaemon.securewebmsg
SecurityGatewayのSecure MessagingWebポータルを使用してメッセージを送信するには、このアクションコマンドを使用します。外部の受信者への送信メッセージを、ポータルを通じて配信される安全なWebメッセージに変換します。SMTP経由で直接メールを送信する代わりに、メッセージはSecurityGatewayのデータベースに保存され、受信者はWebブラウザ経由で安全にメッセージにアクセスするためのリンクが付いた通知メールを受け取ります。このアクションは、セキュアな電子メールインフラを持っていない可能性のある外部当事者との機密通信のためのエンドツーエンドの暗号化と安全な配信を提供します。代表的な用途: データ漏えい防止、機密/機微情報の安全な送信、コンプライアンス要件への対応。
このアクションは、 コンテンツ フィルターと データ漏えい防止 ルール(「安全なWebメッセージとして送信」アクション)、および手動で作成したSieveスクリプトで使用できます 。
構文: vnd.mdaemon.securewebmsg
引数:なし
Requires:セキュリティゲートウェイ
有効なタイミング:メッセージ処理中のいつでも。
動作
このアクションがメッセージに適用された場合:
•このアクションは外部(ローカル以外)の受信者に送信されたメッセージにのみ影響します。ローカルユーザーへのメッセージは通常通り配信されます。
•受信者は、SecurityGatewayのWebポータルからメッセージ全体にアクセスできるセキュアリンクが記載された通知メールを受信する。
•受信者に外部ユーザーアカウントが存在しない場合(ドメインで自動作成が有効になっている場合)、外部ユーザーアカウントが自動的に作成される。
•受信者は、認証(構成に応じて、電子メール認証、パスワード、または多要素認証)を使用して、Webブラウザを介してメッセージにアクセスします。
•メッセージの内容はSecurityGatewayのデータベースに暗号化されて保存され、HTTPSで送信される。
構成要件
このアクションを使用する前に、Secure Message Portalを構成する必要があります:
セキュアメッセージングの有効化- 送信ドメインのセキュアメッセージングを有効にします(設定 / ユーザ > セキュアメッセージング > 設定)。
外部ユーザ設定- 外部ユーザ作成ポリシーおよび認証要件を構成します。
ポータルアクセス- SecurityGatewayウェブポータルが外部受信者からアクセス可能であることを確認する
通知テンプレート- 通知メールテンプレートのカスタマイズ(オプション)
例
require ["securitygateway","reject","fileinto","envelope","body","regex"];
if allof(header :matches "subject" "[Secure Message]*")
{
vnd.mdaemon.securewebmsg;
}
機密キーワードの自動セキュア配信
機密性の高いキーワードを含むメッセージを、セキュアなポータル経由で自動的に送信します:
require "securitygateway";
if header :contains "subject" ["confidential", "private", "sensitive"] {
vnd.mdaemon.securewebmsg;
}
受信者ドメインに基づく安全な配信
セキュアポータルを介して特定の外部ドメインにすべてのメッセージを送信します:
require "securitygateway";
if address :domain :is "to" ["competitor.com", "external-partner.net"] {
vnd.mdaemon.securewebmsg;
}
大きな添付ファイルの安全な配信
メールサイズの制限を避けるために、大きな添付ファイルのあるメッセージにはセキュアポータルを使用します:
require ["securitygateway", "fileinto"];
if size :over 10M {
vnd.mdaemon.securewebmsg;
}
コンプライアンス主導のセキュアな配信
コンテンツ分析と組み合わせることで、規制対象データのセキュアな配信を実現します:
require "securitygateway";
# Send messages containing potential PII via secure portal
if header :contains "X-Contains-PII" "Yes" {
vnd.mdaemon.securewebmsg;
}
特定の送信者に対するセキュアな配信
特定の社内ユーザーからのメッセージに対して、セキュアな配信を強制します:
require "securitygateway";
if address :is "from" ["ceo@example.com", "legal@example.com", "hr@example.com"] {
vnd.mdaemon.securewebmsg;
}
他のアクションとの組み合わせ
セキュアウェブメッセージを他のアクションと組み合わせることができます:
require "securitygateway";
if header :contains "subject" "confidential" {
addheader "X-Sensitive-Content" "Yes";
vnd.mdaemon.securewebmsg;
}
"[SPAM]"を件名に含んでいるメッセージを拒否
require "reject";
if header :contains "subject" "[SPAM]"
{
reject "I don't want your spam";
}
特定のリアルネーム宛のメールを拒否
require ["SecurityGateway","reject"];
if header :contains "to" "Real Name"
{
bayes-learn "spam";
reject "I don't want your spam";
}
カスタムベイジアン自動学習
require ["SecurityGateway","comparator-i;ascii-numeric"];
if allowlisted
{
bayes-learn "ham";
}
elsif anyof(blocklisted,spamtotal :value "gt" :comparator "i;ascii-numeric" "20.0")
{
bayes-learn "spam";
}
クレーリストDNSBLの一致
require "SecurityGateway"];
if not lookup "rblip" "all" {greylist;}
サイズの大きいメール受信時管理者に通知
require ["SecurityGateway"];
if size :over 1M
{
alert text:
To: admin@company.mail
From: postmaster@$RECIPIENTDOMAIN$
Subject: SecurityGateway Content-Filter Message
X-Attach-Msg: No
$RECIPIENT$ received a message larger that 1MB.
.
;
}
"[Secure Message]"から始まる件名のメールをセキュアメッセージとして送信
require ["securitygateway","reject","fileinto","envelope","body","regex"];
if allof(header :matches "subject" "[Secure Message]*")
{
vnd.mdaemon.securewebmsg;
}