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

この統合方法では、メールスキャン用の外部フィルターとしてDr.Web MailDをメールサーバーに直接接続することを想定しています。MilterSpamdRspamdインターフェースを使用する全てのメールサーバー(EximSendmailPostfixなど)に接続できます。

このセクションの内容:

Dr.Web MailDを設定する

MTAを設定する

一部のMTAの設定例

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

Dr.Web MailDとメールサーバーを統合するには、設定ファイル内のDr.Web MailDの設定セクション([MailD]セクション)で現在のパラメータ値を確認し、必要に応じて変更する必要があります。

1.1)メールメッセージスキャン時のDr.Web MailDの一般的な動作パラメータ

TemplateContactsReportLanguagesパラメータを使用して、脅威やスパムを含むメールメッセージをリパックするときのメール生成のパラメータを指定します。RepackPasswordパラメータ値として、リパック後にメールメッセージに追加される脅威を含む保護されたアーカイブのパスワード生成方法を指定します(デフォルトではNone値が指定され、パスワードによるアーカイブはパスワードで保護されていませんが、推奨しません)。

1.2)Dr.Web MailDとMTAの統合パラメータ

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

Milter* - Milterインターフェースの場合。

Spamd* - Spamdインターフェースの場合。

Rspamd* - Rspamdインターフェースの場合。

次のパラメータの値を指定する必要があります(ここで、<interface>は、MTAインターフェースとの統合のために選択したインターフェースに対応するパラメータ名のプレフィックスです)。

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

2.メールメッセージスキャンの長さとリソース強度を制限するパラメータ(ScanTimeoutHeuristicAnalysisPackerMaxLevelArchiveMaxLevelMailMaxLevelContainerMaxLevelMaxCompressionRatio)。きめ細かい設定が不要な場合は、パラメータデータの値をデフォルトの状態しておくことを推奨します。

3.メールのフィルタールールを(条件に応じて)より細かく設定するには、Luaでデフォルトのメールスキャン手順のテキストを編集します。

すべての設定を調整したら、Dr.Web for UNIX Mail Serversを再起動します(コマンドdrweb-ctl reloadを使用します)。設定デーモンDr.Web ConfigDを再起動することもできます(service drweb-configd restartコマンドを使用します)。

Dr.Web MailDとMTAとのインタラクションにSpamd/Rspamdインターフェースが使用されている場合、このインタラクションでは、Dr.Web MailDは、メールメッセージがクリーンかスパムとして分類されるかをMTAに通知するアクションしか実行できません。メールメッセージが管理者によって設定された制限に違反している場合、またはメールメッセージや不要なコンテンツに何らかの脅威がある場合、「メールメッセージはスパムです」の判定がMTAに送信されます。メールメッセージの処理を目的としたすべてのアクション(ヘッダーの追加、メールメッセージの拒否、受信者への配信など)は、MTA側の設定で定義する必要があります。

メールメッセージが拒否された理由、MTAがメールメッセージに適用する必要があるアクションをMTAに返すために、テキスト変数(SpamdにはreportRspamdにはaction)が使用されます。これはMTA設定で処理できる、LUAメッセージ処理手順によって返されます(たとえば、EximではACL)。

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

MTAとDr.Web MailDの間のインタラクションを有効にするには、MTAによって処理されたメールをスキャンする外部フィルターとしてDr.Web for UNIX Mail Serversを使用できるようにメールサーバーの設定を編集します。

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

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

3.インタラクションインターフェース経由でのメールスキャン結果の受信に対応するMTAの動作を設定します。

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

3)一部のMTAの設定例

以下は、Dr.Web MailDをメールメッセージの外部フィルターとしてMilterSpamdRspamdインターフェース経由でPostfixSendmailEximCommuniGate Proに接続する場合のこれらのMTAの設定例です

以下の例では、<MailD socket><MailD IP address><MailD port>の値は、Dr.Web MailDが待ち受け(リッスン)しているソケット(Dr.Web MailD設定の<interface>Socketパラメータで示されています。ここで、<interface>は、MTAと統合された、選択されたインターフェースに対応するパラメータの名前のプレフィックスです)に置き換える必要があります。

たとえば、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パラメータのみが必須であることに注意してください。それ以外のパラメータは省略できます。

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:
#ヘッダーフィールドを追加します
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

上記の設定例では、オプションWITH_CONTENT_SCAN=yesでビルドされたバージョン4.6(またはそれ以降)のEximが使用されることを想定しています。Spamdの設定では、Dr.Web MailDがSPAMまたはTHREATという単語を含むメッセージ(report)を返すことを想定しています。そのため、Eximwarnまたはdenyのアクションをメールメッセージに適用します。Rspamdの設定では、Dr.Web MailDがアクションADD_HEADERまたはアクションREJECT:<message>を返すことを想定しています。そのため、Eximwarnまたはdenyアクションをメールメッセージに適用します。

4.CommuniGate Pro

Rspamd:

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

# apt-get install drweb-cgp-plugin

    RedHatおよび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を設定します。

Settings → 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を使用できるように、エキスパートまたはアドバンスビューモードを有効化します(CommunigatePro設定の 環境設定インターフェース)。可能なすべてのオプションのリストを表示するには、次のコマンドを実行します。

# ./CgpDrweb_AS_AV.py --help

変更内容を保存します。

Settings → 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回追加します。

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

oDataドロップダウンリストで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をクリックします。ルールの条件を追加します。ドロップダウンメニューDataHeader Fieldを選択します。フィールドOperationisを選択し、フィールドParameterX-Spam-Action: tagを選択します。フィールドActionTag Subjectを選択し、Parameterでヘッダープレフィックス([SPAM]など)を指定します。変更内容を保存します。

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

--メッセージスキャン手順、
--Rspamdプロトコルを使用して送信

function rspamd_hook(ctx)

--脅威を検出するためのメッセージスキャン
if ctx.message.has_threat() then
  return {
    score = 900,
    threshold = 100,
    action = "reject",
    symbols = {
      {
        name = "threat",
        score = 900
      }
    }
  }
end

-スパムを検出するためのメッセージスキャン
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>

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

# service drweb-configd restart