Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> Почтовый сервер по шагам ч.2

Почтовый сервер по шагам ч.2

Автор: KontraBass.


Продолжаем.

Шаг 13 Postfix aliases

Зачем? Появится возможность иметь несколько адресов для одного почтового ящика.
Создадим дополнительную таблицу, наколбасим файлик:
/root/workmail/addaliasestable.sql
use mail;
create table aliases ( 
alias VARCHAR(32) NOT NULL  KEY, 
email VARCHAR(32), 
FOREIGN KEY (email) REFERENCES users(email) ON DELETE CASCADE 
ON UPDATE CASCADE 
) ENGINE = InnoDB; 

# заполним первоначальным значением
insert into aliases value ( 'test1@tstdomain.ru', 'test@tstdomain.ru' ); 

KEY для alias обеспечит уникальность алиасов.
зависимость от значений в таблице users - невозможность создания алиаса для несуществующего ящика.

зальем это добро в мускуль
mysql < /root/workmail/addaliasestable.sql

main.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/virtual/aliases.sql 
virtual_alias_recursion_limit = 3



ограничим на всякий ..  recursion_limit,

набросаем сам файл
/usr/local/etc/postfix/virtual/aliases.sql
unix:file=/tmp/mysql.sock 
user = mailreader 
password = password 
dbname = mail 
table = aliases 
select_field = email 
where_field = alias 

tail -f /var/log/maillog

 - в параллельной консоли, и
/usr/local/etc/postfix restart

проверяем отсылку почты на test1@tstdomain.ru

Шаг 14 Postfix group

Зачем? - появится возможность слать на адреса группы - шлем на один адрес - приходит всем членам группового адреса.
Создадим дополнительную таблицу, наколбасим файлик:
/root/workmail/addgroupstable.sql
use mail;
create table groups ( 
groupname VARCHAR(32) , 
email VARCHAR(32), 
FOREIGN KEY (email) REFERENCES users(email) ON DELETE CASCADE
 ON UPDATE CASCADE
) ENGINE = InnoDB; 

Значения в поле email зависят от таблицы users, тоесть мы не сможем иметь несуществующего получателя, и получать отлупы. Зальем это добро в мускуль
mysql < /root/workmail/addgroupstable.sql

Расширим немного таблицу алиасов, добавив еще одну карту поиска.
main.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/virtual/aliases.sql, 
mysql:/usr/local/etc/postfix/virtual/groups.sql
# выше одна строка

ну и сам файлик запроса
набросаем сам файл
/usr/local/etc/postfix/virtual/groups.sql
unix:file=/tmp/mysql.sock 
user = mailreader 
password = password 
dbname = mail 
table = groups
select_field = email 
where_field = groupname

Нужно залить пару значений и проверить. Позже прикрутим ограничение на отсылку на/с этих адресов.

Шаг 15 Postfix BCC

Скрытые копии. Зачем? Можно подключить начальнику - параноику, или себе для сортировки спам/не спам.. На этот адрес буде приходить ВСЯ прходящая через сервер почта.

main.cf
always_bcc = allusermail@tstdomain.ru

Добавим такого пользователя
mysql
use mail;
insert into users value ( 'allusermail@tstdomain.ru' 'allusermail', '10', 'secure' );
\q

Выборочные скрытые копии - более полезная опция. К примеру, отдел менеджеров, и их руководителю нужно контролировать переписку подчиненных. Или один из "менеджеров" заболел, и начальник сразу несется к Вам настроить себе его почту, или сделать "временный" alias, ведь там такая важная переписка!! клиента потерять низзя! Приступим:

main.cf
recipient_bcc_maps = mysql:/usr/local/etc/postfix/virtual/bcc.sql 
sender_bcc_maps = mysql:/usr/local/etc/postfix/virtual/bcc.sql

я указал один и тот же файл - и входящие и иходящие для определенных адресов будут копироваться
/usr/local/etc/postfix/virtual/bcc.sql
unix:file=/tmp/mysql.sock 
user = mailreader 
password = password 
dbname = mail 
table = bcc 
select_field = bcc_email 
where_field = email 
#additional_conditions = and act = '1' 

