Немного конфигурации для Postfix чтобы уверенно начать бороться с спамом
Это важно
В файле main.cf должно быть следующее
Опубликовано 2012-03-07 23:13:00
Находится в поиске с названиями
Я использую для проверки поля helo в Postfix файл helo.regexp где описано по каким правилам кого пускать, кого нет.
Вот небольшая часть примера
; вот к примеру как я закрыл доступ доменам из зоны kiev.ua которые являются open relay ; сюда попали epro.kiev.ua, ilab.kiev.ua, sky-net.kiev.ua, get-up.kiev.ua, host-ua.kiev.ua ; () использую для набора, | использую как конструкцию разделителя набора ; \. так экранирую точку в имени домена ; ^ указатель на начало строки и $ указатель на окончание строки
/^(epro|ilab|sky-net|get-up|host-ua)\.kiev\.ua$/ 550 BAN Spammer ; и еще пример против тех, кто в поле helo пишет helo=[< ip.add.re.ss >] /^\<\[([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\]\>$/ 550 IP in helo not acceptable [2]
Опубликовано 2012-03-06 14:12:00
Находится в поиске с названиями
Рабочий пример для пограничного почтового сервера.
--> main.cf
// Данным куском сказано как обрабатывать запросы HELO
// и в каком порядке
smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:/etc/postfix/helo.regexp, reject_non_fqdn_hostname, reject_unknown_hostname, reject_invalid_hostname, permit
// Другой пример // поменяем местами строки
smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname, reject_unknown_hostname, reject_invalid_hostname, check_helo_access regexp:/etc/postfix/helo.regexp, permit
В первом случае, если Вам надо будет добавить в "белый" список некий узел, который нельзя определить то все пройдет гладко, если вы его опишите как
/^vasya.pupkin$/ OK
И все красиво отработает, тоесть письмо полученной с таким HELO попадет к полчателю.
А вот второй пример, где поменяли местами правила, до вашего разрешения проверка не дойдет и письмо не будет получено, ибо вначале перед проверкой файла с правилами стоят четкие указания отбрасывать всех, кто не соответствует FQDN. А именно reject_non_fqdn_hostname. Здесь оно будет убито и до файла с правилами не добежит.
Опубликовано 2011-11-16 18:42:00
Находится в поиске с названиями
-
Postfix Performance Tuning
Postfix: документация postfix, ссылки, обмен опытом
Настройка почтового сервера на базе Postfix
Установка и настройка Postfix
Что нам для этого надо.
1. Установленный Potfix
2. Прямые руки
3. файлы конфигурации ( master.cf, virtual, transport )
4. Скрипт автореплая, файл с текстом автореплая, UID пользователя из под которого стартует Postfix
Это код файла reply.pl
#!/usr/bin/perl -w
#
# inforeply.pl - Automatic email reply.
#
# All messages are logged to your mail log. Check the
# log after executing the script to see the results.
#
# Set $UID to the uid of the process that runs the script.
# Check the entry in master.cf that calls this script. Use
# the uid of the account you assign to the user= attribute.
# If you want to test the script from the command line,
# set $UID to your own uid.
#
# Set $ENV_FROM to the envelope FROM address you want on
# outgoing replies. By default it's blank, which will
# use the NULL sender address <>. You can set it to an
# address to receive bounces, but make sure you don't set
# it to the same address that invokes the program, or
# you'll create a mail loop.
#
# Point $INFOFILE to a text file that contains the text of
# the outgoing reply. Include any headers you want in the
# message such as Subject: and From:. The To: header is
# set automatically based on the $ENV_FROM address. Make
# sure you have an empty line between your headers and the
# body of the message.
#
# If necessary, change the path to sendmail in $MAILBIN.
#
# @MAILOPTS contains options to sendmail. Make changes if
# necessary. The default options should work in most
# situations.
#
# The calls to syslog require that your Perl installation
# converted the necessary header files. See h2ph in your
# Perl distribution.
#
require 5.004; # for setlogsock in Sys::Syslog module
use strict;
use Sys::Syslog qw(:DEFAULT setlogsock);
#
# Config options. Set these according to your needs.
#
my $UID = 91;
my $ENV_FROM = "Reply from My Company Name";
my $INFOFILE = '/etc/postfix/'.$ARGV[1].'.msg';
my $MAILBIN = "/usr/sbin/sendmail";
my @MAILOPTS = ("-oi", "-tr", "$ENV_FROM");
my $SELF = "reply.pl";
#
# end of config options
my $EX_TEMPFAIL = 75;
my $EX_UNAVAILABLE = 69;
my $EX_OK = 0;
my $sender;
my $euid = $>;
$SIG{PIPE} = \&PipeHandler;
$ENV{PATH} = "/bin:/usr/bin:/sbin:/usr/sbin";
setlogsock('unix');
openlog($SELF, 'ndelay,pid', 'user');
#
# Check our environment.
#
if ( $euid != $UID ) {
syslog('mail|err',"error: invalid uid: $> (expecting: $UID)");
exit($EX_TEMPFAIL);
}
if ( @ARGV != 2 ) {
syslog('mail|err',"error: invalid invocation (expecting 1 argument)");
exit($EX_TEMPFAIL);
} else {
$sender = $ARGV[0];
if ( $sender =~ /([\w\-.%]+\@[\w.-]+)/ ) {
# scrub address
$sender = ;
} else {
syslog('mail|err',"error: Illegal sender address");
exit($EX_UNAVAILABLE);
}
}
if (! -x $MAILBIN ) {
syslog('mail|err', "error: $MAILBIN not found or not executable");
exit($EX_TEMPFAIL);
}
if (! -f $INFOFILE ) {
syslog('mail|err', "error: $INFOFILE not found");
exit($EX_TEMPFAIL);
}
#
# Check sender exceptions.
#
if ($sender eq "" || $sender =~ /^owner-|-(request|owner)\@|^(mailer-daemon|postmaster)\@/i) {
exit($EX_OK);
}
#
# Check message contents for Precedence header.
#
while ( ) {
last if (/^$/);
exit($EX_OK) if (/^precedence:\s+(bulk|list|junk)/i);
}
#
# Open info file.
#
if (! open(INFO, "<$INFOFILE") ) {
syslog('mail|err',"error: can't open $INFOFILE: %m");
exit($EX_TEMPFAIL);
}
#
# Open pipe to mailer.
#
my $pid = open(MAIL, "|-") || exec("$MAILBIN", @MAILOPTS);
#
# Send reply.
#
print MAIL "To: $sender\n";
print MAIL while ();
if (! close(MAIL) ) {
syslog('mail|err',"error: failure invoking $MAILBIN: %m");
exit($EX_UNAVAILABLE);
}
close(INFO);
syslog('mail|info',"sent reply to $sender");
exit($EX_OK);
sub PipeHandler {
syslog('mail|err',"error: broken pipe to mailer");
}
Далее, virtual
У меня ситуация была немного нестандартная. Данный сервер был релеем внутрь сети. Там его встречал другой почтовик. Были адресаты которые приходили на релей, но жили на внутреннем почтовике. Более того, эти адресаты были общими папками, а не конкретными пользователями. Внутренний почтовик на IceWarp. Соответственно, не найдя как там настроить autoreply для общих папок, я занялся придумыванием автореплая на входе на релее.
Вот что получилось
file: virtal
it@company.com it@company.com, reply@reply.company.com
Приходящее письмо на it@company.com кидается на it@company.com и копия летит на reply@reply.company.com
reply.company.com - это несуществующий домен, потому сделал в файл transport следующую запись
file: transport
reply.company.com reply:
Итак получил транспорт для несуществующего домена который все что приходит на него, отправляет на фильтр в master.cf с именем reply
Надеюсь пока не сложно
И вот что в файле master.cf
reply unix - n n - - pipe flags= user=mailman argv=/etc/postfix/reply.pl ${sender} autoreply
Коротко скажу так .. скрипту /etc/postfix/reply.pl скармливается отправитель и имя файла, которое будет отправлено оправителю.
Далее
postmap virtual
postmap transport
postfix reload
Опубликовано 2011-07-26 19:00:00
Находится в поиске с названиями