URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 84817
[ Назад ]

Исходное сообщение
"postfix vs spam"

Отправлено returt , 07-Апр-09 10:40 
Приветствую категорически. Ситуация: postfix 2.5.5 на freebsd 7.1 в роли фронтэнд сервера, форвардит почту в локалку на ms exchange 2003. Борюсь со спамом его средствами. Однако проходит спам с подобными заголовками:
Received: from dsl88-247-1665.ttnet.net.tr (unknown [88.247.6.129])
Received: from adsl-dynamic-pool-xxx.hcm.fpt.vn (unknown [118.68.220.246])

Кон-ция:
unknown_local_recipient_reject_code = 550
relay_recipient_maps =
unknown_relay_recipient_reject_code = 550

strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes

smtpd_helo_restrictions =
    permit_mynetworks,
    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
    reject_invalid_hostname,
    permit

smtpd_sender_restrictions =
    permit_mynetworks,
    check_sender_access regexp:/usr/local/etc/postfix/spam/sender_access,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    permit

smtpd_recipient_restrictions =
    reject_unauth_pipelining
    check_recipient_access regexp:/usr/local/etc/postfix/spam/recipient_access
    reject_non_fqdn_recipient
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_unknown_recipient_domain
    permit_mynetworks
    reject_unauth_destination
    check_helo_access pcre:/usr/local/etc/postfix/spam/helo_checks.cf
    reject_non_fqdn_hostname
    reject_invalid_hostname
    check_sender_mx_access cidr:/usr/local/etc/postfix/spam/rfc1918net.cf

smtpd_client_restrictions =
    permit_mynetworks,
    check_client_access hash:/usr/local/etc/postfix/spam/client_access,
    check_client_access regexp:/usr/local/etc/postfix/spam/dul_checks,
    reject_rbl_client dnsbl.sorbs.net
    reject_rhsbl_sender rhsbl.sorbs.net
    permit

smtpd_data_restrictions =
    reject_multi_recipient_bounce


Побродил по инету и накидал новый конфиг:
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_delay_reject = yes

smtpd_client_restrictions =
    permit_mynetworks,
    check_client_access hash:/usr/local/etc/postfix/spam/client_access,
    check_client_access regexp:/usr/local/etc/postfix/spam/dul_checks,
    reject_rbl_client dnsbl.sorbs.net
    reject_rhsbl_sender rhsbl.sorbs.net
    permit
    reject_unknown_client
    reject_multi_recipient_bounce,
    reject_unauth_pipelining

smtpd_helo_restrictions =
    permit_mynetworks,
    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
    reject_invalid_hostname
    reject_unknown_hostname
    reject_non_fqdn_hostname

smtpd_sender_restrictions =
    permit_mynetworks,
    check_sender_access regexp:/usr/local/etc/postfix/spam/sender_access,
    reject_unlisted_sender
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_auth_destination
    reject_unauth_pipelining
    check_recipient_access regexp:/usr/local/etc/postfix/spam/recipient_access
    reject_non_fqdn_recipient
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_unknown_recipient_domain
    reject_unauth_destination
    check_helo_access pcre:/usr/local/etc/postfix/spam/helo_checks.cf
    reject_non_fqdn_hostname
    reject_invalid_hostname
    check_sender_mx_access cidr:/usr/local/etc/postfix/spam/rfc1918net.cf
    reject_unlisted_recipient,
    reject

smtpd_data_restrictions =
    reject_multi_recipient_bounce

smtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes

smtpd_hard_error_limit = 8
smtpd_hard_error_limit = 5
smtpd_timeout = 120s
smtpd_timeout = 30s

show_user_unknown_table_name = no

smtpd_client_connection_count_limit = 15
smtpd_client_connection_rate_limit = 10
smtpd_client_message_rate_limit = 5
anvil_rate_time_unit = 30s
smtpd_recipient_limit = 5
smtpd_recipient_overshoot_limit = 5

smtpd_junk_command_limit = 5
smtpd_error_sleep_time = 10s
smtpd_soft_error_limit = 3

hopcount_limit = 5

#Не уверен насчет изменения кодов ошибок. Нужно ли?
#unverified_recipient_reject_code = 550
#invalid_hostname_reject_code = 550
#non_fqdn_reject_code = 550
#unknown_address_reject_code = 550
#unknown_client_reject_code = 550
#unknown_hostname_reject_code = 550
#unverified_sender_reject_code = 550

