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の設定プロセスは次のようになります。
- MIMEDefangをインストールします。
apt install mimedefang
/etc/default/mimedefang
コレクションから(必要に応じて別のポートを使用):SOCKET=inet:33333
- 次に追加
/etc/postfic/main.cf
:smtpd_milters = inet:localhost:33333 milter_default_action = accept
/etc/mimedefang-filter
にコピーし/etc/mail/mimedefang-filter
、必要に応じて修正します(実行可能にする必要はありません)。- 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
すべてが正しく実行されていることを監視してください。