создадим еще одну табличку, значения зависят от users, - невозможно создать недействительную связку, и зальем в mysql
/root/workmail/addbcctable.sql
use mail;
create table bcc ( 
email VARCHAR(32), 
bcc_email VARCHAR(32), 
FOREIGN KEY (email) REFERENCES users(email) ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (bcc_email) REFERENCES users(email) ON DELETE CASCADE 
ON UPDATE CASCADE, 
PRIMARY KEY (email, bcc_email) 
) ENGINE = InnoDB; 
# важно что оба поля требуют действительных значений в users
#  и при удалении пользователя - очищаются
#  введем тестовое значение
insert into bcc value ( 'test@tstdomain.ru', 'mailadmin@tstdomain.ru' );

mysql < /root/workmail/addbcctable.sql
/usr/local/etc/postfix restart

Проверяем.

Шаг 16 Postfix submission

Ранее для приема почты почтовым сервером настраивался один порт, TCP 25, сейчас новый тренд - раздельная настройка для почты сервер-сервер, и для своих клиентов с аутентификацией TCP 587.
Приступим, надо раскомментить:
master.cf
submission inet n       -       n       -       -       smtpd 
  -o syslog_name=postfix/submission 

/usr/local/etc/rc.d/postfix restart
netstat -na | grep LIST
tcp4 0 0 *.587 *.* LISTEN

типа дополнительный smtpd поднялся, нужно будет сделать раздельные настройки для этих сервисов.

Шаг 17 Postfix and Dovecot SASL

Сейчас у меня в main.cf параметр mynetworks_style имеет значение subnet, значит для всех клиентов в той же подсети что и сервер, мы будем принимать почту для доставки в чужие домены. Если клиент подключится к нашему серверу из другой подсети(инет) и попытается передать сообщение для получателя, к примеру, **@yandex.ru, то получит отказ в ретрансляции. Однако для наших учетных записей это позволить необходимо. Следовательно требуется механизм опознавания «своих».
У Dovecot уже есть такой механизм, и более того, мы его уже настроили. Postfix может им воспользоваться. Для начала из клиента попробуем отправить сообщение для произвольного адресата … test@yandex.ru. Сервер нам доверяет как пользователю доверенной подсети (mynetworks_style) и принимает сообщение без лишних вопросов для попытки доставки. Изменим это поведение.
cd /usr/local/etc/postfix/

main.cf
mynetworks_style = host

/usr/local/etc/rc.d/postfix reload

Проверим. Опять попытаемся отправить сообщение для  test@yandex.ru. Результат — сервер отвечает отказом. Все правильно, теперь он будет принимать почту для релея в чужие домены только от себя самого. Разрешим это еще для наших виртуальных пользователей. Отметим , что почта для наших виртуальных пользователей, отправляется без ограничений, так как этот сервер конечная точка для нее.

Для справки, с другого хоста
telnet mail.tstdomain.local 25
220 mail.tstdomain.ru ESMTP Postfix
ehlo test
250-mail.tstdomain.ru
250-OK
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

здесь видно что поддерживает сервер, на порту 578 такая же ситуация.

Аутентификация при отправке нам нужна только для своих пользователей, настроим ее только на порту 578:
cd /usr/local/etc/dovecot/conf.d

10-master.conf
  # Postfix smtp-auth 
  unix_listener /var/spool/postfix/private/auth { 
    mode = 0660
    user = postfix 
    group = postfix 
  } 

cd /usr/local/etc/postfix/

main.cf
smtpd_sasl_type = dovecot 
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_path = /var/spool/postfix/private/auth 
broken_sasl_auth_clients = no 

smtpd_sasl_security_options возможны варианты
  noanonymous —   запретить аутентификацию как аноним.
  noplaintext —   запретить механизмы передающие пароль и имя пользователя
                   открытым тестом.
  nodictionary -  не использовать механизмы, которые являются уязвимыми для
                   атак по словарю.
  forward_secrecy—новый секрет для каждой сессии (нарушение одной сессии
                   не нарушает предыдущих сессий).
  mutual_auth — используется только с механизмами аутентифицирующими и
                   клиент и сервер.

Опция broken_sasl_auth_clients = yes позволяет Postfix повторить объявление AUTH в диалоге SMTP в форме, понятной некоторым кривым клиентам. Нужно включить для  Outlook, вплоть до версии 2003 и Outlook Express до версии 6. (Не забыть про механизм LOGIN вместе с ним)  Эта опция не помешает другим клиентам.

Включим эту возможность только на submission
master.cf
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
 # -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes

Посмотрим на некоторые SMTP ограничения postfix
grep restrictions
smtpd_client_restrictions =
smtpd_data_restrictions =
smtpd_end_of_data_restrictions =
smtpd_etrn_restrictions =
smtpd_helo_restrictions =
smtpd_recipient_restrictions =
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sender_restrictions =

видим что если аутентифицируемся, то сможем пересылать свою почту куда угодно.

/usr/local/etc/rc.d/dovecot restart
/usr/local/etc/rc.d/postfix restart

смотрим что изменилось

telnet mail.tstdomain.local 578
220 mail.tstdomain.ru ESMTP Postfix
ehlo test
250-mail.tstdomain.ru
250-OK
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

появилась возможность 250-AUTH PLAIN, на порту 25 такой возможности нет.

Проверяем, отправим сообщение для  test@yandex.ru, на клиенте нужно поправить параметры smtp сервера для этой учетной записи. Сервер потребует аутентификации и попытается доставить сообщение.

dovecot вроде больше трогать не будем. Впереди postfix.

Шаг 18 Postfix TLS

Аутентификацию настроили, но пароли передаются открытым текстом. Исправим:

cd /usr/local/etc/postfix
openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 3650

имеет смысл правильно задать
Common Name (e.g. server FQDN or YOUR name) []:mail.tstdomain.ru
Email Address []:postmaster@tstdomain.ru
Common Name :mail.tstdomain.ru
Email Address :postmaster@tstdomain.ru
(знаю что в dovecot мы уже чего-то там такое-же делали, статья не об этом)
ls -al smtpd.pem

main.cf
smtpd_tls_cert_file = /usr/local/etc/postfix/smtpd.pem 
smtpd_tls_loglevel = 3

скажем, что TLS использовать необxодимо (принудительно-encrypt):
master.cf
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes

/usr/local/etc/rc.d/postfix restart

Смотрим
telnet mail.tstdomain.local 587
220 mail.tstdomain.ru ESMTP Postfix
ehlo test
250-mail.tstdomain.ru
250-OK
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Появилась возможность 250-STARTTLS и пропала 250-AUTH PLAIN
Попробуем отправить письмо ... Меняем настройки, проверяем.


Включим возможность использования TLS при переправке почты от нас.
main.cf
smtp_tls_security_level = encrypt
smtp_tls_loglevel = 3

/usr/local/etc/rc.d/postfix restart

Как проверить? Отправить письмо test@tstdomain.ru -> test@yandex.ru.

смотрим чего там в логах:
Dec 10 17:18:45 mail postfix/smtp[2463]: mx.yandex.ru[93.158.134.89]:25: subject_CN=mx.yandex.ru, issuer_CN=Certum Level IV CA, fingerprint=28:B6:06:CE:92:B7:EE:67:6B:D5:8F:BA:00:F2:B8:E8, pkey_fingerprint=48:2C:D6:B7:E7:05:4D:2E:0F:7E:AC:19:91:DE:DD:C4
Dec 10 17:18:45 mail postfix/smtp[2463]: Untrusted TLS connection established to mx.yandex.ru[93.158.134.89]:25: TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)

хм, работает?!
теперь не забыть поставить более разумные настройки!

main.cf
smtp_tls_security_level = may
smtp_tls_loglevel = 0

may - может быть использовано.
/usr/local/etc/rc.d/postfix restart

еще как то надо задействовать такую же возможность на нашем 25 порту.
но я пока не понял как проверить, вернее знаю, но лень. Сами плиз. Это если отправляют нам. Позже проверю - отпишу.
main.cf
smtpd_tls_security_level = may

Шаг 19 Postfix restrictions port submission

Далее большой раздел - настройка ограничений postfix на прием/релей почтовых сообщений.
Настройки здесь могут быть оочень разными у каждого администратора.
Мои мне кажутся логичными, если не нравится, просто пропустите этот раздел и делайте свои.

helo,vrfy,size,strict_rfc821_envelopes

задачи:
начать требовать от клиентов правильной работы - представляться.
отключим возможность проверять существование ящиков,
переопределим максимальный размер почтового сообщения.
адреса, только по документу RFC-821.

для начала
$ telnet mail.tstdomain.local 587
Trying 192.168.100.241...
Connected to 192.168.100.241.
Escape character is '^]'.
220 mail.testdomain.ru ESMTP Postfix
ehlo test
250-mail.testdomain.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

смотрим список "возможностей", и без проблем даст передать команду mail from: , без первоначального helo|ehlo
Исправим

main.cf
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
message_size_limit = 51200000