Прошу проверить, добавить нужное, удалить ненужное :) Спасибо


Содержание

Сообщения в этом обсуждении
"postfix vs spam"
Отправлено Michael , 07-Апр-09 13:20 
>[оверквотинг удален]
>smtpd_helo_required = yes
>smtpd_delay_reject = yes
>
>smtpd_client_restrictions =
>    permit_mynetworks,
>    check_client_access hash:/usr/local/etc/postfix/spam/client_access,
>    check_client_access regexp:/usr/local/etc/postfix/spam/dul_checks,
>    reject_rbl_client dnsbl.sorbs.net
>    reject_rhsbl_sender rhsbl.sorbs.net
>    permit

убрать permit.
>    reject_unknown_client
>    reject_multi_recipient_bounce,
>    reject_unauth_pipelining
>
>smtpd_helo_restrictions =
>    permit_mynetworks,
>    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
>    reject_invalid_hostname
>    reject_unknown_hostname
>    reject_non_fqdn_hostname

reject_non_fqdn_hostname должен быть первым
>[оверквотинг удален]
>    reject_invalid_hostname
>    check_sender_mx_access cidr:/usr/local/etc/postfix/spam/rfc1918net.cf
>    reject_unlisted_recipient,
>    reject
>
>smtpd_data_restrictions =
>    reject_multi_recipient_bounce
>
>smtpd_timeout = 120s
>smtpd_timeout = 30s

а вот таймауты лучше не уменьшать, по дефолту выставлены мининально допустимые по RFC значения
>
>show_user_unknown_table_name = no
>
>smtpd_recipient_limit = 5
>smtpd_recipient_overshoot_limit = 5

по RFC вы обязаны принимать минимум 100 получателей

>
>smtpd_junk_command_limit = 5
>smtpd_error_sleep_time = 10s
>smtpd_soft_error_limit = 3
>
>hopcount_limit = 5

маловато будет. самый минимум 10, а то и 15
>
>#Не уверен насчет изменения кодов ошибок. Нужно ли?

коды ошибок лучше не трогать



"postfix vs spam"
Отправлено returt , 07-Апр-09 14:33 
Michael, спасибо за отклик! Вот что у меня получилось "итого":

unknown_local_recipient_reject_code = 550

#relay_recipient_maps = убираю, т.к. смотрим в ldap

unknown_relay_recipient_reject_code = 550

strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_delay_reject = yes

smtpd_client_restrictions =
    permit_mynetworks,
    check_client_access hash:/usr/local/etc/postfix/spam/client_access,
    check_client_access regexp:/usr/local/etc/postfix/spam/dul_checks,
    reject_rbl_client dnsbl.sorbs.net
    reject_rhsbl_sender rhsbl.sorbs.net
    reject_unknown_client
    reject_multi_recipient_bounce,
    reject_unauth_pipelining

smtpd_helo_restrictions =
    reject_non_fqdn_hostname
    permit_mynetworks,
    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
    reject_invalid_hostname
    reject_unknown_hostname

smtpd_sender_restrictions =
    permit_mynetworks,
    check_sender_access regexp:/usr/local/etc/postfix/spam/sender_access,
    reject_unlisted_sender
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_auth_destination
    reject_unauth_pipelining
    check_recipient_access regexp:/usr/local/etc/postfix/spam/recipient_access
    reject_non_fqdn_recipient
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_unknown_recipient_domain
    reject_unauth_destination
    check_helo_access pcre:/usr/local/etc/postfix/spam/helo_checks.cf
    reject_non_fqdn_hostname
    reject_invalid_hostname
    check_sender_mx_access cidr:/usr/local/etc/postfix/spam/rfc1918net.cf
    reject_unlisted_recipient,
    reject

smtpd_data_restrictions =
    reject_multi_recipient_bounce

smtpd_etrn_restrictions = reject

smtpd_reject_unlisted_sender = yes

smtpd_hard_error_limit = 8
smtpd_hard_error_limit = 5

show_user_unknown_table_name = no

smtpd_client_connection_count_limit = 15
smtpd_client_connection_rate_limit = 10
smtpd_client_message_rate_limit = 5
anvil_rate_time_unit = 30s

smtpd_junk_command_limit = 5
smtpd_error_sleep_time = 10s
smtpd_soft_error_limit = 3

hopcount_limit = 15

