フィルターとしてのMTAとの統合

このセクションの内容

Dr.Web MailDを設定する

MTAを設定する

一部のMTAの設定例

この統合方法では、メールメッセージスキャン用の外部フィルターとしてDr.Web MailDをメールサーバーに直接接続することになります。Milter、Spamd、またはRspamdインターフェースを使用するあらゆるメールサーバー(Exim、Sendmail、Postfixなど)がサポートされています。Postfixメールサーバーを使用する場合、コンポーネントはSMTPモードでも動作します(SMTPモードの動作原理の詳細については、Dr.Web vxCubeとの統合を参照)。

Dr.Web MailDのパラメータを設定する

1. Milter、Spamd、Rspamd経由の接続

お使いのメールサーバーにDr.Web MailDを統合するには、設定ファイルの[MailD]で次のパラメータの値を編集します。

Dr.Web MailDのMTAとの統合パラメータ。まず、使用するインターフェース(MilterSpamdRspamd)を決定し、MTA接続のパラメータと、選択したインターフェースで受信するメールスキャンのパラメータを指定する必要があります。特定のインターフェースを介してMTAとの統合を制御するDr.Web MailDのすべてのパラメータには、その名前にそれぞれのプレフィックス(Milter*Spamd*Rspamd*)が付いています。

1.<interface>Socketは、対応するインターフェースを介してMTAからスキャン済みメールメッセージを取得するためにDr.Web MailDによって使用されるUNIXまたはネットワークソケットです。

2.メールメッセージスキャンの長さとリソース強度を制限するパラメータ(ScanTimeoutHeuristicAnalysisPackerMaxLevelArchiveMaxLevelMailMaxLevelContainerMaxLevelMaxCompressionRatio)。詳細な調整が必要ない場合は、これらのパラメータの値を変更しないでください。

3.メールフィルタリングルールの詳細な設定については、デフォルトのメールスキャン用Luaスクリプトを編集してください。

メールメッセージスキャン中のDr.Web MailDの一般的な動作パラメータ。TemplateContactsパラメータでは、脅威やスパムが検出された場合のメッセージ送信先となるメールサーバー管理者のアドレスを指定します。ReportLanguagesパラメータでは、サービスレポートの生成時に使用する言語を指定します。
RepackPasswordパラメータの値で、再圧縮(repack)時にメールメッセージに追加される、脅威を含む保護されたアーカイブ用のパスワードの生成方法を指定します。これらのパラメータの詳細については、該当するセクションを参照してください。

すべての設定を調整したら、Dr.Web for UNIX Mail Serversを次のコマンドで再起動します。

# drweb-ctl reload

設定デーモンDr.Web ConfigDは、次のコマンドでも再起動できます。

# service drweb-configd restart

Milterを介してMTAとやり取りする場合、Luaスクリプトはメッセージに適用されるアクションを返します。

Spamdを介して対話する場合、Luaスクリプトは、SPAMまたはTHREATという単語を含むreport変数を返します。その結果はMTAの設定(Eximの場合はACLなど)に従って処理され、メッセージが拒否されるか、送信者が警告を受けることになります。

Rspamdを介して対話する場合、Luaスクリプトは、ADD_HEADERまたはREJECTのいずれかの値を持つアクション変数を返します。その結果はMTAの設定(Eximの場合はACLなど)に従って処理され、ヘッダーが結果に追加される(さらに、受信者に送信される)か、または拒否されます。

2. SMTPモードの接続

お使いのメールサーバーにDr.Web MailDを統合するには、設定ファイルの[MailD]セクションで次のパラメータの値を編集します。

1.SmtpSocket - MTAからチェック対象のメールメッセージを取得するためにDr.Web MailDによって使用されるUNIXまたはネットワークソケット。

2.SmtpSenderRelay - 処理済みのメールメッセージを送信するためにDr.Web MailDによって使用されるUNIXまたはネットワークソケット。