/usr/local/etc/rc.d/postfix restart

telnet 192.168.100.241 25
Trying 192.168.100.241...
Connected to 192.168.100.241.
Escape character is '^]'.
220 mail.testdomain.ru ESMTP Postfix
mail from: test@server.ru
503 5.5.1 Error: send HELO/EHLO first
ehlo test
250-mail.testdomain.ru
250-PIPELINING
250-SIZE 51200000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Итак: пропала возможность 250-VRFY,  изменился 250-SIZE и я не смог сразу отправить сообщение не представившись. Необходимо проверить еще и порт 587

Действует на ОБА сервиса.

Простейшие ограничения заработали. Ограничения применяются в следующем порядке:

smtpd_client_restrictions
             можно привязать кучу разных проверок на host, ip ....
smtpd_helo_restrictions              смотрим на информацию HELO/EHLO
smtpd_sender_restrictions      смотрим на информацию MAIL FROM
smtpd_recipient_restrictions      смотрим на информацию RCPT TO
smtpd_data_restrictions              смотрим на информациюу DATA
smtpd_end_of_data_restrictions      Отклонять после получения команды END-OF-DATA
smtpd_etrn_restrictions              Отклонять команду ETRN

отказать в приеме можно на ранних этапах, но
postconf | grep smtpd_delay_reject
smtpd_delay_reject = yes

этот параметр означает, что отказывать будем на этапе smtpd_recipient_restrictions.
я там и буду строить всю фильтрацию. Просьба камни не кидать, и не разводить холиваров правильно/неправильно. Тут http://carantin2006.narod.ru/postfix/postfix/SMTPD_ACCESS_README.html можно почитать про возможные проблемы. Из положительных моментов - можно более тяжелые проверки поставить позже простых.

что имеем
postconf | grep smtpd | grep restrictions
smtpd_client_restrictions =
smtpd_data_restrictions =
smtpd_end_of_data_restrictions =
smtpd_etrn_restrictions =
smtpd_helo_restrictions =
smtpd_recipient_restrictions =
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sender_restrictions =

smtpd_relay_restrictions  - полностью устраивает, не трогаем.

Полностью закроем возможность неавторизованной отправки на порту 587, для чего подправим ограничения на нем.

master.cf
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=$mua_recipient_restrictions


main.cf
### for my client restrictions ########### 
mua_recipient_restrictions =    permit_sasl_authenticated 
                               	reject 

/usr/local/etc/rc.d/postfix restart

Попытаемся отправить. Ответ - неинформативый несколько, не додумался как исправить.
итого — или авторизация, или иди лесом.

далее еще прикрутим пару проверок, приведем к следующему виду наши ограничения порта 587
main.cf
mua_recipient_restrictions =    reject_non_fqdn_recipient
                                reject_non_fqdn_sender
                                reject_unknown_recipient_domain
                                permit_sasl_authenticated
                                reject


reject_non_fqdn_recipient - отказ не fqdn получатель
reject_non_fqdn_sender - отказ не fqdn отправитель
reject_unknown_recipient_domain - отказ если не в наш(и) домен(ы) и если нет DNS A или MX записи или MX запись корявая, к примеру нулевой длины... , в общем полезная вещь.

/usr/local/etc/rc.d/postfix restart

нужно сразу проверить ..

Далее....
Я хочу закрыть возможность отправки с скрытых ящиков типа bcc-ящика allusermail@tstdomain.ru
Для этого нужно смотреть обратный адрес, сделаем чуть больше, будем требовать совпадения адреса отправителя с аутентифицировавшимся пользователем. Из минусов - необходимость настраивать на клиентах для каждой учетной записи свой исходящий сервер (со своим пользователем для аутентификации).
main.cf
smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/virtual/sender_maps.sql 
### for my client restrictions ########### 
mua_recipient_restrictions =    reject_non_fqdn_recipient
                                reject_non_fqdn_sender
                                reject_unknown_recipient_domain
                                reject_authenticated_sender_login_mismatch
                                permit_sasl_authenticated
                                reject

добавили smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/virtual/sender_maps.sql - карту где смотреть наших пользователей, и требование совпадения отправителя с аутентифицирующимся reject_authenticated_sender_login_mismatch. Это правило, кстати, будет запрещать отсылать письма с обратным адресом группы.

virtual/sender_maps.sql
host = localhost 
user = mailreader 
password = password 
dbname = mail 
table = users 
select_field = email 
where_field = email 
#additional_conditions = and act = '1' 