В правильной ли последовательности идут smtpd_ ?


"postfix vs spam"
Отправлено Michael , 07-Апр-09 15:12 

>smtpd_helo_restrictions =
>    reject_non_fqdn_hostname
>    permit_mynetworks,
>    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
>    reject_invalid_hostname
>    reject_unknown_hostname

тут ошибка. я не совсем ясно выразазился.reject_non_fqdn_hostname  должен быть первым из reject'ов


smtpd_helo_restrictions =
    permit_mynetworks,
    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
    reject_non_fqdn_hostname
    reject_invalid_hostname
    reject_unknown_hostname


"postfix vs spam"
Отправлено Michael , 07-Апр-09 15:15 
>В правильной ли последовательности идут smtpd_ ?

порядок значения не имеет


"postfix vs spam"
Отправлено returt , 07-Апр-09 15:59 
>порядок значения не имеет

Спасибо еще раз! Может мне опять повезет, и Вы мне подскажите (немного офтопика :)), как можно прописать постфиксу смотреть в два сервера каталога AD?
В смысле имеется local_recipient_maps = proxy:ldap:/usr/local/etc/postfix/ldap/ldap_access.cf
=== ldap_access.cf: ===
version = 3
bind_dn = user@domain.ru
bind_pw = password
debuglevel = 0
server_host = ldap://10.0.0.6
server_port = 3268
search_base = dc=domain,dc=ru
query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)
result_attribute = cn
===
Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как это сделать?


"postfix vs spam"
Отправлено Michael , 07-Апр-09 17:39 
>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>это сделать?

man ldap_table
              Depending  on the LDAP client library you're using,
              it should be possible to specify  multiple  servers
              here,  with the library trying them in order should
              the first one fail.
              With OpenLDAP, a (list of) LDAP URLs can be used to
              specify both the hostname(s) and the port(s):

                  server_host = ldap://ldap.example.com:1444
                              ldap://ldap2.example.com:1444


"postfix vs spam"
Отправлено artemrts , 13-Апр-09 10:11 
>[оверквотинг удален]
>bind_pw = password
>debuglevel = 0
>server_host = ldap://10.0.0.6
>server_port = 3268
>search_base = dc=domain,dc=ru
>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)
>result_attribute = cn
>===
>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>это сделать?

     Ты так зря делаешь, сам так поначалу связал Postfix с AD, лучше просто делать выборку например раз в час по крону скриптом. Например:

   #!/bin/sh

/usr/local/bin/ldapsearch -H ldap://IP_YOR_PDC:389,ldap://IP_YOUR_SDC:389 -P 3 -D 'cn=ldapquery,ou=office,dc=example,dc=org' -w 'BigSecret123' -b 'dc=example,dc=org' '(&(proxyAddresses=smtp:*)(|(objectClass=user)(objectClass=group)(objectClass=contact)))' proxyAddresses | perl -ne 'print if /proxyAddresses/' | perl -aF: -lne 'print "$F[2] OK"' | grep @ > /usr/local/etc/postfix/ldapquery.tmp

if [ $? = 0 ]
then cat /usr/local/etc/postfix/ldapquery.tmp > /usr/local/etc/postfix/ldapquery && /usr/local/sbin/postmap /usr/local/etc/postfix/ldapquery

В файл ldapquery кидаются строки типа

user1@example.org OK
user2@example.org OK


В main.cf:
virtual_mailbox_domains = example.org
virtual_mailbox_maps = hash:/usr/local/etc/postfix/ldapquery
...


"postfix vs spam"
Отправлено returt , 29-Апр-09 09:49 
>[оверквотинг удален]
>>search_base = dc=domain,dc=ru
>>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)
>>result_attribute = cn
>>===
>>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>>это сделать?
>
>Ты так зря делаешь, сам так поначалу
>связал Postfix с AD, лучше просто делать выборку например раз в
>час по крону скриптом.

можно озвучить причину, по которой нежелательно использоватать "мою" схему?


"postfix vs spam"
Отправлено artemrts , 29-Апр-09 10:35 
>[оверквотинг удален]
>>>result_attribute = cn
>>>===
>>>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>>>это сделать?
>>
>>Ты так зря делаешь, сам так поначалу
>>связал Postfix с AD, лучше просто делать выборку например раз в
>>час по крону скриптом.
>
>можно озвучить причину, по которой нежелательно использоватать "мою" схему?

  Можно:-).

  1. Возможность DoS-атаки на контроллер домена.
  2. Предположим связь с контроллером прервалась, тогда ваш сервер не будет принимать почту,  если не ошибаюсь, с ошибкой 450.
  3. В той схеме, которую привел я, 2 контроллера задействованы. И, что самое главное, список получателей на локальной машине.
  