3.追加パラメータ(タイムアウト、利用可能な通信プロトコル、デバッグログへの出力)。パラメータにはSmtpプレフィックスが付きます。詳細な調整が必要ない場合は、これらのパラメータの値を変更しないでください。

4.メールフィルタリングルールの詳細な設定については、デフォルトのメールスキャン用Luaスクリプトを編集してください。

すべての設定を調整したら、Dr.Web for UNIX Mail Serversを次のコマンドで再起動します。

# drweb-ctl reload

設定デーモンDr.Web ConfigDは、次のコマンドでも再起動できます。

# service drweb-configd restart

MTAのパラメータを設定する

1. Milter、Spamd、Rspamd経由の接続

MTAとDr.Web MailDの間のインタラクションを有効にするには、メールサーバーの設定を編集します。

1.メールメッセージをスキャンするときにMTAとDr.Web MailDのインタラクションに使用されるインターフェース(MilterSpamdRspamd)を指定します。

2.選択したインターフェースを介してMTAをDr.Web MailDに接続するためのパラメータを指定します(使用するソケットは、Dr.Web MailD設定にある、対応するインターフェースの<interface>Socketパラメータで指定されているものと一致する必要があります)。

3.インタラクションインターフェースを介してメールのスキャン結果を受信した後に、MTAが実行するアクションを指定します。

設定の変更後、MTAを再起動します。

2. SMTPモードの接続

MTAとDr.Web MailDの間のインタラクションを有効にするには、メールサーバーの設定を編集します。

1.Dr.Web MailDにメールメッセージを送信するためのクライアントのパラメータを設定します。

2.Dr.Web MailDによってチェックされたメッセージを送信するためのMTAのパラメータを設定します。

3.指定したソケットを介したDr.Web MailDへのMTA接続のパラメータを設定します。

よく使われるMTAの設定例

以下はMTA Postfix、Sendmail、Exim、CommuniGate Proの典型的な設定の例です。SMTPモードに加えて、MilterSpamdRspamdのインターフェースを介し、メールメッセージの外部フィルターとしてDr.Web MailDを接続します。

以下の例では、<MailD socket><MailD IP address>、および<MailD port>の値を、Dr.Web MailD設定の<interface>Socketパラメータで指定されているDr.Web MailDソケットのパラメータに置き換える必要があります。ここで<interface>は、選択したMTAインターフェースに対応するパラメータの名前にある、またはSmtpSocketパラメータ(SMTPモードの場合)にあるプレフィックスです。SMTPモードではさらに、<Postfix socket>の値を、Dr.Web MailD設定のSmtpSocketRelayパラメータで指定したPostfixソケットの値に置き換える必要があります。

たとえば、Dr.Web MailDがネットワークソケットを使用してMilterインターフェース経由でMTAと統合され、MTAとDr.Web MailDの両方がローカルホスト上で動作し、Dr.Web MailDがポート12345でMilter経由の接続をリッスンする場合、この値は、Dr.Web for UNIX Mail Servers設定ファイルの[MailD]セクションでMilterSocketパラメータとして指定する必要があります。MTA設定では、<MailD socket>変数の値に127.0.0.1:12345を、<MailD IP address>変数のアドレスに127.0.0.1を、<MailD port>変数の値に12345をそれぞれ指定する必要があります。

場合によっては、Dr.Web MailDとの接続のソケットアドレスに、プレフィックス<type>と、MTA設定で使用されるアドレスのタイプ(inetinet6unix)を追加する必要があります。

1. Postfix

Milter

MTA設定ファイルmain.cfに以下の行を追加します。

smtpd_milters = <type>:<MailD socket>
milter_content_timeout = 300s
milter_default_action = tempfail
milter_protocol = 2

smtpd_miltersおよびmilter_protocolパラメータのみが必須です。それ以外のパラメータは省略できます。

 

SMTPモードの場合:

MTA設定ファイルmain.cfに以下の行を追加します。

# Client parameters for sending email messages to MailD to be checked