Далее сам запрет на отсылку с этих ящиков. Создадим отдельную директорию для наших будущих файлов описаний ограничений
mkdir restrictions

restrictions/rej_int_sender.hash
allusermail@tstdomain.ru    554     Please dont use this sender email.

тип файла hash -это чтоб не забыть сделать из него хэш с которым и работает postfix.
postmap restrictions/rej_int_sender.hash

можно проконтролировать, что там появился файлик rej_int_sender.hash.db.

/usr/local/etc/rc.d/postfix restart

можно проверить как работает.

Добавим ограничение на отправителей:
main.cf
### for my client restrictions ########### 
mua_recipient_restrictions =    reject_non_fqdn_recipient
                                reject_non_fqdn_sender
                                reject_unknown_recipient_domain
                                reject_authenticated_sender_login_mismatch
                                check_sender_access hash:/usr/local/etc
/postfix/restrictions/rej_int_sender.hash
                                permit_sasl_authenticated
                                reject

/usr/local/etc/rc.d/postfix restart

Для проверки нужно настроить ящик allusermail@tstdomain.ru и попытаться с него отправить. Прием от таких отправителей на порту 25 закроем позже, сразу для всех (там же не будет конечных пользователей).

Неплохо бы запретить не только отправку с таких ящиков, но и на них. Приступим: добавим ограничение на получателей -
main.cf
### for my client restrictions ###########
mua_recipient_restrictions =    reject_non_fqdn_recipient
                                reject_non_fqdn_sender
                                reject_unknown_recipient_domain
                                reject_authenticated_sender_login_mismatch
                                check_sender_access hash:/usr/local/etc
/postfix/restrictions/rej_int_sender.hash
                                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                                permit_sasl_authenticated
                                reject

restrictions/rej_int_recipient.hash
allusermail@tstdomain.ru    550     User unknown in virtual mailbox table. 

разница с прошлым ограничением лишь в строке ответа.
создадим хэш
postmap restrictions/rej_int_recipient.hash

/usr/local/etc/rc.d/postfix restart

не забыть прикрутить это же ограничение и на 25 порт.
Пока хватит с 587 портом. Займемся портом 25

Шаг 20 Postfix restrictions 25

сходу можно добавить несколько ограничений
main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                check_recipient_access hash:/usr/local/etc/postfix
/restrictions/rej_int_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                permit

Что сделали
reject_non_fqdn_recipient  - отказ не fqdn получатель
reject_non_fqdn_sender  -отказ не fqdn отправитель
reject_unknown_sender_domain - отказ если не в наш(и) домен(ы) и если нет DNS A или MX записи или MX запись корявая, к примеру нулевой длины... Добавил пока закомменченым, иначе проверки делать будет сложно.
check_recipient_access - известная уже карта получателей.
permit_mynetworks - важный параметр - принимать почту от хостов входящих в mynetworks. (пока там только localhost, но потом я добавлю еще).
reject_unauth_destination - отклонить, если не для нас (наших доменов)
Одно из ограничений закомментировано, его работу сложно проверить, а остальные можно.

/usr/local/etc/rc.d/postfix restart

Добавим запрет на отсылку на наши групповые адреса извне (не аутентифицировавшимся - только на порту 25)


main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_group_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                check_client_access cidr:/usr/local/etc
/postfix/restrictions/permit_for_ip.cidr
                permit

restrictions/rej_int_recipient.hash
grouptest@tstdomain.ru    550     User unknown in virtual mailbox table. 

создадим хэш
postmap restrictions/rej_int_recipient.hash
/usr/local/etc/rc.d/postfix restart

можно проверять...   В будущем наполнять этот файл будем автоматом, скриптом, из таблицы groups mysql.


В mynetworks будут входить сервера которым будет разрешен релей через почтовик ...  Это опасная настройка, Попробуем немного урезать такие широкие возможности.
Сделаем карту адресов для серверов, которые будут слать только внутренним получателям, (без возможности релея, т. к. после reject_unauth_destination). Полезная настройка для получения почты с локальных серверов (сcron.. mail for root..).

main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_group_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                check_client_access cidr:/usr/local/etc
/postfix/restrictions/permit_for_ip.cidr
                permit

Пока это ограничение не имеет смысла, так как далее все равно permit, но будут более тяжелые, по которым не хотелось бы гонять доверенные сервера.

