Debian に MIMEDefang をインストールするには?

Debian に MIMEDefang をインストールするには?

Debian StretchにMIMEDefangをインストールしようとしていますが、デフォルトでは機能せず、利用可能なガイドが見つかりませんでした。

apt install mimedefang以下を追加した後/etc/postfix/main.cf

smtpd_milters = unix:/var/spool/MIMEDefang/mimedefang.sock
milter_default_action = accept

サフィックスを再ロードして、service mimedefang status次のように話します。ポジティブそして走る

コピーして/etc/mimedefang-filter実行/etc/mail/mimedefang-filter可能にしても…

しかし、私はまだこれを得ます/var/log/mail.log

postfix/smtpd[29832]: warning: connect to Milter service unix:/var/spool/MIMEDefang/mimedefang.sock: No such file or directory

それでもファイルは/var/spool/MIMEDefang/mimedefang.sock存在します。

sendmail以前はすでにインストールされています。

これをどのようにインストールして有効にしますか?

答え1

MIMEDefangメーリングリストのBenoît Panizzonの助けを借りて、私はソケットがローカルまたはリモートホストの指定されたTCPポートでリッスンするためにリスナーの代わりにinetソケットを使用する必要があることを発見しました。unixしたがって、Debian / UbuntuのMIMEDefangの設定プロセスは次のようになります。

  1. MIMEDefangをインストールします。apt install mimedefang
  2. /etc/default/mimedefangコレクションから(必要に応じて別のポートを使用):SOCKET=inet:33333
  3. 次に追加/etc/postfic/main.cf: smtpd_milters = inet:localhost:33333 milter_default_action = accept
  4. /etc/mimedefang-filterにコピーし/etc/mail/mimedefang-filter、必要に応じて修正します(実行可能にする必要はありません)。
  5. PostfixおよびMIMEDefangサービスを再ロードします。sudo systemctl reload postfix mimedefang

MIMEDefangは変更されるたびに再ロードする必要がありますmimedefang-filter


ちなみに、このデモではMIMEDefangをよく理解することができます。https://www.mimedefang.org/static/mimedefang-lisa04.pdf

実行される実際のPerlスクリプトは/usr/bin/mimedefang.pl次の内容にありますmimedefang-filter


また、フィルタリングロジックを作成できるようにしたいです。PHPPerlの代わりに、次の解決策を思いついた。たとえば、これを最後に追加します。filter_begin機能mimedefang-filter:

%passToPhp = ("Sender", $Sender, "Recipients", \@Recipients, "Subject", $Subject, "RelayAddr", $RelayAddr, "RelayHostname", $RelayHostname, "Helo", $Helo, "QueueID", $QueueID, "MessageID", $MessageID);

my $cmd = "/path/to/your/email-filter.php";
$cmd .= " " . encode_base64(encode_json(\%passToPhp), '');
my $phpOutput = `$cmd`;

md_syslog('info', "PHP filter output: $phpOutput");  #causes entry in /var/log/mail.log
if ($phpOutput eq "bounce") {
    action_bounce("We dont want this particular message.");
} elsif ($phpOutput eq "discard") {
    action_discard();
}

次に、次のコードを使用してemail-filter.php始めます。

#!/usr/bin/php
<?php
// runs as user "defang". This file must have execute permissions.

// Get variables from mimedefang that we passed along, headers, raw message, and extra information from mimedefang
$arguments = ($argv[1] ? base64_decode($argv[1]) : null);
if ($arguments) $arguments = json_decode($arguments, true);
$headers = file_get_contents('HEADERS');
$raw_message = file_get_contents('INPUTMSG');
$commands = file_get_contents('COMMANDS');

// Get all the MIME parts into an array
$mimeparts = [];
chdir('./Work');
foreach (glob('*') as $mimepart_file) {
    if (is_dir($file)) continue;
    $mimeparts[$mimepart_file] = file_get_contents($mimepart_file);
}

// Do all your logic here...

if ($someLogic == 'spam') {
    echo 'discard';
    // echo 'bounce';  //use this line if you want to have a bounce message sent back to sender (but you probably don't want that for spam)
}

/var/log/mail.logすべてが正しく実行されていることを監視してください。

関連情報