"postfix vs spam"
Отправлено returt , 10-Апр-09 10:50 
Подправил конфиг, спам заметно упал, тысячный раз спасибо! :) Однако почему-то проходят подобные хосты:
Received: from queenadrena.com (17.238.broadband12.iol.cz [90.179.238.17])
Received: from mail-central.com (r6cy105.net.upc.cz [89.176.102.105])
Что еще подправить можно? Вот мой финальный конфиг:

unknown_local_recipient_reject_code = 550
unknown_relay_recipient_reject_code = 550

strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_delay_reject = yes

smtpd_client_restrictions =
    permit_mynetworks,
    check_client_access hash:/usr/local/etc/postfix/spam/client_access,
    check_client_access regexp:/usr/local/etc/postfix/spam/dul_checks,
    reject_rbl_client dnsbl.sorbs.net
    reject_rhsbl_sender rhsbl.sorbs.net
    reject_unknown_client
    reject_multi_recipient_bounce,
    reject_unauth_pipelining

smtpd_helo_restrictions =
    permit_mynetworks,
    check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
    reject_non_fqdn_hostname
    reject_invalid_hostname
    reject_unknown_hostname

smtpd_sender_restrictions =
    permit_mynetworks,
    check_sender_access regexp:/usr/local/etc/postfix/spam/sender_access,
    reject_unlisted_sender
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_auth_destination
    reject_unauth_pipelining
    check_recipient_access regexp:/usr/local/etc/postfix/spam/recipient_access
    reject_non_fqdn_recipient
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    reject_unknown_recipient_domain
    reject_unauth_destination
    check_helo_access pcre:/usr/local/etc/postfix/spam/helo_checks.cf
    reject_non_fqdn_hostname
    reject_invalid_hostname
    check_sender_mx_access cidr:/usr/local/etc/postfix/spam/rfc1918net.cf
    reject_unlisted_recipient,
    reject

smtpd_data_restrictions =
    reject_multi_recipient_bounce

smtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes
show_user_unknown_table_name = no

И можно ли прикрутить к postfix проверку по URL Domain Blacklists ?


"postfix vs spam"
Отправлено returt , 10-Апр-09 12:10 
И еще вдогонку, какая проверка соответствует SPF ? Проходит куча спама с несответствием имени хоста-отправителя записи mx на домен, как это:
Received: from pankov.rmt.ru (pankov.rmt.ru [81.13.10.26])
#host pankov.rmt.ru
pankov.rmt.ru has address 81.13.10.26
#host rmt.ru
rmt.ru has address 194.67.137.178
rmt.ru mail is handled by 10 mx2.rmt.ru.
rmt.ru mail is handled by 10 mx1.rmt.ru.

"postfix vs spam"
Отправлено Michael , 10-Апр-09 15:48 
>Подправил конфиг, спам заметно упал, тысячный раз спасибо! :) Однако почему-то проходят
>подобные хосты:
>Received: from queenadrena.com (17.238.broadband12.iol.cz [90.179.238.17])
>Received: from mail-central.com (r6cy105.net.upc.cz [89.176.102.105])

добавьте проверку по b.barracudacentral.org

>
>И можно ли прикрутить к postfix проверку по URL Domain Blacklists ?
>

через spamassassin


"postfix vs spam"
Отправлено returt , 15-Апр-09 10:53 
Можно еще вопрос? Насколько беспроблемно использовать Sender Verify с postfix ?


"postfix vs spam"
Отправлено artemrts , 15-Апр-09 11:26 
>Можно еще вопрос? Насколько беспроблемно использовать Sender Verify с postfix ?

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


"postfix vs spam"
Отправлено Michael , 15-Апр-09 15:29 
>У меня были проблемы с теми серверами, которые используются для отправки почты
>от несуществующих пользователей, например, рассылка, подтверждение регистрации и т.д. Для них
>нужно делать исключения.

соглаен. плюс на них уходит время и при прочих равных сервер обслуживает меньшее число клиентов.
лично я использую callout только для списка наиболее часто используемых спамерами доменов