restrictions/permit_for_ip.cidr
192.168.0.1/32 OK

/usr/local/etc/rc.d/postfix restart

неплохо бы проверить....

добавим еще
main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                ccheck_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_group_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                check_client_access cidr:/usr/local/etc
/postfix/restrictions/permit_for_ip.cidr
                reject_non_fqdn_helo_hostname
                reject_invalid_helo_hostname
                #reject_unknown_helo_hostname
                #reject_unknown_client_hostname
                permit

Что добавили:
reject_non_fqdn_helo_hostname - отказ если HELO или EHLO hostname не fully-qualified, как требует RFC. Требует "smtpd_helo_required = yes" (сделано).
reject_invalid_helo_hostname - отказ, если корявый hostname....
reject_unknown_helo_hostname - отказ, если hostname из HELO или EHLO  не имеют DNS A или  MX записи
reject_unknown_client_hostname - отказ, если
1) обратная запись the client IP address->name mapping fails,
2) the name->address mapping fails, или
3) the name->address mapping does not match the client IP address.

Последний довольно жесткий параметр.. трудно проверить .....  
Внедрил пока закомментиным.

/usr/local/etc/rc.d/postfix restart

запретим прием из частных сетей и проверку отправителей

main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_group_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                check_client_access cidr:/usr/local/etc
/postfix/restrictions/permit_for_ip.cidr
                reject_non_fqdn_helo_hostname
                reject_invalid_helo_hostname
                #reject_unknown_helo_hostname
                #reject_unknown_client_hostname
                check_sender_mx_access cidr:/usr/local/etc
/postfix/restrictions/bogus_mx.cidr
                check_sender_access hash:/usr/local/etc
/postfix/restrictions/external_sender_check.hash
                permit

bogus_mx.cidr
0.0.0.0/8       550 Mail server in broadcast network (bg_mx_cdr) 
10.0.0.0/8      550 No route to your RFC 1918 network (bg_mx_cdr) 
14.0.0.0/8      550 No route to your RFC 1700 network (bg_mx_cdr) 
24.0.0.0/8      550 Ip service over cable television system (bg_mx_cdr) 
39.0.0.0/8      550 Class A subnet experiment (bg_mx_cdr) 
127.0.0.0/8     550 Mail server in loopback network (bg_mx_cdr) 
128.0.0.0/16    550 Class B reserved by the IANA (bg_mx_cdr) 
169.254.0.0/16  550 Auto configuration IP (bg_mx_cdr) 
172.16.0.0/12   550 Private networks (bg_mx_cdr) 
191.255.0.0/16  550 Class B reserved by the IANA (bg_mx_cdr) 
192.0.0.0/24    550 Class C reserved by the IANA (bg_mx_cdr) 
192.0.2.0/24    550 Test net (bg_mx_cdr) 
192.88.99.0/24  550 Relay anycast addresses (bg_mx_cdr) 
192.168.0.0/16  550 No route to your RFC 1918 network (bg_mx_cdr) 
198.18.0.0/15   550 Benchmark tests (bg_mx_cdr) 
223.255.255.0/24        550 Class C reserved by the IANA (bg_mx_cdr) 
224.0.0.0/4     550 Mail server in class D multicast network (bg_mx_cdr) 
240.0.0.0/4     550 Class E reserved broadcast (bg_mx_cdr)

у меня такой вид, это натравливается на MX записи отправителя

Следующий файлик - исключения. Дело в том что в процессе работы появятся клиенты с криво настроенными почтовиками, а письма получать от них надо. Кроме того, здесь мы отсечем хитрецов представляющимися нашим доменом. Порядок важен.

restrictions/external_sender_check.hash

extsenderpermit@tstdomain.ru       OK 
tstdomain.ru            554 Do not use my localdomain in your envelope sender 
ulmart.ru               OK 
test@test.ru		OK 

ulmart здесь - он не potgrey-ился

postmap restrictions/external_sender_check.hash
/usr/local/etc/rc.d/postfix restart

Если получится нужно проверить - послать от test@tstdomain.ru на порт 25...

Еще пару тяжелых проверок

main.cf
smtpd_recipient_restrictions =
                reject_non_fqdn_recipient
                reject_non_fqdn_sender
                #reject_unknown_sender_domain
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_int_recipient.hash
                check_recipient_access hash:/usr/local/etc
/postfix/restrictions/rej_group_recipient.hash
                permit_mynetworks
                reject_unauth_destination
                check_client_access cidr:/usr/local/etc
