侵害された電子メールアカウントからスパムメールを送信し、サーバーからスパムメールを送信してブラックリストに登録する際に問題が発生しました。だから私はamavisでpostfixを設定するためのガイドラインに従いました:
すべて正常に動作しているようですが、送信スパム/ウイルスメールをブロックし、送信者にメールが拒否されたことを通知したいと思います(たとえば、MAILER-DAEMON経由)。これを行う可能性はありますか?私は次の方法しか理解できませんでした:
Aug 25 12:05:35 ns207813 amavis[24728]: (24728-01) Blocked SPAM {NoBounceOpenRelay,Quarantined}, <[email protected]> -> <[email protected]>, quarantine: J/spam-Jfuzg0ScCmKf.gz, Message-ID: <[email protected]>, mail_id: Jfuzg0ScCmKf, Hits: 1004.054, size: 935, 2013 ms
Aug 25 12:19:10 ns207813 amavis[25182]: (25182-01) Passed SPAM {RelayedTaggedInbound,Quarantined}, [217.230.20.223]:65071 [217.230.20.223] <[email protected]> -> <[email protected]>, quarantine: i/spam-iy3rVCiRk8k2.gz, Queue-ID: 5B9D722AAA, Message-ID: <[email protected]>, mail_id: iy3rVCiRk8k2, Hits: 999.001, size: 2663, queued_as: DD67222ABE, 1379 ms
私の現在のamavis設定は次のとおりです。
$sa_spam_subject_tag = '[SPAM] ';
$sa_tag_level_deflt = undef; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 5; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 20; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
また、可能であれば、メールを完全に拒否するのではなく、着信ウイルスをウイルスとしてマークしたいと思います(メールが失われないようにするため)。
ご協力ありがとうございました!
あなたがしたいことは、あなたのサーバーをMSA(すなわち彼らの発信リレー)として使用しているユーザーからのメールをサードパーティから受信したものとは異なるポリシーで扱う必要があります(つまりあなたのメールサーバーがそのMXで動作しているとき役割)。幸いなことに、amavisにはあなたにぴったりのツールがあります。それはポリシーバンクです。
ユーザーのポリシーを定義する方法を見てみましょう。
$policy_bank{'PREQ-SUB'} = {
originating => 1, # indicates client is ours, allows signing
final_spam_destiny => D_DISCARD, # discard spam
final_virus_destiny => D_DISCARD, # discard spam
warnspamsender => 1, # send a warning
forward_method => 'smtp:127.0.0.1:10025', # you probably need to adjust this
smtpd_discard_ehlo_keywords => ['8BITMIME'], # force mail conversion to Q/P
smtpd_greeting_banner => '${helo-name} ${protocol} ${product} SUBMISSION service ready',
spam_admin_maps => ["postmaster\@example.net"], # warn of spam from us
virus_admin_maps => ["postmaster\@example.net"], # warn of viruses from us
};
このポリシーバンクの名前から、メールが送信TCPポート587)を介して配信された場合にトリガーされるプリキューフィルターとしてこれを実行していることはすでに推測できます。これを作成するには構成作業で、送信サービスが受信したメールをポート10028でlocalhostに配信するようにPostfix MTAに指示しました(パブリックMXとして機能する場合、サーバーはメールをポート10024に転送します)。amavisで2つのポートをアクティブにし、PREQ-をバインドします。ポート10028へのSUBポリシー、私はこれらの設定を使用しています:
# policy bank definition
$inet_socket_port = [10024, 10028]; # listen on listed inet tcp ports
$interface_policy{'10028'} = 'PREQ-SUB'; # mail submitted using TLS on submission/smtps port
Postfixに対応するmaster.cfエントリは次のとおりです。
submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt
-o tls_preempt_cipherlist=$submission_tls_preempt_cipherlist
-o smtpd_tls_protocols=$submission_smtpd_tls_protocols
-o smtpd_tls_ciphers=$submission_smtpd_tls_ciphers
-o smtpd_tls_exclude_ciphers=$submission_smtpd_tls_exclude_ciphers
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=$submission_smtpd_recipient_restrictions
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_proxy_filter=127.0.0.1:10028
-o syslog_name=postfix-submission/smtpd
-o receive_override_options=no_header_body_checks
これは実際には、単にamavisにメールを送信するだけではありません。暗号リストなどを設定します(main.cf変数参照に気付くでしょう)。
では、ユーザーがポート587でメールを送信しない場合、またはすべてのユーザーが送信しない場合はどうすればよいでしょうか。さて、あなたは100%確実に土地を離れなければならないでしょう。 amavisはメールの内容を分析し、ヘッダーの存在に基づいて行動することができます。そのようなヘッダーの1つは、smtpd_sasl_authenticated_header = yesを設定した場合にPostfixが追加する認証済みユーザーの名前である可能性があります。次に、amavisにこのヘッダーを操作するように指示できます。
package Amavis::Custom;
use strict;
BEGIN {
import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
import Amavis::Util qw(do_log untaint safe_encode safe_decode);
import Amavis::rfc2821_2822_Tools;
import Amavis::Notify qw(build_mime_entity);
}
sub new {
my($class,$conn,$msginfo) = @_;
my($self) = bless {}, $class;
my $auth_sender = 0;
foreach my $line (@{$msginfo->{'orig_header'}}) {
$line =~ s/\n / /g;
# WARNING: you need to improve this to AT LEAST also match
# for your OWN mail servers name!
$auth_sender = 1 if $line =~ m/^Authenticated sender/i;
}
if ($auth_sender) {
do_log(2, sprintf("Load pre-queue submission policy bank"));
Amavis::load_policy_bank('PREQ-SUBMISSION')
}
return $self;
}
1; # insure a defined return
このコード内の警告を無視しないでください。ヘッダーは簡単に偽造可能であり、他のメールサーバーも「Authenticatedsender」ヘッダーを挿入する可能性があるため、「your-mailserver.example.net。* Authenticatedsender」のようなものによく一致します。 。
最後に、あなたのコメントの1つについて:メールサーバーの実行には多くの時間がかかり、悪用がないか常に監視する必要があります。グローバルな電子メールシステムに参加することになると、「脱獄」カードはありません!