Приветствую категорически. Ситуация: 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 = 550strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_helo_required = yessmtpd_helo_restrictions =
permit_mynetworks,
check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
reject_invalid_hostname,
permitsmtpd_sender_restrictions =
permit_mynetworks,
check_sender_access regexp:/usr/local/etc/postfix/spam/sender_access,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permitsmtpd_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.cfsmtpd_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
permitsmtpd_data_restrictions =
reject_multi_recipient_bounce
Побродил по инету и накидал новый конфиг:
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_delay_reject = yessmtpd_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_pipeliningsmtpd_helo_restrictions =
permit_mynetworks,
check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
reject_invalid_hostname
reject_unknown_hostname
reject_non_fqdn_hostnamesmtpd_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,
rejectsmtpd_data_restrictions =
reject_multi_recipient_bouncesmtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yessmtpd_hard_error_limit = 8
smtpd_hard_error_limit = 5
smtpd_timeout = 120s
smtpd_timeout = 30sshow_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 = 5smtpd_junk_command_limit = 5
smtpd_error_sleep_time = 10s
smtpd_soft_error_limit = 3hopcount_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Прошу проверить, добавить нужное, удалить ненужное :) Спасибо
>[оверквотинг удален]
>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_hostnamereject_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
>
>#Не уверен насчет изменения кодов ошибок. Нужно ли?коды ошибок лучше не трогать
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 = yessmtpd_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_pipeliningsmtpd_helo_restrictions =
reject_non_fqdn_hostname
permit_mynetworks,
check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
reject_invalid_hostname
reject_unknown_hostnamesmtpd_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,
rejectsmtpd_data_restrictions =
reject_multi_recipient_bouncesmtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes
smtpd_hard_error_limit = 8
smtpd_hard_error_limit = 5show_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 = 30ssmtpd_junk_command_limit = 5
smtpd_error_sleep_time = 10s
smtpd_soft_error_limit = 3hopcount_limit = 15
В правильной ли последовательности идут smtpd_ ?
>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
>В правильной ли последовательности идут smtpd_ ?порядок значения не имеет
>порядок значения не имеетСпасибо еще раз! Может мне опять повезет, и Вы мне подскажите (немного офтопика :)), как можно прописать постфиксу смотреть в два сервера каталога 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
===
Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как это сделать?
>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>это сделать?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
>[оверквотинг удален]
>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
...
>[оверквотинг удален]
>>search_base = dc=domain,dc=ru
>>query_filter = (&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)
>>result_attribute = cn
>>===
>>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>>это сделать?
>
>Ты так зря делаешь, сам так поначалу
>связал Postfix с AD, лучше просто делать выборку например раз в
>час по крону скриптом.можно озвучить причину, по которой нежелательно использоватать "мою" схему?
>[оверквотинг удален]
>>>result_attribute = cn
>>>===
>>>Хотелось бы опрашивать и второй контроллер домена, если вдруг первый отвалится. Как
>>>это сделать?
>>
>>Ты так зря делаешь, сам так поначалу
>>связал Postfix с AD, лучше просто делать выборку например раз в
>>час по крону скриптом.
>
>можно озвучить причину, по которой нежелательно использоватать "мою" схему?Можно:-).
1. Возможность DoS-атаки на контроллер домена.
2. Предположим связь с контроллером прервалась, тогда ваш сервер не будет принимать почту, если не ошибаюсь, с ошибкой 450.
3. В той схеме, которую привел я, 2 контроллера задействованы. И, что самое главное, список получателей на локальной машине.
Подправил конфиг, спам заметно упал, тысячный раз спасибо! :) Однако почему-то проходят подобные хосты:
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 = 550strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_delay_reject = yessmtpd_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_pipeliningsmtpd_helo_restrictions =
permit_mynetworks,
check_helo_access regexp:/usr/local/etc/postfix/spam/helo_regexp,
reject_non_fqdn_hostname
reject_invalid_hostname
reject_unknown_hostnamesmtpd_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,
rejectsmtpd_data_restrictions =
reject_multi_recipient_bouncesmtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes
show_user_unknown_table_name = noИ можно ли прикрутить к postfix проверку по URL Domain Blacklists ?
И еще вдогонку, какая проверка соответствует 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.
>Подправил конфиг, спам заметно упал, тысячный раз спасибо! :) Однако почему-то проходят
>подобные хосты:
>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
Можно еще вопрос? Насколько беспроблемно использовать Sender Verify с postfix ?
>Можно еще вопрос? Насколько беспроблемно использовать Sender Verify с postfix ?У меня были проблемы с теми серверами, которые используются для отправки почты от несуществующих пользователей, например, рассылка, подтверждение регистрации и т.д. Для них нужно делать исключения.
>У меня были проблемы с теми серверами, которые используются для отправки почты
>от несуществующих пользователей, например, рассылка, подтверждение регистрации и т.д. Для них
>нужно делать исключения.соглаен. плюс на них уходит время и при прочих равных сервер обслуживает меньшее число клиентов.
лично я использую 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
Коллеги, подскажите как мне сделать исключение проверок для некоторых хостов? Сейчас у меня это делается через файл 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>
Собственно, проверка postmap -q "forptr.21cn.net" regexp:/usr/local/etc/postfix/spam/dul_checks отвечает
OK 21cn.net
Видимо отшибает ранее, как сделать так, чтобы белый список проверялся в первую очередь?
Добрый день!Кто знает подскажите, пожалуйста, в каком порядке Postfix выполняет проверки local_recipient_maps и smtpd_*_restrictions?
у меня:
local_recipient_maps = pgsql:/usr/local/etc/postfix/dbmail-aliases.cfsmtpd_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???)