/postfix/restrictions/permit_for_ip.cidr
                reject_non_fqdn_helo_hostname
                reject_invalid_helo_hostname
                #reject_unknown_helo_hostname
                #reject_unknown_client_hostname
                check_sender_mx_access cidr:/usr/local/etc
/postfix/restrictions/bogus_mx.cidr
                check_sender_access hash:/usr/local/etc
/postfix/restrictions/external_sender_check.hash
                check_helo_access pcre:/usr/local/etc
/postfix/restrictions/helo.pcre
                check_client_access pcre:/usr/local/etc
/postfix/restrictions/client.pcre
                permit

добавили разбор привествия helo
restrictions/helo.pcre
/ppf.cz/i	OK 
/^mail\.tstdomain\.local$/i	550 Don't use my localhostname (hl_pcr_my1) 
/^mail\.tstdomain\.ru$/i	550 Don't use my hostname (hl_pcr_my2) 
/.*\.tstdomain\.local$/i	550 Don't use my localdomain (hl_pcr_my3) 
/.*\.tstdomain\.ru$/i	550 Don't use my domain (hl_pcr_my4) 
/^localhost.*/i		550 Helo localhost?! (hl_pcr_my5) 
/.*\.localdomain$/i	550 Helo localdomain?! (hl_pcr_my6) 
/([0-9]{1,3}[.-]){3}[0-9]{1,3}/i	550 SORRY Please use FQDN 
hostname in HELO/EHLO (hl_pcr_ip) 
/.*\.([0-9]{1,3}[.-]){3}[0-9]{1,3}\.*/i	550 SORRY Please use FQDN 
hostname in HELO/EHLO (hl_pcr_ip.1) 
/([0-9]{1,3}[.-]){3}[0-9]{1,3}\[\.-].*/i	550 SORRY Please 
use FQDN hostname in HELO/EHLO (hl_pcr_ip.2) 

/.*\..*\.yahoo\.com$/i	REJECT Your message looks like SPAM (hl_pcr_my7) 
/.*\.cox\.net$/i    	REJECT Your message looks like SPAM (hl_pcr_my8) 
/.*\.kuban\.ru$/i	REJECT Your message looks like SPAM (hl_pcr_my9) 
/.*\.kubannet\.ru$/i    REJECT Your message looks like SPAM (hl_pcr_my11) 
/.*\.kuz\.ru$/i		REJECT Your message looks like SPAM (hl_pcr_my12) 
/.*\.vikivostok\.ru$/i	REJECT Your message looks like SPAM (hl_pcr_my13) 
/\.emarsys\.net$/i	REJECT Your message looks like SPAM (hl_pcr_my14) 
/.*\.elcomnet\.ru$/i    REJECT Your message looks like SPAM (hl_pcr_my15) 

/[ax]dsl.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr1) 
/\.dsl.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr2) 
/dsl.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr2.1) 
/adsl.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr2.2) 
/.*\.adsl\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr2.3) 
/cable.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr3) 
/client.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr4) 
/dhcp.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr5) 
/dial.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr6) 
/dialup.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr7) 
/.*\.dialup\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr7.1) 
/dslam.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr8) 
/hosting.*\..*\..*/i    OK 
/hoster.*\..*\..*/i	OK 
/host.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr9) 
/node.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr10) 
/.*pool.messaging.microsoft.com/i	OK 
/pool.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr11) 
/ppp.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr12) 
/user.*\..*\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr13) 
/.*\.dynamic\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr14) 
/.*\.dynamicip\..*/i	REJECT Your message looks like SPAM (hl_pcr_wr15) 
/.*\.staticip\..*/i	REJECT Your message looks like SPAM (cl_pcr_wr16) 

Это мой чудовищный файл, что-то спер в инете, что-то сам добавил...
Внимание на перевод строк, и на концовку сообщения. В скобках  код для себя, потом в логах по этому коду легко понять на каком правиле произошел отказ. Так же есть и положительные решения. Чтобы понять что здесь за бред, нужно порыть инет на тему регулярные выражения"

и а записи
restrictions/client.pcre

/^mail\.tstdomain\.local$/i 550 Don't use my localhostname cl_pcr_my1
/^mail\.tstdomain\.ru$/i    550 Don't use my hostname cl_pcr_my2
/.*\.tstdomain\.local$/i    550 Don't use my localdomain cl_pcr_my3
/.*\.tstdomain\.ru$/i       550 Don't use my domain cl_pcr_my4