в mail.cf
smtpd_restriction_classes = verify_sender
verify_sender = reject_unknown_sender_domain,reject_unverified_recipient, reject_unverified_sender, permit

и добавить в конец smtpd_recipient_restrictions check_sender_access hash:/usr/local/etc/postfix/sender_access

cat sender_access
rambler.ru      verify_sender
ya.ru           verify_sender
newmail.ru      verify_sender
nm.ru           verify_sender
orc.ru          verify_sender
hotmail.ru      verify_sender
nightmail.ru    verify_sender
earthlink.net   verify_sender
hotmail.com     verify_sender
lycos.com       verify_sender
msn.com         verify_sender
netscape.com    verify_sender
netscape.net    verify_sender
vip.ru          verify_sender
aport.ru        verify_sender
ewealthy.org    verify_sender
km.ru           verify_sender
freemail.ru     verify_sender
shopping.ru     verify_sender
mail.com        verify_sender
microsoft.com   verify_sender
microsoft.ru    verify_sender
subscribe.ru    verify_sender
sendmail.ru     verify_sender
aol.com         verify_sender
msk.lanck.ru    verify_sender
flashmail.com   verify_sender
comcast.net     verify_sender


"postfix vs spam"
Отправлено returt , 29-Апр-09 09:59 
Коллеги, подскажите как мне сделать исключение проверок для некоторых хостов? Сейчас у меня это делается через файл dul_checks следующим образом:
/.*21cn.net/i OK
/.*spammer.net/i 553 SPAM
По логам вижу:
Apr 29 09:00:45 relay postfix/smtpd[25066]: warning: 59.36.102.102: hostname forptr.21cn.net verification failed: hostname nor servname provided, or not known
Apr 29 09:00:45 relay postfix/smtpd[25066]: NOQUEUE: reject: RCPT from unknown[59.36.102.102]: 450 4.7.1 Client host rejected: cannot find your hostname, [59.36.102.102]; from=<username @ 21cn.net> to=<user@mydomain.ru> proto=ESMTP helo=<business.21cn.com>

"postfix vs spam"
Отправлено returt , 29-Апр-09 12:54 
Собственно, проверка postmap -q "forptr.21cn.net" regexp:/usr/local/etc/postfix/spam/dul_checks отвечает
OK 21cn.net
Видимо отшибает ранее, как сделать так, чтобы белый список проверялся в первую очередь?

"postfix vs spam"
Отправлено Евгений Семнов , 01-Июн-09 15:13 
Добрый день!

Кто знает подскажите, пожалуйста, в каком порядке Postfix выполняет проверки local_recipient_maps и smtpd_*_restrictions?

у меня:
local_recipient_maps = pgsql:/usr/local/etc/postfix/dbmail-aliases.cf

smtpd_recipient_restrictions =
    reject_non_fqdn_recipient,
    permit_sasl_authenticated,
    check_sender_mx_access cidr:/usr/local/etc/postfix/mx_access,
    check_client_access hash:/usr/local/etc/postfix/access,
    check_helo_access hash:/usr/local/etc/postfix/helo_checks,
    check_helo_access pcre:/usr/local/etc/postfix/helo_checks_pcre,
    reject_unauth_pipelining,
    reject_unknown_hostname,
    reject_invalid_hostname,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_unknown_recipient_domain,
    reject_unauth_destination

а логах:
Jun  1 14:10:52 mail postfix/smtpd[44818]: NOQUEUE: reject: RCPT from unknown[81.195.71.66]: 550 5.1.1 <muquodcovu@mydomain.ru>: Recipient address rejected: User unknown; from=<> to=<muquodcovu@mydomain.ru> proto=ESMTP helo=<rdplast.ru>
Jun  1 14:11:49 mail postfix/smtpd[45069]: NOQUEUE: reject: RCPT from 119-051-223.adsl.szeptel.net.pl[87.119.51.223]: 550 5.1.1 <to@mydomain.ru>: Recipient address rejected: User unknown; from=<emanley@degoo.com> to=<to@mydomain.ru> proto=ESMTP helo=<elite-cultura.it>

Почему анкновный хост пропущен аж до проверки адреса получателя? Как поправить рестрикшены чтобы анкновные и прочие инвалидные хосты не доходили до проверки адреса (другими словами как заставить Postfix делать проверку адреса по local_recipient_maps только после удачного прохождения smtpd_*_restrictions???)