scan      unix  -       -       n       -       10      smtp

       -o smtp_send_xforward_command=yes

       -o disable_mime_output_conversion=yes

       -o smtp_generic_maps=

 

# MTA parameters for sending messages checked by Dr.Web MailD

<Postfix socket> inet  n       -       n       -       10      smtpd

   -o content_filter=

   -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters

   -o smtpd_helo_restrictions=

   -o smtpd_client_restrictions=

   -o smtpd_sender_restrictions=

   -o smtpd_relay_restrictions=

   -o smtpd_recipient_restrictions=permit_mynetworks,reject

   -o mynetworks=127.0.0.0/8

   -o smtpd_authorized_xforward_hosts=127.0.0.0/8

MTA設定ファイルmain.cfに以下の行を追加します。

content_filter = scan:<MailD socket>

receive_override_options = no_address_mappings

Dr.Web MailDとPostfixのホストが異なる場合、mynetworksauthorized_xforward_hostsの値はDr.Web MailDホストの値に置き換える必要があります。

2. Sendmail

Milter

MTAプロトタイプ設定ファイルsendmail.mcに以下の行を追加します。

INPUT_MAIL_FILTER(`drweb-milter', `S=<MailD socket>, F=T')

サンプルファイルsendmail.mcを変更したら、次のいずれかのコマンドで、このファイルをアクティブな設定ファイルsendmail.cfに変更します。

make -C /etc/mail
sendmailconfig
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

上記のコマンドはすべて、Sendmailの設定ファイルが/etc/mailディレクトリにあることを前提としています。

3. Exim

Spamd

MTA設定ファイルexim.confに以下の行を追加します。

spamd_address = <MailD socket>
acl_smtp_data = acl_check_data
 
acl_check_data:
warn spam  = nobody:true
add_header = X-Spam_score: $spam_score\n\
X-Spam_score_int: $spam_score_int\n\
X-Spam_bar: $spam_bar\n\
X-Spam_report: $spam_report

deny message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if >{$spam_score_int}{10000}{true}{false}}

accept message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if >{$spam_score_int}{1000}{true}{false}}
remove_header = Subject
add_header = Subject: [SPAM] $rh_Subject

Rspamd:

MTA設定ファイルexim.confに以下の行を追加します。

spamd_address = <MailD socket> variant=rspamd
acl_smtp_data = acl_check_data

acl_check_data:
# Add header fields
warn spam  = nobody:true
add_header = X-Spam_score: $spam_score\n\
 X-Spam_score_int: $spam_score_int\n\
 X-Spam_bar: $spam_bar\n\
 X-Spam_report: $spam_report

# Reject the message with proper description if Rspamd filter tells to do so
deny spam = nobody:true
message = ${extract{2}{:}{$spam_action}}
condition = ${if eq{${extract{1}{:}{$spam_action}}}{reject}}

# Accept the message otherwise
accept

Dr.Web MailDとの統合はバージョン4.6(またはそれ以降)のEximで、オプションWITH_CONTENT_SCAN=yesでコンパイルした場合に利用できます。

4. CommuniGate Pro

Rspamd:

1.CommunigateProと連動するには特別なモジュールが必要です。これはDr.Webリポジトリに含まれており、標準のパッケージマネージャーを介してインストールできます。

Debian、Ubuntu、Mintの場合:

# apt-get install drweb-cgp-plugin

Red Hat Enterprise LinuxとCentOSの場合:

# yum install drweb-cgp-plugin

Fedoraの場合:

# dnf install drweb-cgp-plugin

2.モジュールは/opt/drweb.com/share/cgp/にインストールされます。このディレクトリに移動し、ファイルCgpDrweb_AS_AV.pyを次のように実行可能にします。

# cd /opt/drweb.com/share/cgp/
# chmod +x CgpDrweb_AS_AV.py

3.Webインターフェースを使用してCommuniGate Proを設定します。

Setting → General → Helpersに移動します。次のようにモジュールをCommuniGate Proに接続します。