/.*\.google\.com$/i     OK
/.*\.google\.ru$/i      OK
/.*\.mail\.ru$/i        OK
/.*\.yandex\.net$/i     OK
/.*\.nyt\.ru$/i         OK
/.*\.nyt\.local$/i              OK
/.*\.alt\.ru$/i         REJECT Your message looks like SPAM cl_pcr_my5
/.*\..*\.yahoo\.com$/i    REJECT Your message looks like SPAM cl_pcr_my6
/.*([0-9]{1,3}-){3}[0-9]{1,3}\..*/i REJECT Your message looks 
like SPAM cl_pcr_my7
/([0-9]{1,3}-){3}[0-9]{1,3}\..*/i REJECT Your message looks 
like SPAM cl_pcr_my7.1
/([0-9]{1,3}\.){3}[0-9]{1,3}\..*/i REJECT Your message looks 
like SPAM cl_pcr_my7.2
/.*\..*\.yahoo\.com$/i    REJECT Your message looks like SPAM cl_pcr_my8
/.*\.cox\.net$/i    REJECT Your message looks like SPAM cl_pcr_my9
/.*\.kuban\.ru$/i    REJECT Your message looks like SPAM cl_pcr_my10
/.*\.kubannet\.ru$/i    REJECT Your message looks like SPAM cl_pcr_my11
/.*\.kuz\.ru$/i    REJECT Your message looks like SPAM cl_pcr_my12
/.*\.vikivostok\.ru$/i    REJECT Your message looks like SPAM cl_pcr_my13
/.*\.emarsys\.net$/i    REJECT Your message looks like SPAM cl_pcr_my14
/.*\.elcomnet\.ru$/i    REJECT Your message looks like SPAM cl_pcr_my15

/.*([0-9]{1,3}\.){2}[0-9]{1,3}-[0-9]{1,3}\..*/i REJECT Your message 
looks like SPAM cl_pcr_my21
/.*(-[0-9]{1,3}){3}\..*/i REJECT Your message looks like SPAM cl_pcr_my22

/[ax]dsl.*\..*\..*/i REJECT Your message looks like SPAM cl_pcr_wr1
/\.dsl.*\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr2
/dsl.*\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr2.1
/adsl.*\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr2.2
/.*\.adsl\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr2.3
/cable.*\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr3
/client.*\..*\..*/i  REJECT Your message looks like SPAM cl_pcr_wr4
/.*\.client\..*\..*/i  REJECT Your message looks like SPAM cl_pcr_wr4.1
/dhcp.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr5
/dial.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr6
/dialup.*\..*\..*/i  REJECT Your message looks like SPAM cl_pcr_wr7
/.*\.dialup\..*\..*/i  REJECT Your message looks like SPAM cl_pcr_wr7.1
/dslam.*\..*\..*/i   REJECT Your message looks like SPAM cl_pcr_wr8
/hosting.*\..*\..*/i    OK
/hoster.*\..*\..*/i    OK
/host.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr9
/node.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr10
/pool.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr11
/ppp.*\..*\..*/i     REJECT Your message looks like SPAM cl_pcr_wr12
/user.*\..*\..*/i    REJECT Your message looks like SPAM cl_pcr_wr13
/.*\.dynamic\..*/i    REJECT Your message looks like SPAM cl_pcr_wr14
/.*\.dynamicip\..*/i    REJECT Your message looks like SPAM cl_pcr_wr15
/.*\.staticip\..*/i    REJECT Your message looks like SPAM cl_pcr_wr16

/.*\.at$/i       550 Sorry, your message like spam! cl_pcr_dm

почти идентичные файлы. Последняя запись блокирует целую страну :) По концовкам легко понять на каком правиле провалилась отправка нам.
Все это большие костыли конечно, можете этого не делать.

postmap restrictions/helo.pcre
postmap restrictions/client.pcre
/usr/local/etc/rc.d/postfix restart

проверить работу сложновато ...






размещено: 2014-12-08,
последнее обновление: 2015-01-20,
автор: KontraBass

оценить статью:


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 8 чел.
За последние 30 мин было: 39 человек
За сегодня было
3606 показов,
721 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0823 секунд
Из них PHP: 61%; SQL: 39%; Число SQL-запросов: 75 шт.
Исходный размер: 166401; Сжатая: 26179