いくつかの基準に基づいてpostfixサーバーに送信された電子メールを拒否したいと思います。特にロシアのメールアドレス(またはキリル文字が含まれていますがより難しいようです)から、2人の特定の受信者に送信される電子メールをブロックしたいと思います。他人に記録されます。)
私はこれが簡単でなければならないと思います。特に、「mail from」アドレスと「rcpt to」アドレスの両方がsmtpネゴシエーションの先頭に提供されるためです。しかし、postfixを使ってこれを行う方法を見つけることができず、追加のパッケージ(milter?)が必要かどうかはわかりません。
答え1
1つ追加制限レベル。たとえば、
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/recipient_access
smtpd_restriction_classes = no_russians
no_russians = check_sender_access pcre:/etc/postfix/no_russians
/etc/postfix/recipient_access:
[email protected] no_russians
[email protected] no_russians
/etc/postfix/no_russians:
/\.ru$/ REJECT
答え2
デフォルトではコピー/貼り付けhttps://sources.debian.org/src/postfix/3.6.4-1/examples/smtpd-policy/greylist.pl/#L257そして、進行しながら調整するために単純なスクリプトno_ru.pl
としてcheck_policy_service
実装できる単純なPerlスクリプトがあります。バラよりhttp://www.postfix.org/SMTPD_POLICY_README.html接続する方法を学びます。
未試験のYMMVら。次use
のようないくつかの機能が必要な場合や初期化することができますsyslog
。まず、コマンドラインで試してみてください。
# Unbuffer standard output.
#
select((select(STDOUT), $| = 1)[0]);
#
# Receive a bunch of attributes, evaluate the policy, send the result.
#
%attr = ();
$ru_sender = $ru_rcpt = 0;
while (<STDIN>) {
if (/^\s*sender=.*\.ru\n/i) {
$ru_sender = 1;
} elsif (/^\s*recipient=.*\.ru$/i) {
$ru_rcpt = 1;
} elsif ($_ eq "\n") {
if ($verbose) {
syslog $syslog_priority, "ru_sender %i, ru_rcpt %i", $ru_sender, $ru_rcpt;
}
$action = ($ru_sender && $ru_rcpt) ? "reject" : "dunno";
syslog $syslog_priority, "Action: %s", $action if $verbose;
print STDOUT "action=$action\n\n";
%attr = ();
} else {
chop;
syslog $syslog_priority, "warning: ignoring garbage: %.100s", $_;
}
}
答え3
ビューsmtpd_recipient_restrictions
とsmtpd_sender_restrictions
コマンド。これにより、必要なフィルタを含むハッシュマップを設定できます。
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access
/etc/postfix/sender_access:
.ru REJECT
[email protected] REJECT
また、見ることができますhttp://www.postfix.org/ADDRESS_VERIFICATION_README.htmlそしてhttp://www.postfix.org/SMTPD_ACCESS_README.html