Content Filteringセクションで新しいフィルターを設定し、Enabledに切り替えます。

フィルター名を指定します(例:CgpDrweb_AS_AV)。

Program Pathパラメータで、スクリプトファイルへのパス(GNU/Linuxの場合は/opt/drweb.com/share/cgp/CgpDrweb_AS_AV.py)と、スクリプトを起動するためのオプション(-rはソケットのアドレスとポート、-uまたは--rspamd-unix-socketはUNIXソケットへのパス、--debugはデバッグモードで起動)を指定します。

Helpersを使用できるように、ExpertまたはAdvancedビューモードを有効化します(CommunigatePro設定のPreferences → Interface)。
可能なすべてのオプションのリストを表示するには、次のコマンドを実行します。

# ./CgpDrweb_AS_AV.py --help

変更内容を保存します。

Setting → Mail → Rulesに移動します。

新しいルール名(CgpDrweb_AS_AVなど)を指定し、Add Ruleをクリックします。

Highestルール設定を選択し、変更内容を保存します。

ルール名の右側にあるEditをクリックします。

DataドロップダウンメニューでMessage Sizeを選択し、Operationフィールドでless thanを選択し、Parameterフィールドで40960000を指定します。

ActionフィールドでExternalFilterを選択し、Parameterで、以前に作成したフィルターの名前(この場合はCgpDrweb_AS_AV)を選択します。

変更内容を保存します。

脅威検出レスポンスルールを追加し、その名前(Drweb_threatsなど)を指定して、Add Ruleをクリックします。

ルールのプライオリティー5を指定し、変更内容を保存します。

ルールの右側にあるEditをクリックします。ルールの条件を2回追加します。

·DataドロップダウンリストでHeader Fieldを選択し、Operationフィールドでisを選択し、ParameterフィールドでX-Spam-Action: rejectを指定します。

·DataドロップダウンリストでHeader Fieldを選択し、Operationフィールドでisを選択し、ParameterフィールドでX-Spam-Symbol-1: threat*を指定します。

ActionフィールドでReject withを選択します。Parameterでテキスト(The message contains threat(s)など)を指定します。

変更内容を保存します。

脅威検出レスポンスルールを追加し、その名前(Drweb_spamなど)を指定して、Add Ruleをクリックします。

ルールのプライオリティー5を指定し、変更内容を保存します。

ルールの右側にあるEditをクリックします。ルールの条件を追加します。

·DataドロップダウンメニューでHeader Fieldを選択します。

·Operationフィールドでisを選択します。

·ParameterフィールドでX-Spam-Action: tagを選択します。

ActionフィールドでTag Subjectを選択し、Parameterでヘッダープレフィックス([SPAM]など)を指定します。

変更内容を保存します。

4.以下のファイルのコンテンツをコピーして、hook.luaとして保存します。

--Message scanning procedure,
--transmitted using the Rspamd protocol

function rspamd_hook(ctx)

--Message scanning to detect threats
if ctx.message.has_threat() then
  return {
    score = 900,
    threshold = 100,
    action = "reject",
    symbols = {
      {
        name = "threat",
        score = 900
      }
    }
  }
end

--Message scanning to detect spam
if ctx.message.spam.score > 100 then
  return {
    score = ctx.message.spam.score,
    threshold = 100,
    action = "tag",
    symbols = {
      {
        name = "spam",
        score = ctx.message.spam.score
      }
    }
  }
end

return {
   score = ctx.message.spam.score,
   threshold = 100,
   action = "accept",
   symbols = {
    {
      name = "The message is clean",
      score = 0
    }
   }
  }
end

5.次のコマンドを実行します。

# drweb-ctl cfset MailD.RspamdHttpSocket <socket address>:<port>
# drweb-ctl cfset MailD.RspamdHook <path to hook>

フックのコード(hook.lua)を編集する場合は、変更後に次のようにDr.Web ConfigDを再起動する必要があります。

# service drweb-configd restart