Postfix SMTP server: errors

Проблема с Postfix

Out: 220 mail.nalogtelecom.ru ESMTP configured by Graf....
In: EHLO mordor
Out: 250-mail.nalogtelecom.ru
Out: 250-PIPELINING
Out: 250-SIZE 40960000
Out: 250-ETRN
Out: 250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN NTLM
Out: 250-AUTH=CRAM-MD5 DIGEST-MD5 LOGIN PLAIN NTLM
Out: 250-ENHANCEDSTATUSCODES
Out: 250-8BITMIME
Out: 250 DSN
In: RSET
Out: 250 2.0.0 Ok
In: MAIL FROM:
Out: 250 2.1.0 Ok
In: RCPT TO:<0031220069432201@operator.nalogtelecom.ru>
Out: 451 4.3.0 <0031220069432201@operator.nalogtelecom.ru>: Temporary lookup
failure
In: RCPT TO:<0031230825520000@decl.nalogtelecom.ru>
Out: 451 4.3.0 <0031230825520000@decl.nalogtelecom.ru>: Temporary lookup
failure
In: DATA
Out: 554 5.5.1 Error: no valid recipients
In: RSET
Out: 250 2.0.0 Ok
In: QUIT
Out: 221 2.0.0 Bye

Помогите пожалуйста

Весссьма

Весссьма информативно. Сервер ломаете? Где логи, конфиги? Версия, USE-флаги?
_______________________
From Siberia with Love!

Не сервер не

(Сразу прошу прощения- я Linux, можно сказать, только начал изучать, поэтому простите за безграмотность)
Не сервер не ломаем... наборот пытаюсь ему помочь... вот лог
NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238]; from= t
] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238]; from=
] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238]; from= ] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238]; from=
] warning: 122.169.142.114: hostname ABTS-AP-dynamic-114.142.169.122.airtelbroadband.in verification failed: Name or service not known
] connect from unknown[122.169.142.114]
] lost connection after DATA from unknown[82.147.119.238]
] disconnect from unknown[82.147.119.238]
] lost connection after DATA from unknown[82.147.119.238]
] disconnect from unknown[82.147.119.238]
] lost connection after DATA from unknown[82.147.119.238]
] disconnect from unknown[82.147.119.238]
] lost connection after DATA from unknown[82.147.119.238]
] disconnect from unknown[82.147.119.238]
] 4ECB4CF64A: reject: DATA from unknown[82.151.105.83]: 450 4.1.8 : Sender address rejected: Domain not found; from=
] disconnect from unknown[82.151.105.83]
] warning: 82.151.105.83: address not listed for hostname decl.nalogtelecom.ru
] connect from unknown[82.151.105.83]
] 7683BCF64A: client=unknown[82.151.105.83]
] lost connection after DATA from ayn46.neoplus.adsl.tpnet.pl[83.27.125.46]
] disconnect from ayn46.neoplus.adsl.tpnet.pl[83.27.125.46]
] connect from unknown[212.57.102.98]
repeated twice -
] connect from unknown[125.211.114.234]

b 20 13:15:59 [postfix/smtpd] lost connection after DATA from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] disconnect from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] lost connection after DATA from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] disconnect from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] lost connection after DATA from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] disconnect from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] lost connection after DATA from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] disconnect from unknown[82.147.119.238]
b 20 13:15:59 [postfix/smtpd] warning: 173.18.137.82.opm.blitzed.org: RBL lookup error: Host or domain name not found. Name service error for name=173.18.13
b 20 13:15:59 [postfix/smtpd] warning: 46.12.124.91.relays.ordb.org: RBL lookup error: Host or domain name not found. Name service error for name=46.12.124.
b 20 13:16:00 [postfix/smtpd] C8A38D0177: client=46-12-124-91.pool.ukrtel.net[91.124.12.46]
b 20 13:16:01 [postfix/smtpd] warning: 114.142.169.122.opm.blitzed.org: RBL lookup error: Host or domain name not found. Name service error for name=114.142
b 20 13:16:02 [postfix/cleanup] C8A38D0177: message-id=<01c873c4$287b1b80$2e0c7c5b@adam.clarke>
b 20 13:16:02 [postfix/qmgr] C8A38D0177: from=, size=11202, nrcpt=1 (queue active)
b 20 13:16:02 [postfix/virtual] C8A38D0177: to=, orig_to=
, relay=virtual, delay=49, delays=49/0.01/0/0.01, dsn=2.0.0,
b 20 13:16:02 [postfix/qmgr] C8A38D0177: removed
b 20 13:16:05 [postfix/smtpd] warning: 238.119.147.82.relays.ordb.org: RBL lookup error: Host or domain name not found. Name service error for name=238.119.
- Last output repeated 2 times -
b 20 13:16:05 [postfix/smtpd] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238
b 20 13:16:05 [postfix/smtpd] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238
b 20 13:16:05 [postfix/smtpd] NOQUEUE: reject: RCPT from unknown[82.147.119.238]: 450 4.7.1 Client host rejected: cannot find your hostname, [82.147.119.238
b 20 13:16:05 [postfix/smtpd] warning: 46.12.124.91.relays.ordb.org: RBL lookup error: Host or domain name not found. Name service error for name=46.12.124.
b 20 13:16:05 [postfix/smtpd] lost connection after DATA from unknown[82.147.119.238]

Конфиг чего нада Postfix`a

cat

cat /etc/postfix/main.cf

Это конечно круто, но я по фотографиям лечить еще не научился. Какие вообще проблемы с сервером? Что от него ожидается, и что он делает вместо этого?
_______________________
From Siberia with Love!

#message_size_limit =

#message_size_limit = 67108864

banner = $myhostname ESMTP configured by Graf....

#$preved

#smtpd_banner = $myhostname ESMTP configured by Graf.... ./banner
smtpd_banner = $banner

#
# The debug_peer_level parameter specifies the increment in verbose
# logging level when an SMTP client or server host name or address
# matches a pattern in the debug_peer_list parameter.
#
debug_peer_level = 2

debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

mailq_path = /usr/bin/mailq

setgid_group = postdrop

html_directory = no

manpage_directory = /usr/share/man

sample_directory = /etc/postfix

readme_directory = /usr/share/doc/postfix-2.1.5-r2/readme
default_destination_concurrency_limit = 2
alias_database = hash:/etc/mail/aliases
local_destination_concurrency_limit = 2
alias_maps = hash:/etc/mail/aliases
home_mailbox = .maildir/

broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes

transport_maps = mysql:/etc/postfix/transport.cf
virtual_mailbox_base = /
virtual_uid_maps = mysql:/etc/postfix/ids.cf
virtual_gid_maps = mysql:/etc/postfix/gids.cf
virtual_mailbox_maps = mysql:/etc/postfix/aliases.cf
virtual_maps = mysql:/etc/postfix/remote_aliases.cf
relay_domains = $transport_maps
virtual_alias_maps = $virtual_maps

local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps, $alias_database

smtpd_delay_reject = yes
########################################################
# ��� ������� ���������� �� �������������� ��������!!! #
########################################################
#smtpd_client_restrictions = permit_sasl_authenticated, reject
# permit_mynetworks

smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
mysql:/etc/postfix/access.cf,
#check_client_access mysql:/etc/postfix/client_access.cf
reject_rbl_client list.dsbl.org,
#reject_rbl_client bl.spamcop.net,
#reject_rbl_client cbl.abuseat.org,
#reject_rbl_client psbl.surriel.com,
reject_rbl_client spamsources.fabel.dk,
reject_rbl_client opm.blitzed.org,
reject_rbl_client combined.njabl.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client dul.ru,
reject_rbl_client dialup.balcklist.jippg.org,
reject_rbl_client relays.mail-abuse.org,
#reject_rbl_client dnsbl.sorbs.net,
reject_unknown_client,
permit

smtpd_helo_required = no

smtpd_helo_restrictions = permit_sasl_authenticated,
permit_mynetworks,
mysql:/etc/postfix/access.cf,
check_recipient_access mysql:/etc/postfix/rcpt.cf,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_hostname,
permit

smtpd_sender_restrictions = permit_mynetworks,
permit_sasl_authenticated,
mysql:/etc/postfix/access.cf,
#�������� �� ������� ����������� ���� From: � ����...
check_sender_access mysql:/etc/postfix/access_sender.cf,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit

smtpd_recipient_restrictions = reject_unauth_pipelining,
# �� ����������� � ������� smtpd_sender_restrictions
#check_recipient_access mysql:/etc/postfix/rcpt.cf
permit_sasl_authenticated,
permit_auth_destination,
permit_mynetworks,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unknown_sender_domain,
reject_unknown_recipient_domain
reject_unauth_destination,
check_recipient_access mysql:/etc/postfix/rcpt.cf
# ��������� ����� � �������� �����, �� ����������� � ��
# ��� ���� ������� ������ ���������� open-relay
# !!! !!! !!! !!! !!!
# ���� ��� ����������������� �������, ���� �����
#permit

smtpd_data_restrictions = permit_sasl_authenticated,
#permit_mynetworks,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unknown_sender_domain,
permit

# �����������, ����������� �� ����� MAIL FROM:

#bounce_queue_lifetime = 1

disable_vrfy_command = yes

#smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
#smtpd_tls_key_file = /opt/apache/conf/ssl.key/server.key
#smtpd_tls_cert_file = /opt/apache/conf/ssl.crt/server.crt
#smtpd_tls_CAfile = /opt/apache/conf/ssl.crt/ca.crt
#smtpd_tls_loglevel = 3
#smtpd_tls_received_header = yes
#smtpd_tls_session_cache_timeout = 3600s
#tls_random_source = dev:/dev/urandom

smtp_sasl_security_options = noanonymous, noplaintext

#smtp_connection_cache_on_demand = no

#Подтвердение доставики
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
#bounce_template_file = /etc/postfix/bounce.cf

Просто через наш сервак проходит большое количество сообщений... а т.к. выдает такую ошибку(где-то каждую ошибку) значит что-то не хорошо

P.S. Заранее огромное спасибо

Просто на этот

Просто на этот сервак стучатся спамеры, и их режет rbl и правила non-FQDN. Валидная почта доходит?

А вообще RBL - это зло.
_______________________
From Siberia with Love!

Вроде на

Вроде на сервере нету RBL, и дело в том что у нас стоит "оператор", который формирует письма и их отправляет. И просто по мимо спама есть и наши письма
In: RCPT TO:<0031220069432201@operator.nalogtelecom.ru>
Out: 451 4.3.0 <0031220069432201@operator.nalogtelecom.ru>: Temporary lookup

Вот в чем беда

Ясно. Temporary lookup

Ясно. Temporary lookup failure появляется, когда postfix не успевает определять, есть ли указанный адрес в списке получателей. В данном случае у тебя MySQL, затыки с ней, она не успевает обслуживать все запросы, вследствие чего по таймауту postfix вынужден отвечать, что не может обслужить клиента.

Решение - оптимизация работы mysql, поглядеть сколько она принимает подключений одновременно, поправить в большую сторону в случае недостаточных значений.
_______________________
From Siberia with Love!

Есть у вас RBL. Не

Есть у вас RBL. Не спорь, я настраивал - мне лучше знать.

Та же проблема

Помогите пожалуйста!

Dec 29 18:25:49 mail postfix/smtpd[16552]: NOQUEUE: reject: RCPT from unknown[217.150.55.116]: 450 4.7.1 Client host rejected: cannot find your hostname, [217.150.55.116]; from=

to= proto=ESMTP helo= Сделал как советуют вот так: smtpd_client_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/client_access mail ~ # cat /etc/postfix/client_access 217.150.55.116 OK У него кривой ДНС? Но это не помогает, логи пишет теже, куда копать?

покажи конфиг postfix

покажи конфиг postfix

Не грусти, товарищ! Всё хорошо, beautiful good!

Конфиг

#postconf -n
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
disable_vrfy_command = yes
empty_address_recipient = MAILER-DAEMON
home_mailbox = .maildir/
html_directory = /usr/share/doc/postfix-2.5.5/html
invalid_hostname_reject_code = 450
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
maps_rbl_reject_code = 450
mydestination = localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
newaliases_path = /usr/bin/newaliases
non_fqdn_reject_code = 450
queue_directory = /var/spool/postfix
queue_minfree = 120000000
readme_directory = /usr/share/doc/postfix-2.5.5/readme
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtp_tls_note_starttls_offer = yes
smtp_use_tls = yes
smtpd_client_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/client_access
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated reject_non_fqdn_helo_hostname check_helo_access hash:/etc/postfix/helo_access check_helo_access regexp:/etc/postfix/helo_regexp check_helo_access regexp:/etc/postfix/dul_checks
smtpd_recipient_restrictions = reject_unauth_pipelining permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_invalid_helo_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_sasl_authenticated permit_mynetworks reject_invalid_hostname reject_non_fqdn_hostname reject_non_fqdn_sender reject_unknown_client reject_unknown_sender_domain reject_unknown_hostname reject_rbl_client zen.spamhaus.org reject_rbl_client dul.dnsbl.sorbs.net reject_rbl_client bl.spamcop.net
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_key_file = /etc/postfix/newkey.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
strict_rfc821_envelopes = yes
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:12
virtual_mailbox_base = /var/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001
virtual_transport = dovecot
virtual_uid_maps = static:1001

Вот он
[194.135.103.190]: from= to= helo=
обрезал логи sed'ом
и смотрю кто еще не прошел, раз уж случилось.
Вот этот тоже не смог.
Надо опцию эту отключить в postfix?
Проблемы как я понимаю возникают у тех кто не настоил обратный адрес? Или что?
Что значит client unknown?

На поверхности лежит Смотри

На поверхности лежит
Смотри smtpd_sender_restrictions и smtpd_helo_restrictions

Вообще у тебя параноидальный почтовик, слишком много лишних проверок.

Не грусти, товарищ! Всё хорошо, beautiful good!

Вот это?

smtpd_sender_restrictions = reject_unknown_client

Я просто думаю, там ведь и ненужных тоже много. Сейчас все по RFC настроено кроме костыля IP-able
Добился того, что приходит 10% спама от всей почты.
Знаю что нужно ослабить, но где не пойму.
У нас новостное агентство, спама будет очень много если не параноить.
Тот кто настраивал сервер до меня сделал open relay и мы были в списке RBL - 2 дня потом ждал пока выкинут.
Еще с локалки один умудрился вирус поймать который слал кучу спама - такой хороший счет потом пришел за трафик.
Отсюда и паранойя.

А что лишнее - подскажите.
А то мне и посоветоваться негде.

Да, это. Нормально сделано. С

Да, это. Нормально сделано. С этого хоста половина планеты поди почты не принимает. Так что не волнуйся, админы настроят его сами.

Ну тогда вот еще

[213.242.207.197]: from=<root@itartass.ur.ru> to=<maineditor@xxx.ru> helo=<itartass.ur.ru>
[194.135.103.190]: from=<arta@1c.ru> to=<maineditor@xxx.ru> helo=<games.1c.ru>
[212.23.66.133]: from=<press@adm-ekburg.ru> to=<maineditor@xxx.ru> helo=<adm-ekburg.ru>

Слишком много у кого руки кривые.
Как их включить?
Меня смутило 1С - у них тоже криво?

Вроде посыпалось

От

дошло.
Спасибо за помощь.
А adm-ekburg.ru была администрация Ебурга.
Ндаа...

из своего опыта ;)

andribas написал(а):
smtpd_sender_restrictions = reject_unknown_client

reject_unknown_client
Reject the request when the client IP address has no PTR (address to name) record in the DNS, or when the PTR record does not have a matching A (name to address) record. The unknown_client_reject_code parameter specifies the response code to rejected requests (default: 450).
Найдено в гугле с полпинка. Ззапрос был postfix reject_unknown_client. Причем в гугль я полез потому, что мне просто лень было www.postfix.org обшаривать в поисках мануала. Или опять логиниться на почтовый сервер, с которого я 5 мин назад вылез.
У меня эта опция отключена. Не потому, что я доверяю почтовым серверам без записи PTR, а потому, что успел убедиться, что днс может взглюкнуть, и _нужное_ письмо может режектнуться. Сейчас на таких клиентов без реверса стоит пачка проверок и грейлистинг на 5 минут в конце. После проверки SPF, правда. Пришел к выводу, что SPF скорее добро. У меня во всех "моих" доменах поставлено -all - все сильно умные спамеры, рассылающие моим адресам рекламу от их же имени, накрылись. Несколько десятков в день. Ну и там еще попадаются домены, у которых админы поумнее... Так что отсутствие реверса - не повод для мгновенного режекта, но повод для бооольших подозрений... А еще есть noptr.spamrats.com. Те, которые там листед - уж точно без реверса. Таких режектим.

andribas написал(а):
Я просто думаю, там ведь и ненужных тоже много. Сейчас все по RFC настроено кроме костыля IP-able

Я не понял, имеется в виду отслеживание generic rDNS? Не знаю, как по-русски. Адресов с цифрами, которые по умолчанию назначаются в обратную зону? Так почему это костыль? Все бы так делали, сильно легче было бы. Это у меня самая первая проверка и самая главная - бОльшая часть спама рубится на ней. Проверяю и по client, и по helo - вторая проверка дает кучу срабатываний в том случае, если обратная зона разрешается "оттуда" и не разрешается "отсюда", а спамеры тупо кидают reverse name в helo - очень полезная проверка.

andribas написал(а):
Добился того, что приходит 10% спама от всей почты.
Знаю что нужно ослабить, но где не пойму.
У нас новостное агентство, спама будет очень много если не параноить.

У меня рекламщики... В среднем 2000 писем в день, 95-97% спам. Тот, который рубится. Кое-что проходит, но очень мало уже.

andribas написал(а):
Тот кто настраивал сервер до меня сделал open relay и мы были в списке RBL - 2 дня потом ждал пока выкинут.

www.dnsbl.com, openrbl.org - попроверяй свой ip там. Имеешь шанс узнать про него много нового ;)
Еще полезно прописать свой ip на www.dnswl.org.
А еще полезнейшая штука dnsstuff.fastnext.ru - проверить, чего в днс напахал, когда настраивал ;)

andribas написал(а):
Еще с локалки один умудрился вирус поймать который слал кучу спама - такой хороший счет потом пришел за трафик.
Отсюда и паранойя.

NAT, да? Открытый изнутри доступ к 25 порту во внешних сетях - ЗЛО. Юзерам что, локального SMTP мало? А вирусы обычно не догадываются, что надо на локальный слать - шарашат напрямую.

andribas написал(а):
А что лишнее - подскажите.
А то мне и посоветоваться негде.

Да все элементарно решается путем вдумчивого чтения всяких доков на предмет "как другие делали" и комбинирования их методов.
Кстати, я сильно удивился - у тебя самые лучшие блэклисты закомментированы были! А оставался хлам всякий, неработающие даже. Ты их работоспособность-то проверяешь иногда?
Я так поставил:
psbl.surriel.com
bl.spamcop.net
zen.spamhaus.org
там еще есть, но эти главные. Но проверка блэклистов в самом конце, после моего персонального белого списка - есть несколько почтовых серверов, с которых почта должна к нам ходить вся и мгновенно...
Почитай вот это - мои любимые доки по теме...
http://jimsun.linxnet.com/misc/postfix-anti-UCE.txt
http://gabacho.reto.jp/en/anti-spam/anti-spam-system.html
А главное - самому надо понимать, чего постфикс делает по какой команде в конфе, и не бояться сконфигурить его так, как _тебе_ надо, а не как кто-то придумал для своих нужд...

?

Avari написал(а):
zen.spamhaus.org

Не вполне понятны условия бесплатного использования:

Цитата:
1. Your use of the Spamhaus DNSBLs is non-commercial*, and
2. Your email traffic is less than 100,000 SMTP connections per day, and
3. Your DNSBL query volume is less than 300,000 queries per day.

Под вторым пунктом понимается лимит писем, полученных сервером; а под третьим - лимит попыток отправления почты?

Ещё (с учётом того, что спаммеры имею свойство периодически активизировать свою активность (раза в 2-2.5 - легко) подозрительным выглядит

Цитата:
Caution: If your usage should exceed the free use criteria your access to Spamhaus's public DNSBL servers is very likely to be cut off without warning.

.

:wq
--
Live free or die

условия там без подвоха...

Anarchist написал(а):
Avari написал(а):
zen.spamhaus.org

Не вполне понятны условия бесплатного использования:

Цитата:
1. Your use of the Spamhaus DNSBLs is non-commercial*, and
2. Your email traffic is less than 100,000 SMTP connections per day, and
3. Your DNSBL query volume is less than 300,000 queries per day.

Под вторым пунктом понимается лимит писем, полученных сервером; а под третьим - лимит попыток отправления почты?

Я так понял, с первым пунктом все понятно ?-)
Как они второй пункт собираются отслеживать - лично мне неясно. Это НЕ лимит полученных. Это сумма установленных на ваш SMTP-сервер соединений и установленных вашим SMTP-сервером соединений. За день. Как-то отследить это можно только косвенно.
Третий пункт считается легко. Это просто количество запросов с вашего IP на ip.add.rr.ess.zen.spamhaus.org. В смысле, вообще на *.spamhaus.org, там же несколько блэклистов...

Anarchist написал(а):
Ещё (с учётом того, что спаммеры имею свойство периодически активизировать свою активность (раза в 2-2.5 - легко) подозрительным выглядит
Цитата:
Caution: If your usage should exceed the free use criteria your access to Spamhaus's public DNSBL servers is very likely to be cut off without warning.

.

Все просто же. Не более 300000 запросов в день к DNSBL, или они ваш IP забанят.
У меня, естественно, 1 SMTP-соединение == 1 запрос (к одному блэклисту). Если у кого-то больше - ...ну, может, ему надо, чтобы sbl.spamhaus.org и pbl.spamhaus.org запрашивались независимо? Мне не надо.
У вас реально может быть за день 300000 SMTP-соединений?
У меня 1-2-3 тысячи в день. 3000 - это и есть активизация спамеров ;)
30000 - это уже будет не активизация, а флуд-атака 8)
А если ваш почтовый сервер обрабатывает >300000 ...ну, пусть писем в день... То вы крупный почтовый провайдер 8) (что мне сомнительно). Такие организации могут не пожалеть немного денег, заключить договор с тем же spamhaus и делать, например, раз в день трансфер их зоны. Или не раз в день, не знаю, как часто это нужно. В общем, копировать весь блэклист на локальный сервер и отвечать на свои запросы, используя свои же мощности.

.

Avari написал(а):
Я так понял, с первым пунктом все понятно ?-)

Основополагающий принцип "надо делиться" :)

Avari написал(а):
Это НЕ лимит полученных. Это сумма установленных на ваш SMTP-сервер соединений и установленных вашим SMTP-сервером соединений. За день.

Thanks!
Мне это не грозит :)

Avari написал(а):
Все просто же. Не более 300000 запросов в день к DNSBL, или они ваш IP забанят.

Навечно или как?

Avari написал(а):
У меня, естественно, 1 SMTP-соединение == 1 запрос (к одному блэклисту). Если у кого-то больше - ...ну, может, ему надо, чтобы sbl.spamhaus.org и pbl.spamhaus.org запрашивались независимо? Мне не надо.
У вас реально может быть за день 300000 SMTP-соединений?
У меня 1-2-3 тысячи в день. 3000 - это и есть активизация спамеров ;)
30000 - это уже будет не активизация, а флуд-атака 8)

Встречный вопрос: Вы не предпринимали никаких мер по ограничению нагрузки?
Безотносительно спам-фильтров.

Avari написал(а):
А если ваш почтовый сервер обрабатывает >300000 ...ну, пусть писем в день... То вы крупный почтовый провайдер 8) (что мне сомнительно).

Думается мне, Вы недостаточно представляете себе практику средних организацией (не промышляющих продажей почтовых аккаунтов).
За вчера sma показывает: 3146 входящих писем (включая пропущенный спам) и 312739 reject'ов.

Avari написал(а):
Такие организации могут не пожалеть немного денег, заключить договор с тем же spamhaus и делать, например, раз в день трансфер их зоны. Или не раз в день, не знаю, как часто это нужно. В общем, копировать весь блэклист на локальный сервер и отвечать на свои запросы, используя свои же мощности.

Так выпьем за то, чтобы наши желания (представления о справедливости) совпадали с нашими возможностями.
С нашей родной бухгалтерией такой фокус мягко говоря маловероятен... :(

:wq
--
Live free or die

А поточнее

Anarchist написал(а):
Avari написал(а):
А если ваш почтовый сервер обрабатывает >300000 ...ну, пусть писем в день... То вы крупный почтовый провайдер 8) (что мне сомнительно).

Думается мне, Вы недостаточно представляете себе практику средних организацией (не промышляющих продажей почтовых аккаунтов).
За вчера sma показывает: 3146 входящих писем (включая пропущенный спам) и 312739 reject'ов.

312739 reject'ов = все reject'ы, или фильтры RBL или что?
В каком порядке выполняются проверки на сервере?
есть smtpd_helo_restrictions, smtpd_recipient_restrictions, smtpd_sender_restrictions.
В последнем сначала

 reject_invalid_hostname
 reject_non_fqdn_hostname
 reject_non_fqdn_sender
 reject_unknown_sender_domain
 reject_unknown_hostname

И уже только потом zen. Правильно?
smtpd_helo_restrictions выполняются также перед zen. Про smtpd_recipient_restrictions я не уверен.
Но факт, что до zen не все reject'ы доходят.
Как вариант точного подсчета можно поставить spamcop, завернуть трафик на сквид (другой счетчик) и посчитать количество к нему за сутки в среднем, скажем, за неделю.
Тогда будете знать точно.

З.Ы. Макколо в ноябре прибили, но это ненадолго.

Уточняю

andribas написал(а):
312739 reject'ов = все reject'ы, или фильтры RBL или что?

Да.
Это - общее количество reject'ов.

andribas написал(а):
В каком порядке выполняются проверки на сервере?
есть smtpd_helo_restrictions, smtpd_recipient_restrictions, smtpd_sender_restrictions.
В последнем сначала

 reject_invalid_hostname
 reject_non_fqdn_hostname
 reject_non_fqdn_sender
 reject_unknown_sender_domain
 reject_unknown_hostname

И уже только потом zen. Правильно?

Неправильно.
У меня не Postfix.

andribas написал(а):
smtpd_helo_restrictions выполняются также перед zen. Про smtpd_recipient_restrictions я не уверен.
Но факт, что до zen не все reject'ы доходят.

Логично.
В моём случае zen режет чуть больше половины.

andribas написал(а):
З.Ы. Макколо в ноябре прибили, но это ненадолго.

Это хто? :)

:wq
--
Live free or die

А ещше точнее

Anarchist написал(а):
За вчера sma показывает: 3146 входящих писем (включая пропущенный спам) и 312739 reject'ов.
В моём случае zen режет чуть больше половины.

Получается, что после всех проверок, выполненных на Вашем сервере, остается 150 тысяч писем, из которых 3 тысячи принимаете, остальные оказываются в списке zen. Это 2% от общего числа.
Вы не думаете, что это слишком мало? Может проверок мало?
Или хотите всю работу на zen переложить :)
В моем случае получается около 12%, а до zen доходит 14%, вместо половины.

mail ~ # cat /var/log/mail.log | grep "Jan 26" | grep -c "IP-able"
14275

Это 40% от всех rejected за день.

Теперь покажу 2-х клиентов.
Первый - IP-able

Jan 26 03:12:21 mail postfix/smtpd[29733]: NOQUEUE: reject: RCPT from unknown[189.31.19.58]: 554 5.7.1 <189-31-19-58.dsl.pmjce700.brasiltelecom.net.br>: Helo command rejected: IP-able helo SPAM; from=<tessaaq@hotmail.com> to=<auto@uralpress.ru> proto=ESMTP helo=<189-31-19-58.dsl.pmjce700.brasiltelecom.net.br>

Второй - блокирован zen

Jan 26 03:11:47 mail postfix/smtpd[29698]: NOQUEUE: reject: RCPT from adsl-235-230-248.mco.bellsouth.net[74.235.230.248]: 450 4.7.1 Service unavailable; Client host [74.235.230.248] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=74.235.230.248; from=<tequila@bigfoot.com> to=<editor@uralpress.ru> proto=ESMTP helo=<adsl-235-230-248.mco.bellsouth.net>

Допустим IP-able является не адекватной проверкой и мы можем отрубить "правильного" клиента.
Вопрос: кого мы тогда отрубим?
Ответ: это сервер, который запускается на компьютере, который подключен к интернету по карте оплаты (анонимно) где-то в Бразилии. При этом как только адрес динамически получен - изменяются настройки сервера, чтобы он работал именно на нем. Плюс к этому у провайдера открыт 25 порт.

Представить такую ситуацию в России, чтобы кто-то поднял почтовый сервер, при этом у организации нет ни постоянного IP, ни своего домена (а куда тогда приходит почта-то?) тяжело. Если ставят почтовый сервер, то есть и сайт и запись в ДНС и свой IP даже на ADSL.

Убедительно?

А пока это писал, подумал - чем отличаются эти клиенты - костыля IP-able и zen.
В zen пришел адрес, где из IP только 3 числа + adsl.
Почему бы таких не отрубать в костыле?

Вот запись:

/.*([0-9]{1,3}(\.|-)){3}[0-9]{1,3}.*/i 553 SPAM_ip-add-rr-ess_networks

Одна строка regexp'а и работы на 40% меньше. На стадии helo. Без передачи данных.

Вы не пробовали логи посмотреть, что там пишут клиенты zen в поле helo?
хотя бы grep вот эта строчка или adsl?

Anarchist написал(а):
andribas написал(а):
З.Ы. Макколо в ноябре прибили, но это ненадолго.

Это хто? :)

Это такой "Американский хостинг-провайдер McColo"
Писали в РБК и по ТВ показывали. А меня юзеры спрашивали - ты что-то сделал? спама ведь стало меньше!
http://www.lenta.ru/news/2008/11/13/mccolo/

Продолжая вышесказанное,

Продолжая вышесказанное, проанализировал helo тех клиентов, которые рубит zen.
И добавил regexp. Теперь стало так.

/([0-9]{1,3}[x\.-]){3}/i        REJECT  IP-able helo SPAM
/([\.][^\.]*){4}/i      REJECT  5Domain helo SPAM
/([\.-][^\.-]*){5}/i      REJECT  6Domain helo SPAM
/(host|(dyn(amic|-ip)?)|(ppp(oe)?)|([ax]?dsl)|(dial(up|-in)?)|(cust(omer)?)|(i?net)|line|pool|node|static|broadband|cable|nat|client|ip|dhcp|codetel)[\.-]?([0-9]{1,3}[\.-]){2}/i       REJECT  Dynamic helo SPAM
/([\.-][0-9]{1,3}){2}[\.-]?(host|(dyn(amic|-ip)?)|(ppp(oe)?)|([ax]?dsl)|(dial(up|-in)?)|(cust(omer)?)|(i?net)|line|pool|node|static|broadband|cable|nat|client|ip|dhcp|codetel)/i       REJECT  Dynamic helo SPAM
/^chello[0-9a-z]*\.chello\.pl$/ REJECT  PL helo SPAM

Первый отрубает mbl-109-38-63.dsl.net.pk - 3 числа через точку-тире, точно динамический.
Второй C083H179.home03.cable.mecha.jp - домен 5-го уровня - ну не верю, что сервер такой бывает.
Третий MS-100-11.dyn-ip-II.SkyLink.RU - количество точек-тире 5 и больше.
Четвертый-пятый сработал всего 3 раза, может он и не нужен. Общая практика наименования адресов, выдаваемых динамически провайдерами.
Последний меня просто достал. Открывает сразу 20 соединений на user[1-20]@domain.ru, я так понимаю запросы не кешируются и к zen идет обращение каждый раз.

Это отрубаются клиенты, которые НЕ являются серверами. Они просто соединяются SMTP-сессия. И там пишут. Это НЕ сервера.

А всякие spamrats и dyna RBL'ы - Вы уверены, что там не стоит regexp? :)
После такой проверки на helo запросов к zen стало еще в 2-3 раза меньше, точно я не считал пока, пусть поработает.
И еще надо такую же проверку на адрес сделать, не helo, есть умники, которые туда пишут helo=google.com или helo=SomeDomain.com, мне последний понравился :) А оказываются host17-63-dynamic.180-80-r.retail.telecomitalia.it

Если думать как спамер хочет Вас обмануть, легче его победить.

=)

Anarchist написал(а):
Встречный вопрос: Вы не предпринимали никаких мер по ограничению нагрузки?
Безотносительно спам-фильтров.

Нет. Мне вообще незачем. Больше 10 соединений в минуту не бывает никогда. Нет смысла заморачиваться.

Anarchist написал(а):
Avari написал(а):
А если ваш почтовый сервер обрабатывает >300000 ...ну, пусть писем в день... То вы крупный почтовый провайдер 8) (что мне сомнительно).

Думается мне, Вы недостаточно представляете себе практику средних организацией (не промышляющих продажей почтовых аккаунтов).
За вчера sma показывает: 3146 входящих писем (включая пропущенный спам) и 312739 reject'ов.

Неплохо. Но 90% режектов ТОЧНО можно сделать, даже не используя блэклисты. Просто по client & helo, которых никогда не бывает у "приличных" почтовых серверов.
Так что на разумно настроенном SMTP-сервере вы вполне уложитесь в 30000 запросов в день.
Ну хорошо, возьмем с запасом в 3 раза - в 90000 уж точно 8)

Anarchist написал(а):
Avari написал(а):
Такие организации могут не пожалеть немного денег, заключить договор с тем же spamhaus и делать, например, раз в день трансфер их зоны. Или не раз в день, не знаю, как часто это нужно. В общем, копировать весь блэклист на локальный сервер и отвечать на свои запросы, используя свои же мощности.

Так выпьем за то, чтобы наши желания (представления о справедливости) совпадали с нашими возможностями.
С нашей родной бухгалтерией такой фокус мягко говоря маловероятен... :(

Really? ;)
Просто, если уж так понадобится трансфер зоны - надо подготовиться заранее.
Списаться с мэйнтэйнерами листа, узнать цену вопроса, способы оплаты...
_Написать_ бумажку бухгалтерам, что для рабочих нужд (таких-то) необходима ежемесячная оплата (того-то) (в сумме). Желательно оставить копию себе.
Другими способами проблему решать не пробовать ;)
И ждать.
И когда Компетентное Лицо у вас спросит "А какого %$# у меня в почте такой %$#^%???" - ответить: "Потому что БУХГАЛТЕРИЯ НЕ ОПЛАЧИВАЕТ!!! 8) "
И оплатят сразу все, на что у вас еще дополнительно в тот момент фантазии хватит ;)
Самый тонкий момент - держать все подготовленным, готовым ко включению в любой момент и с истребленными глюками 8) Потому что дальше уже ваша ответственность...

.

Avari написал(а):
Anarchist написал(а):
Встречный вопрос: Вы не предпринимали никаких мер по ограничению нагрузки?
Безотносительно спам-фильтров.

Нет. Мне вообще незачем. Больше 10 соединений в минуту не бывает никогда. Нет смысла заморачиваться.

Не бывает, не означает не может быть :)

Avari написал(а):
Но 90% режектов ТОЧНО можно сделать, даже не используя блэклисты. Просто по client & helo, которых никогда не бывает у "приличных" почтовых серверов.

Подтверждаю, можно.

Avari написал(а):
Really? ;)

Really :(

Avari написал(а):
_Написать_ бумажку бухгалтерам, что для рабочих нужд (таких-то) необходима ежемесячная оплата (того-то) (в сумме). Желательно оставить копию себе.
Другими способами проблему решать не пробовать ;)
И ждать.
И когда Компетентное Лицо у вас спросит "А какого %$# у меня в почте такой %$#^%???" - ответить: "Потому что БУХГАЛТЕРИЯ НЕ ОПЛАЧИВАЕТ!!! 8) "
И оплатят сразу все, на что у вас еще дополнительно в тот момент фантазии хватит ;)

Если бы так оно было.
Тут у нас давеча (месяца два назад) высокое руководство натягивали за срыв графика ...
А воз и ныне там.

Периодически бывают и более весёлые вещи.

:wq
--
Live free or die

Зря ты такой порядок

Зря ты такой порядок сделал

Цитата:
Я так поставил:
psbl.surriel.com
bl.spamcop.net
zen.spamhaus.org
там еще есть, но эти главные.

Надо думать что делаешь, а не писать то, что советуют.
Попробуй сделать grep -c на каждый.
Тот где больше всего срабатываний должен быть вверху. Это логично. После того, как переместишь, остальные сильно уменьшатся,
а некоторые станут равным нулю :)
Это проверено на практике. Хватает 2-х :

1. zen.spamhaus.org 
2. dul.dnsbl.sorbs.net

Почему так лучше? меньше обращений и проверок по сети.
А костыль IP-able - это отрубает тех клиентов, которые в helo кладут свой ip адрес. Это не соотвествует RFC 821, но работает у меня нормально. От таких серверов я почту не получаю.
Зато попадаются очень умные админы из банка Агропромкредит, которые на своем Microsoft Exchange пишут что они CHELAPK.ORG (заглавными буквами :)) а сами mail.chel.apkbank.ru
И говорят что почта от них всем доходит и руки кривые не у них, хотя этот домен они придумали CHELAPK.ORG и его не существует.

Цитата:
У меня рекламщики... В среднем 2000 писем в день, 95-97% спам. Тот, который рубится. Кое-что проходит, но очень мало уже.

Какая разница кто. postfix не читает контент, режет только тупые сервера и спамеров, если столько спама значит мало режешь.
Поставь костыль на пробу на один день - увидишь как меньше спама стало. Я тут где-то писал как его настроить http://www.gentoo.ru/node/13185#comment-91216 там и статистика сервера есть

З.Ы. Мой конфиг пониже http://www.gentoo.ru/node/9827#comment-91585
а первый видно сделан копи-паст dnsbl

Так задумано ;)

andribas написал(а):
Зря ты такой порядок сделал

Цитата:
Я так поставил:
psbl.surriel.com
bl.spamcop.net
zen.spamhaus.org
там еще есть, но эти главные.

Надо думать что делаешь, а не писать то, что советуют.

Вот я подумал и сделал так, как мне нравится.

andribas написал(а):
Попробуй сделать grep -c на каждый.
Тот где больше всего срабатываний должен быть вверху. Это логично. После того, как переместишь, остальные сильно уменьшатся,
а некоторые станут равным нулю :)
Это проверено на практике. Хватает 2-х :

1. zen.spamhaus.org 
2. dul.dnsbl.sorbs.net

А что, второй не включен в первый? Мне кажется, pbl.spamhaus.org должен охватывать и сорбсовский dialup list, и много больше...

andribas написал(а):
Почему так лучше? меньше обращений и проверок по сети.

А мне нравится так. Я разгружаю на 2/3 сверхпопулярный spamhaus за счет двух хороших, но менее нагруженных блэклистов. И в логах у меня более-менее равномерно распределены попадания в каждый. Что означает дополнительную фишку: если какой-то блэклист перестает отвечать, я это сразу вижу и знаю, что надо искать новый хорошо работающий ;)
Двух НЕ ХВАТАЕТ. Т.к., скажем, одинокий spamhaus ПРОПУСКАЕТ часть спама. Немного, наверное, 5%. А если по какой-то причине он на время ложится - система останется почти незащищенной (чего там этот диалап лист, он далеко не все охватывает, стоял он у меня... выкинул - слишком малый процент срабатываний), и спам ПОВАЛИТ 8)
А так их у меня вроде 5, уже не помню точно, а лезть на сервер сейчас лень. Еще noptr.spamrats.com и dyna.spamrats.com в конце. Между reject_unknown_client и использованием noptr.spamrats.com есть существенная разница. Надо объяснять, какая ?-)

andribas написал(а):
А костыль IP-able - это отрубает тех клиентов, которые в helo кладут свой ip адрес. Это не соотвествует RFC 821, но работает у меня нормально. От таких серверов я почту не получаю.

А, ну это у меня сразу было сделано. И тоже не такой уж костыль, против туповатых спамботов нормально. Почему-то не все провайдеры отвечают на reverse DNS request. Не знаю, почему. А рубить unknown client и хотел бы, да не могу, бывают моменты, когда нужные письма рубиться начинают...

andribas написал(а):
Зато попадаются очень умные админы из банка Агропромкредит, которые на своем Microsoft Exchange пишут что они CHELAPK.ORG (заглавными буквами :)) а сами mail.chel.apkbank.ru
И говорят что почта от них всем доходит и руки кривые не у них, хотя этот домен они придумали CHELAPK.ORG и его не существует.

Жалкие источники доходов Билла =) Я обычно пытаюсь ОДИН раз объяснить админу, в чем он не прав. Потому что сам далеко не все знаю. Если не хочет у меня учиться - мне никто и не платит за его обучение ;) от него почта ходить ко мне просто не будет. Ну а на случай, когда начальство просит ;) , сделан локальный уайтлист... в который, впрочем, так и так прописаны все ОЧЕНЬ нужные корреспонденты. Во избежание. В блэклисты, бывает, попадают и абсолютно не подозревающие об этом люди... (NAT запросов на 25 порт во внешний мир - ЗЛО!)

andribas написал(а):
Поставь костыль на пробу на один день - увидишь как меньше спама стало. Я тут где-то писал как его настроить http://www.gentoo.ru/node/13185#comment-91216 там и статистика сервера есть

Да давно уже так и стоит. Плюс еще куча проверок на характерные для "generic rDNS" имен строки - нету общего стандарта, каждый провайдер по-своему воротит.
Кстати, у тебя в конфиге, по-моему, не хватает smtpd_delay_reject = yes. По вкусу, конечно - этот фокус режектит письмо не сразу, скажем, после проверки smtpd_client_restrictions, даже если по условиям проверки клиент почему-то не проходит, а после приема rcpt to: . Зачем надо - очень удобно потом видеть в логе не просто "к нам тут пришел какой-то клиент с айпи такого-то, айпи нам не понравилось и клиент был кикнут" - будет записано его helo, mail from и rcpt to. Очень помогает при разборках "мне тут некто письмо прислать не может, почему?"
Да и проверки все у меня собраны в этапе smtpd_recipient_restrictions. Так можно. Просто чтобы не писать permit_mynetworks и permit_sasl_authenticated на каждой стадии проверок. Единообразнее и безглючнее получилось.
А reject_unknown_client пришлось убрать и заменить его кучей подпорок - noptr.spamrats.com, грейлистингом... Слишком строгое ограничение оказалось. Впрочем, можно было сделать его не reject, а try again later. Но мне надо было, чтобы письма от определенных адресов приходили ВСЕ и СРАЗУ, а уайтлисты я уже потом нормально сделал.

НУ НУ

Avari написал(а):
Цитата:
1. zen.spamhaus.org 
2. dul.dnsbl.sorbs.net

А что, второй не включен в первый? Мне кажется, pbl.spamhaus.org должен охватывать и сорбсовский dialup list, и много больше...

Нет, не включен. Здесь мы тоже про это говорили - http://www.gentoo.ru/node/13258#comment-94536.
Там есть статистика моего сервера. Срабатывания небольшие, но есть.

Avari написал(а):
А мне нравится так. Я разгружаю на 2/3 сверхпопулярный spamhaus за счет двух хороших, но менее нагруженных блэклистов. И в логах у меня более-менее равномерно распределены попадания в каждый. Что означает дополнительную фишку: если какой-то блэклист перестает отвечать, я это сразу вижу и знаю, что надо искать новый хорошо работающий ;)
Двух НЕ ХВАТАЕТ. Т.к., скажем, одинокий spamhaus ПРОПУСКАЕТ часть спама. Немного, наверное, 5%. А если по какой-то причине он на время ложится - система останется почти незащищенной (чего там этот диалап лист, он далеко не все охватывает, стоял он у меня... выкинул - слишком малый процент срабатываний), и спам ПОВАЛИТ 8)
А так их у меня вроде 5, уже не помню точно, а лезть на сервер сейчас лень. Еще noptr.spamrats.com и dyna.spamrats.com в конце. Между reject_unknown_client и использованием noptr.spamrats.com есть существенная разница. Надо объяснять, какая ?-)

Ну хорошо, что проявляется такая забота о сверхпопулярном spamhaus, но по моему 3000 запросов в день для него не существенно. По поводу не хватает и пропускает - хорошо бы посмотреть ВАШУ статистику срабатываний. Например, noptr.spamrats.com - сколько в день дает? Есть ли смысл ее ставить ради 5-10 срабатываний от клиентов, письма которых потом и так отрежутся spamassassin'ом? Тем более, если она стоит после zen'а.
Объяснять не надо, reject_unknown_client мне тоже пришлось отказаться.

Avari написал(а):
от него почта ходить ко мне просто не будет. Ну а на случай, когда начальство просит ;) , сделан локальный уайтлист... в который, впрочем, так и так прописаны все ОЧЕНЬ нужные корреспонденты.

очень удобно потом видеть в логе не просто "к нам тут пришел какой-то клиент с айпи такого-то, айпи нам не понравилось и клиент был кикнут" - будет записано его helo, mail from и rcpt to. Очень помогает при разборках "мне тут некто письмо прислать не может, почему?"
Да и проверки все у меня собраны в этапе smtpd_recipient_restrictions. Так можно. Просто чтобы не писать permit_mynetworks и permit_sasl_authenticated на каждой стадии проверок. Единообразнее и безглючнее получилось.
А reject_unknown_client пришлось убрать и заменить его кучей подпорок - noptr.spamrats.com, грейлистингом... Слишком строгое ограничение оказалось. Впрочем, можно было сделать его не reject, а try again later. Но мне надо было, чтобы письма от определенных адресов приходили ВСЕ и СРАЗУ, а уайтлисты я уже потом нормально сделал.

А вот здесь хотелось бы поподробней. Я в этой теме начал писать с того, что попробовал сделать whitelist, но у меня не получилось. И пример выше привел -
есть сервер mail.domain.ru, а в helo пишет domain.org, которого нет. Как его пропустить whitelist?
Второй пример - mail.domain.ru, в helo пишет domain.ru. domain.ru есть, а mail.domain.ru - нет записи DNS.
Как их пропускать?
У меня в логе пишет не только ip -

Jan 26 03:10:37 mail postfix/smtpd[29733]: NOQUEUE: reject: RCPT from ppp83-237-8-111.pppoe.mtu-net.ru[83.237.8.111]: 450 4.5.2 <max-home>: Helo command rejected: need fully-qualified hostname; from=<linpatidemet@patide.de> to=<admin@uralpress.ru> proto=ESMTP helo=<max-home>

Вот так примерно. Поэтому не актуально.
грейлистинг - подходит не всем. вторая попытка соединения будет от 5 до 40 минут. Причем 40 минут не редкость. Для новостей это долго. И потом я писал уже. После проверок postfix остается в основном нормальные сервера ISP, или неправильно настроенные или к которым есть пароль и т.д., но с них отправляется спам. по релеям - RU XX, то есть RU - нормальный почтовый сервер, XX - внутренний адрес. 2-3 релея это не динамические ip, которые режутся. И сдается мне грейлистинг им не поможет.
И опять же вопрос - какая статистика? Ну сделали Вы это - какой результат?
Напишите как грамотно настроить whitelist, если конечно, Вам не "лень лезть на сервер" :)
Я на сегодня не принимаю почту от 5 серверов, с которых должно.

Насчет падения zen - это бывает редко, последний раз в 2007 году, ДДОС атака. 1 раз. Дополнительная страховка это хорошо, но мне будет проще изменить когда случится.

Тогда еще вопрос - кто какие RBL использует? Кроме zen. И что они дают?

:)

andribas написал(а):
По поводу не хватает и пропускает - хорошо бы посмотреть ВАШУ статистику срабатываний. Например, noptr.spamrats.com - сколько в день дает? Есть ли смысл ее ставить ради 5-10 срабатываний от клиентов, письма которых потом и так отрежутся spamassassin'ом? Тем более, если она стоит после zen'а.

Эммм... Стоят у меня блэклисты в конце всех проверок, в таком порядке:
(много проверок скипнуто)

         reject_rbl_client psbl.surriel.com,
         reject_rbl_client bl.spamcop.net,
         reject_rbl_client noptr.spamrats.com,
         reject_rbl_client dyna.spamrats.com,
         reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com,
         reject_rbl_client zen.spamhaus.org,
         check_client_access regexp:/etc/postfix/client_greylist.pcre,
         reject_unlisted_recipient,
         check_recipient_access regexp:/etc/postfix/recipient_access,
         permit

Сейчас посмотрел статистику по текущему логу, 24-30 января вошло...
Client host rejected: SPAM I don't accept mail from "generic" rDNS names (total: 1078)
Helo command rejected: Host not found (total: 1263)
Helo command rejected: Invalid name (total: 40)
Helo command rejected: need fully-qualified hostname (total: 1812)
Helo command rejected: SPAM I don't accept mail from "generic" rDNS names (total: 589)
Helo command rejected: you are not me (total: 338)
Sender address rejected: Domain not found (total: 6)
Recipient address rejected: Message rejected due to (total: 258)
Relay access denied (total: 46)
blocked using psbl.surriel.com (total: 205)
blocked using bl.spamcop.net (total: 167)
blocked using noptr.spamrats.com (total: 114)
blocked using dyna.spamrats.com (total: 27)
blocked using karmasphere.email-sender.dnsbl.karmasphere.com (total: 180)
blocked using zen.spamhaus.org (total: 50)
Client host rejected: Greylisted for 5 minutes (total: 31)
Кстати, обнаружил, что спамеры в последнее время приутихли как-то: обычно 2000 писем в день, а за этот период и до 1000 всего-то пару раз дотягивало...
В общем, хорошо видно, что основную нагрузку берут на себя регэкспы проверки client & helo. Причем, как это ни смешно, проверять helo даже важнее 8)
Малопонятное Message rejected due to... - это policyd-spf. Осмысленная часть обрезана по двоеточию в логе. По-хорошему, надо бы поправить это место в pflogsumm и отослать разработчикам патч... Но меня лень замучила =)
Но, в общем, где-то так 750 соединений проскользнули через проверки client & helo и были зарублены уже блэклистами... Это при том, что у меня не просто проверка client & helo на "похожие на ip-адрес строки", там много всяких проверок на специфичные для некоторых странных провайдеров имена...
А сколько конкретно по каждому блэклисту - смотрте сами... Если хочется посмотреть на реальную статистику по проценту детектированию спама и ложным срабатываниям - посмотрите на stats.dnsbl.com. Когда мне надоел мой старый набор блэклистов, я шарил по Сети в поисках независимых тестирований блэклистов - нашел www.dnsbl.com, в итоге мой текущий набор выбран с использованием информации оттуда.
Кстати, проскальзывание бывает в основном потому, что postfix считает, что если reverse name есть, а разрешить его снова в IP не удается - то это имя неправильное, и такой клиент у него проходит как unknown[12.34.56.78]. Зараза этот postfix все-таки... Обходится этот недостаток исключительно через внешний policy daemon :( Готового решения я не нашел. Опять-таки по-хорошему надо самому писать... Пока обхожусь проверками helo.

andribas написал(а):
А вот здесь хотелось бы поподробней. Я в этой теме начал писать с того, что попробовал сделать whitelist, но у меня не получилось. И пример выше привел -
есть сервер mail.domain.ru, а в helo пишет domain.org, которого нет. Как его пропустить whitelist?
Второй пример - mail.domain.ru, в helo пишет domain.ru. domain.ru есть, а mail.domain.ru - нет записи DNS.
Как их пропускать?

Вполне элементарно. Сейчас мне надо бежать на другую работу, оттуда попробую подробнее написать. Вкратце - свел все проверки в smtpd_recipient_restrictions и почти в самом начале поставил проверку check_client_access regexp:/etc/postfix/client_whitelist.pcre. Это по вкусу, конечно, никто не мешает и hash, мне просто так нравится. Возвращать OK оттуда - вполне достаточно для игнорирования всех проверок, которые ниже. По пути наступил на грабли - client name, которое postfix проверяет в этом листе, выглядит не как somehost.somedomain, а как somehost.somedomain[so.me.i.p]. Было очень неприятно, когда ВООБЩЕ ВСЕХ, не прописанных в уайтлисте, начало рубить...
В общем, вечером конфиги покажу...

.

Avari написал(а):
Кстати, проскальзывание бывает в основном потому, что postfix считает, что если reverse name есть, а разрешить его снова в IP не удается - то это имя неправильное, и такой клиент у него проходит как unknown[12.34.56.78]. Зараза этот postfix все-таки...

Кстати, sendmail по всей видимости работает аналогично.
Повод для помедитировать на предмет ПЛВ ("почему").

:wq
--
Live free or die

unknown

Anarchist написал(а):
Повод для помедитировать на предмет ПЛВ ("почему").

Потому что считается, что для такого имени (полученного через обратную зону и НЕ разрешаемого в тот же IP) высока вероятность подделки.
Ну да, скажем, если с sshd каким-нибудь пытаться соединиться, который проверяет _имя_, с которого к нему подключаются - тут да...
Но все-таки это совсем другое дело. Тут же не разрешение доступа, а совсем даже наоборот - запрещение доступа, исходя из определенных характерных строк в имени клиента...
А когда эту фичу в postfix вставляли - миллионов тупых ботов по всему миру, рассылающих спас с ip простых юзеров, просто ЕЩЕ НЕ БЫЛО...
Но реализовано, как реализовано, и переделывать никто не будет :( К счастью, policy daemon получает полный набор параметров - и ip клиента, и имя, и данные конверта... и может их проверять сам тем способом, что ему нравится.
Вот только готового решения я не нашел, увы :( Написать бы :(

конфиг

andribas написал(а):
Есть ли смысл ее ставить ради 5-10 срабатываний от клиентов, письма которых потом и так отрежутся spamassassin'ом? Тем более, если она стоит после zen'а.

Есть. Обкуренного убийцы у меня не стоит. Я очень уж не люблю такие большие и неаккуратные системы. У меня даже dspam не прижился, хотя он гораздо поуже по функциям, меньше и, соответственно, аккуратнее. Обозримее. Фильтрация спама проводится исключительно режектами. Моим сотрудникам так жить проще, удобнее, и по итогам я с ними согласен ;) Спама пробивается в разы меньше, чем деловых писем. А письмо по делу никогда не попадет "случайно" в категорию спама, и это приятно 8)

andribas написал(а):
грейлистинг - подходит не всем. вторая попытка соединения будет от 5 до 40 минут. Причем 40 минут не редкость. Для новостей это долго.

Более чем согласен. Когда я в первый раз экспериментально включил postgrey в стандартной конфигурации "для всех", ругаться ко мне прибежали уже минут через 20 8) Пришлось срочно выключать и потом долго думать, как же правильно...
Но сейчас он у меня работает "оружием последнего шанса". И натравливается исключительно на тех клиентов, у которых client name == unknown[xx.xx.xx.xx] ;) Их много очень из-за специфики postfix'а, "рубить всех" или "пропускать всех" является неправильным решением - уже сталкивался со странной проблемой, когда в течение где-то чуть меньше суток обратная зона не функционировала как раз там, где мне очень надо было сверять имя клиента... Так что тем, кто unknown, не reject, и даже не try again later до восстановления обратной зоны - мягко greylisted for 5 minutes. Те, кто действительно SMTP-сервер, зайдут еще раз. После первого прохождения письма адрес такого странного сервера автоматом заносится в уайтлист postgrey, и если в течение (вроде) месяца оттуда придет еще письмо - оно будет пропущено без задержки.
Те, кто не SMTP, а просто боты, неплохо рубятся такой схемой. А SMTP-сервер, через который рассылается спам, обычно четко палится на более ранних этапах блюклистами... Он же неподвижный ;) IP постоянное. Это боты постоянно на новых IP заводятся, их в блэклисты заносить даже автоматы не сразу успевают, несколько часов проходит, пока попадаются... Грейлист в этом месте - это средство от ботов прежде всего. Ботов, client name которых postfix определяет как unknown.

andribas написал(а):
И потом я писал уже. После проверок postfix остается в основном нормальные сервера ISP, или неправильно настроенные или к которым есть пароль и т.д., но с них отправляется спам. по релеям - RU XX, то есть RU - нормальный почтовый сервер, XX - внутренний адрес. 2-3 релея это не динамические ip, которые режутся. И сдается мне грейлистинг им не поможет.

Выше написал. Это именно не от SMTP-серверов, а от ботов. SMTP рубятся блэклистами. А если попадутся какие-нибудь типа smtp.orange.fr, который почему-то никто не хотел блэклистить, так это я и руками могу в локальный блэклист. Уже несколько прецедентов есть.

andribas написал(а):
Напишите как грамотно настроить whitelist, если конечно, Вам не "лень лезть на сервер" :)
Я на сегодня не принимаю почту от 5 серверов, с которых должно.

Сейчас конфиг процитирую:

smtpd_restriction_classes = check_greylist
check_greylist = check_policy_service inet:127.0.0.1:2501
policyd-spf_time_limit = 3600

# ограничения по всем этапам проверяются на этапе RCPT TO:
smtpd_recipient_restrictions = reject_unauth_pipelining,
         reject_non_fqdn_recipient,
         reject_unknown_recipient_domain,
         permit_sasl_authenticated,
         permit_mynetworks,
         reject_unauth_destination,
         check_client_access regexp:/etc/postfix/client_whitelist.pcre,
         check_client_access regexp:/etc/postfix/dul_checks,
         check_helo_access hash:/etc/postfix/helo_access,
         check_helo_access regexp:/etc/postfix/helo_regexp,
         check_helo_access regexp:/etc/postfix/dul_checks,
         reject_invalid_helo_hostname,
         reject_non_fqdn_helo_hostname,
         reject_unknown_helo_hostname,
         check_sender_access regexp:/etc/postfix/sender_access,
         reject_non_fqdn_sender,
         reject_unknown_sender_domain,
         check_policy_service unix:private/policyd-spf,
         reject_rbl_client psbl.surriel.com,
         reject_rbl_client bl.spamcop.net,
         reject_rbl_client noptr.spamrats.com,
         reject_rbl_client dyna.spamrats.com,
         reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com,
         reject_rbl_client zen.spamhaus.org,
         check_client_access regexp:/etc/postfix/client_greylist.pcre,
         reject_unlisted_recipient,
         check_recipient_access regexp:/etc/postfix/recipient_access,
         permit

Кое-что тут лишнее, check_recipient_access, скажем, пустой висит, давно убрать надо было.
Белый список, понятно, вот эта строка:

         check_client_access regexp:/etc/postfix/client_whitelist.pcre,

Обратите внимание: все проверки делаются в один прием в smtpd_recipient_restrictions. У вас не так. Там все дело в том, что OK в проверке в одном из этапов - это игнорирование оставшихся проверок только до конца этапа! Если вы сделали whitelist в smtpd_client_restrictions, то любая проверка в smtpd_{helo,sender,recipient}_restrictions может вашего клиента обломать! А здесь все собрано в один этап - и срабатывание белого списка почти в начале - до него идут только действительно критичные для дальнейшей судьбы письма проверки! - гарантирует, что письмо будет принято. Это единственный этап проверок, других просто нет. Один раз OK - и письмо гарантированно принято.
Кусочек client_whitelist.pcre:

/^windbag\.itcom\.net\.ua(\[|$)/i       OK
/\.ucoz\.net(\[|$)/i                    OK
/\.e-host\.org\.ua(\[|$)/i              OK

Зючки в конце - это не понадобилось, в принципе, они для того, чтобы можно было и client name, и helo одним регэкспом проверять.
Основная строчка в client_greylist.pcre:

/^unknown/                                      check_greylist

"Все, для кого двойное определение имени хоста не прошло и кого не зарубили до этого места - в задержку!"
Собственно, все...

Большое спасибо, что

Большое спасибо, что просветил с whitelist.
Надо так и сделать.
Правда, я не уверен что смогу сразу все сложить в одну кучу, попробую прописать в 2-х местах.
smtpd_recipient_restrictions и smtpd_sender_restrictions.
Я делал базу и postmap, писал туда IP. Может он полностью не соотвествовал, раз был в скобках mail.xxx.ru[IP]
Попробую PCRE.

И какой адрес надо забивать, который с IP или который в helo? Или оба надо разрешать?

Увмдел, что у меня есть
reject_unauth_pipelining - похоже он не нужен мне.
reject_unknown_hostname - устарел.

А у Вас стоит
reject_unlisted_recipient

Цитата:
reject_unlisted_recipient (with Postfix version 2.0: check_recipient_maps)
Reject the request when the RCPT TO address is not listed in the list of valid recipients for its domain class. See the smtpd_reject_unlisted_recipient parameter description for details. This feature is available in Postfix 2.1 and later.

smtpd_reject_unlisted_recipient (default: yes)

Request that the Postfix SMTP server rejects mail for unknown recipient addresses, even when no explicit reject_unlisted_recipient access restriction is specified. This prevents the Postfix queue from filling up with undeliverable MAILER-DAEMON messages.
The recipient domain matches $mydestination, $inet_interfaces or $proxy_interfaces, but the recipient is not listed in $local_recipient_maps, and $local_recipient_maps is not null.
The recipient domain matches $virtual_alias_domains but the recipient is not listed in $virtual_alias_maps.
The recipient domain matches $virtual_mailbox_domains but the recipient is not listed in $virtual_mailbox_maps, and $virtual_mailbox_maps is not null.
The recipient domain matches $relay_domains but the recipient is not listed in $relay_recipient_maps, and $relay_recipient_maps is not null.

This feature is available in Postfix 2.1 and later.

Включен по умолчанию.
Похоже тоже не нужен.

smtpd_delay_reject = yes

Кажется, Вы про это писали. По умолчанию он включен. Означает, что сервер ждет RCPT TO, перед всеми проверками.
Здесь есть tradeoff. Я вот поставил sleep 5, чтобы поспать 5 секунд, а оказывается, это не работает при smtpd_delay_reject = yes.

В документации postconf надо сделать так:

sleep seconds
Pause for the specified number of seconds and proceed with the next restriction in the list, if any. This may stop zombie mail when used as: 
/etc/postfix/main.cf:
    smtpd_client_restrictions =
        sleep 1, reject_unauth_pipelining
    smtpd_delay_reject = no
This feature is available in Postfix 2.3.

Поставлю-ка я 5 секунд, а может и 10.
Правда reject_unauth_pipelining не работает если протокол ESMTP (EHLO вместо HELO), а обычно так и есть.

Цитата:
reject_unauth_pipelining
Reject the request when the client sends SMTP commands ahead of time where it is not allowed, or when the client sends SMTP commands ahead of time without knowing that Postfix actually supports ESMTP command pipelining. This stops mail from bulk mail software that improperly uses ESMTP command pipelining in order to speed up deliveries.
Note: reject_unauth_pipelining is not useful outside smtpd_data_restrictions when 1) the client uses ESMTP (EHLO instead of HELO) and 2) with "smtpd_delay_reject = yes" (the default). The use of reject_unauth_pipelining in the other restriction contexts is therefore not recommended.

Что лучше? Или это значит, что его надо просто прописать в smtpd_data_restrictions? Я что-то перевод невнятно понял.

dul-checks которые в интернете слишком большие и непонятно - нужны или нет.
Чуть выше я написал свои - составил по обращениям к zen - самые частые 60-70%.
Всего 5 правил.
http://www.gentoo.ru/node/9827#comment-94998

И на такой greylist как у Вас я пожалуй тоже соглашусь :)

Насчет zen я все-таки его оставил первым. У Вас

         reject_rbl_client psbl.surriel.com,
         reject_rbl_client bl.spamcop.net,
         reject_rbl_client noptr.spamrats.com,
         reject_rbl_client dyna.spamrats.com,
         reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com,
         reject_rbl_client zen.spamhaus.org,

чтобы принять решение об отказе

blocked using psbl.surriel.com (total: 205)
blocked using bl.spamcop.net (total: 167)
blocked using noptr.spamrats.com (total: 114)
blocked using dyna.spamrats.com (total: 27)
blocked using karmasphere.email-sender.dnsbl.karmasphere.com (total: 180)
blocked using zen.spamhaus.org (total: 50)

Нужно 205 + 167х2 + 114х3 + 27х4 + 180х5 + 50х6 = 2189 запросов
Для 205 + 167 + 114 + 27 + 180 + 50 = 743 адресов.
то есть, в среднем 3 запроса.
Плюс 6 запросов на КАЖДОЕ принятое письмо.
Если zen первый и остальные ничего не дают, то, пусть для страховки, можно оставить еще один, самый большой.
Если же дают, то опять порядок. При 10 отказах будет 700 + 10х(2+3+4+5+6) = 900 запросов. Все равно в два раза меньше.
Запросов ТОЧНО будет меньше. Если zen не будет доступен, то опять же неважно какой он по счету в проверке.

Avari написал(а):
Обкуренного убийцы у меня не стоит. Я очень уж не люблю такие большие и неаккуратные системы.

каждый сам решает. Dspam надо много учить и он действительно узок.
После небольшой настройки spamassassin у меня спам перестал приходить пользователям.
Из 500 в день - 100 внутренних, 50 фильтруется убийцей как спам, 20 спама доходит.
то есть 20/400 = 5%. или для моей системы 1 письмо на 1 пользователя в день. Это не в разы меньше, а почти нет.
Правда вот последнее время с сайта одноклассники pyzor рубит все письма.
А так ложные срабатывания бывают - 1 письмо в день. Тут уж приходится смотреть, не спорю.
Несколько раз рубились письма с серверов, которые недавно хакнули - не проходили razor, dcc, pyzor.
Опять же есть whitelist.
Если отключить байес - то

Avari написал(а):
А письмо по делу никогда не попадет "случайно" в категорию спама

никогда не случится. Только по причинам выше. Но можно откючить и их :)

Опять же понизив очки для тестов, или повысив порог срабатывания, можно свести на ноль.
У меня там стоит проверка на страны, которые пролезли по блэклистам, но до меня дошли и 1 (!!!) свой тест.
Если интересно посмотрите - http://www.gentoo.ru/node/13632#comment-94724

:)

andribas написал(а):
Правда, я не уверен что смогу сразу все сложить в одну кучу,

#    Postfix' restriction stages are as follows, and are processed in the
#    following order:
#
#       smtpd_client_restrictions
#       smtpd_helo_restrictions
#       smtpd_sender_restrictions
#       smtpd_recipient_restrictions
#       smtpd_data_restrictions
#
#    regardless of the order in which they're listed in main.cf.

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

andribas написал(а):
И какой адрес надо забивать, который с IP или который в helo? Или оба надо разрешать?

Ну, у меня контролируется только client name постфикса, та его часть, которая до IP в квадратных скобках. Может быть, это не совсем правильно. У кого-то там пропадала обратная зона, и те письма шли через всю цепочку проверок и блокировались каким-то из блэклистов. После этого случая хотел сделать два уайтлиста один за другим - один проверяет client name, другой helo. Причем используется в них один и тот же файл 8) Но больше таких случаев не было, и второй уайтлист я так и не прописал.
А ip в уайтлисте я прописывать не хочу как-то - мне кажется, что в случае смены ip я буду долго и мучительно вылавливать, где же проблема с почтой... Незапоминаемые они, в отличие от DNS-имен...

andribas написал(а):
reject_unknown_hostname - устарел.

Там имя просто сменилось, reject_unknown_helo_hostname, вы же про это? Мне очень нравится, целая куча срабатываний на спамеров и буквально на несколько бестолковых админов, которые сами себе злобные буратины...

andribas написал(а):
reject_unlisted_recipient
Включен по умолчанию.
Похоже тоже не нужен.

Я просто хотел, чтобы unlisted recipients отбивались в определенном месте, после всех проверок на непохожесть на спамера ;) Ибо нефиг спамерам видеть, какие у меня адреса в доменах уже отсутствуют. Вот бы еще ловушки на эти адреса повесить...

andribas написал(а):
reject_unauth_pipelining
Что лучше? Или это значит, что его надо просто прописать в smtpd_data_restrictions? Я что-то перевод невнятно понял.

Тут сложный вопрос. У меня оно замечательно работает и в smtpd_recipient_restrictions. Просто случаи срабатывания этой фишки достаточно редки. Мне кажется, что авторам доки показалось неправильным, что postfix несколько команд глотает-глотает в режиме pipelining, а после rcpt to: резко обламывает отправителя. Но высока вероятность того, что тут я не прав...

andribas написал(а):
dul-checks которые в интернете слишком большие и непонятно - нужны или нет.
Чуть выше я написал свои - составил по обращениям к zen - самые частые 60-70%.
Всего 5 правил.

Ну да, абсолютно логично. Реально там не так много вариантов... Но попадаются очень "самобытные" провайдеры, которые формируют generic rDNS name вообще ни на что не похожим образом. veloxzone.com.br, например. Для этих приходится держать отдельное персональное правило. Хотя вообще-то мне надо просто заблокировать нафиг всю Бразилию, Китай, Японию... Корею там и еще кого-нибудь придумать... Есть такие специфические блэклисты - блокировка IP по принадлежности какой-нибудь стране.

andribas написал(а):
Если zen не будет доступен, то опять же неважно какой он по счету в проверке.

Логично ;) Действительно, можно его и в первые ряды переставить. Просто остальные убирать не надо - мне абсолютно не нравится, когда меня вызванивают на работу из-за того, что спама много вдруг полезло ;)

спасибо за подсказку

Прежде всего спасибо за подсказку - сделал конфиг почти как у Вас.

Avari написал(а):
andribas написал(а):
И какой адрес надо забивать, который с IP или который в helo? Или оба надо разрешать?

Ну, у меня контролируется только client name постфикса, та его часть, которая до IP в квадратных скобках. Может быть, это не совсем правильно. У кого-то там пропадала обратная зона, и те письма шли через всю цепочку проверок и блокировались каким-то из блэклистов. После этого случая хотел сделать два уайтлиста один за другим - один проверяет client name, другой helo. Причем используется в них один и тот же файл 8) Но больше таких случаев не было, и второй уайтлист я так и не прописал.
А ip в уайтлисте я прописывать не хочу как-то - мне кажется, что в случае смены ip я буду долго и мучительно вылавливать, где же проблема с почтой... Незапоминаемые они, в отличие от DNS-имен...

С этим я разобрался. По правилу отправляется сначала name, потом IP, потом подсети.
Если в правильном месте поставить whitelist, то
check_client_access отправит client name, а
check_helo_access - helo

Теперь про проверку нехороших.

helo и client name проверять в одном файле проблематично.
Предлагаю в dul_client.pcre
написать вот так http://www.postfix.org/pcre_table.5.html

       if /pattern/flags

       endif  Match the input string against the patterns between
              if and endif, if and only if that same input string
              also matches pattern. The if..endif can nest.

в pattern засунуть проверку IP (нет букв) pattern=[a-z]
а внутрь вставить те же самые проверки. Правильно?
В одном файле тяжело проверить, client name приходит не name[IP], а сначала client, потом IP. Поэтому "[" там нет.
Если резать моим способом - 3 числа через точку-тире, самое убийственное правило, то все зарежутся.
Да и 4 числа зарежутся.

Еще хочу сказать, что мне пришлось ослабить свои regexp - сработала проверка на домен 5-го уровня!!!
easy.hq.icb.chel.su - это Челиндбанк, нормальный почтовый сервер.
Оставил проверку на 5 точек-тире. Если поставят тире, то опять обломятся. Или захотят сделать домен 6 уровня :)
Теперь нагрузка на zen немного добавится.

Avari написал(а):
Я просто хотел, чтобы unlisted recipients отбивались в определенном месте, после всех проверок на непохожесть на спамера ;) Ибо нефиг спамерам видеть, какие у меня адреса в доменах уже отсутствуют. Вот бы еще ловушки на эти адреса повесить...

А какие ловушки? Свою базу плохих адресов вести?
И как бороться когда пишут письмо от тебя тебе?

ehlo ...
mail from: <user@domain>
rcpt to: <user@domain>

Я хочу таких проверить авторизованы или нет. У меня все кроме localhost авторизуются.
Если IP не мой, авторизации нет, mail from=я, то пошел на...
Раньше таких много было, теперь меньше.

Avari написал(а):
andribas написал(а):
reject_unauth_pipelining
Что лучше? Или это значит, что его надо просто прописать в smtpd_data_restrictions? Я что-то перевод невнятно понял.

Тут сложный вопрос. У меня оно замечательно работает и в smtpd_recipient_restrictions. Просто случаи срабатывания этой фишки достаточно редки. Мне кажется, что авторам доки показалось неправильным, что postfix несколько команд глотает-глотает в режиме pipelining, а после rcpt to: резко обламывает отправителя. Но высока вероятность того, что тут я не прав...

Здесь я кажется разобрался с переводом.
Если протокол ESMTP - не поленился, посчитал таких 95% - то это не работает.
Если smtpd_delay_reject=yes, то также не работает вплоть до smtpd_recipient_restrictions, где Вы его и поставили.

Avari написал(а):
Но попадаются очень "самобытные" провайдеры, которые формируют generic rDNS name вообще ни на что не похожим образом. veloxzone.com.br, например. Для этих приходится держать отдельное персональное правило. Хотя вообще-то мне надо просто заблокировать нафиг всю Бразилию, Китай, Японию... Корею там и еще кого-нибудь придумать... Есть такие специфические блэклисты - блокировка IP по принадлежности какой-нибудь стране.

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

Лучше все-таки сделать policy типа postgrey и spf. На перле проверять вхождение по стране и по двум спискам, которые я указал. А там уже решать откидывать или нет.
А что у Вас за идея насчет client=unknown ?

Avari написал(а):
Просто остальные убирать не надо - мне абсолютно не нравится, когда меня вызванивают на работу из-за того, что спама много вдруг полезло ;)

Смотрите ниже http://www.gentoo.ru/node/9827#comment-95167
там мой отчет о проделанной работе :)
Выкинул 3 Ваших RBL

.

andribas написал(а):
Avari написал(а):
Я просто хотел, чтобы unlisted recipients отбивались в определенном месте, после всех проверок на непохожесть на спамера ;) Ибо нефиг спамерам видеть, какие у меня адреса в доменах уже отсутствуют. Вот бы еще ловушки на эти адреса повесить...

А какие ловушки? Свою базу плохих адресов вести?

Типа spam trap address.
Например sales@mydomain.ru (если такового у тебя нет).
Попытка отправления письма на этот адрес - в течение [например] 8 часов блокировка всей корреспонденции с IP-адреса.
Умеют ли такое почтовые сервера - не знаю.
Фича заявлена в assp.

Приведу отмеченный у меня список типовых (среднестатистически вероятно-существующих) адресов электронной почты, которые любят спаммеры (составлен по мотивам чтения логов):

>mydomain@mydomain.ru









































:wq
--
Live free or die

Прокси ставить не

Прокси ставить не хочу.
Прочитал, что policyd это тоже умеет, правда он ~.
Можно выдрать оттуда модуль Spamtrap или включить только его, убрав остальные.
Работает как policy daemon.
Логи тоже надо посмотреть, есть у меня один адрес - я его в каталоги для регистрации сайтов пихал через 1ps.ru
Спама валит много, хотя выключил месяца 2 назад.

У меня есть клиенты, которые внаглую адреса перебирают - по 300-400 штук.
Каждый раз идет запрос к RBL.
disable_vrfy_command = yes поставил, а так я их сразу отрублю.
Я вот еще хотел спросить: проверка RBL идет через ДНС:

host re.ver.se.ip.zenspamhaus.org

у меня стоит bind, в настройках - forwarders.
Запрос кэшируется или нет?

кэш

andribas написал(а):
Я вот еще хотел спросить: проверка RBL идет через ДНС:

host re.ver.se.ip.zenspamhaus.org

у меня стоит bind, в настройках - forwarders.
Запрос кэшируется или нет?

Теоретически да, а практически проверить не могу - надо целую кухню ставить для удаленного управления биндом... с помощью чего-то там оттуда можно было текущее содержимое кэша посмотреть... Но мне кажется, что кэшируется. Такое вот ощущение, когда dig'ом пользуешься...

SPF

Сразу извиняюсь - как-то я на форум спорадически хожу...

andribas написал(а):
С этим я разобрался. По правилу отправляется сначала name, потом IP, потом подсети.
Если в правильном месте поставить whitelist, то
check_client_access отправит client name, а
check_helo_access - helo

Увы, ничего не понял :( Что сначала, что потом?
Я разбирался не по описанию, а "по живому"... Но мне кажется, что check_client_access _один_раз_ проверяет регэкспами такую строку: "smtp.server.domain.ru[12.34.56.78]" (это постфикс сам так клеит, если удается проверить reverse DNS name, если обратная зона не прописана или имя оттуда разрешается в другой ip, то пишет unknown), а check_helo_access такую: "smtp.server.domain.ru" (ну, это если админ нормально сервер настроил, конечно... что в хело написано, то и будет проверяться)

andribas написал(а):
helo и client name проверять в одном файле проблематично.

Но почему? У меня же проверяются. Просто надо учитывать, что в одном случае в конце ip в квадратных скобках, а в другом - сам postfix ip в скобках дописывать не станет, но по стандарту почтовый сервер может сам представляться своим ip в квадратных скобках... и такие почтовые сервера, насколько я по статистике вижу, обычно просто спамботы на самом деле, как раз рубить надо...
Можно же так написать:
/^unknown\[([0-9]{1,3}\.){3}[0-9]{1,3}\]$/ check_greylist
/^\[([0-9]{1,3}\.){3}[0-9]{1,3}\]$/ REJECT It's not RFC compliant, but I WON'T accept mail from nameless IP!
Первое рассчитано на срабатывание от client name, а второе - helo...

andribas написал(а):
В одном файле тяжело проверить, client name приходит не name[IP], а сначала client, потом IP. Поэтому "[" там нет.

8) Странно. Это точно? А почему у меня так, как я вверху написал?

andribas написал(а):
Если резать моим способом - 3 числа через точку-тире, самое убийственное правило, то все зарежутся.
Да и 4 числа зарежутся.

Хорошее правило.
Я себе сделал чуть измененное:
/([0-9]{1,3}(\.|-)){4}/ 553 SPAM I don't accept mail from "generic" rDNS names
Такое не зарезает - после 4-го числа будет "]", а не точка или тире.
Но можно просто проверять, что символ перед первой цифрой не "[".

andribas написал(а):
И как бороться когда пишут письмо от тебя тебе?

Элементарно оказалось. См. www.openspf.org. Я попросил добавить во все dns-записи наших почтовых доменов строку наподобие:
comra.org.ua. 7200 IN TXT "v=spf1 +mx -all"
Ну и policyd-spf в цепочку проверок вставил. Потом еще подстроил его, чтобы он для определенных доменов типа mail.ru, gmail.com итп на softfail постфиксу говорил REJECT. Так качественнее получается, а то mail.ru ~all, gmail.com ?all... неправильно это. Мои домены отправляют почту только через мой smtp. Точка. Снаружи он доступен для аутентифицировавшихся юзеров, конечно.
Вообще SPF мне очень понравился, надо его в народ продвигать, в России особенно... Чем больше доменов с SPF - тем меньше будет спама от ботов...

Да, точно

Avari написал(а):
Сразу извиняюсь - как-то я на форум спорадически хожу...
Я разбирался не по описанию, а "по живому"... Но мне кажется, что check_client_access _один_раз_ проверяет регэкспами такую строку: "smtp.server.domain.ru[12.34.56.78]" (это постфикс сам так клеит, если удается проверить reverse DNS name, если обратная зона не прописана или имя оттуда разрешается в другой ip, то пишет unknown), а check_helo_access такую: "smtp.server.domain.ru" (ну, это если админ нормально сервер настроил, конечно... что в хело написано, то и будет проверяться)

andribas написал(а):
helo и client name проверять в одном файле проблематично.

Но почему? У меня же проверяются. Просто надо учитывать, что в одном случае в конце ip в квадратных скобках, а в другом - сам postfix ip в скобках дописывать не станет, но по стандарту почтовый сервер может сам представляться своим ip в квадратных скобках... и такие почтовые сервера, насколько я по статистике вижу, обычно просто спамботы на самом деле, как раз рубить надо...
Можно же так написать:
/^unknown\[([0-9]{1,3}\.){3}[0-9]{1,3}\]$/ check_greylist
/^\[([0-9]{1,3}\.){3}[0-9]{1,3}\]$/ REJECT It's not RFC compliant, but I WON'T accept mail from nameless IP!
Первое рассчитано на срабатывание от client name, а второе - helo...

andribas написал(а):
В одном файле тяжело проверить, client name приходит не name[IP], а сначала client, потом IP. Поэтому "[" там нет.

8) Странно. Это точно? А почему у меня так, как я вверху написал?

andribas написал(а):
Если резать моим способом - 3 числа через точку-тире, самое убийственное правило, то все зарежутся.
Да и 4 числа зарежутся.

Хорошее правило.
Я себе сделал чуть измененное:
/([0-9]{1,3}(\.|-)){4}/ 553 SPAM I don't accept mail from "generic" rDNS names
Такое не зарезает - после 4-го числа будет "]", а не точка или тире.
Но можно просто проверять, что символ перед первой цифрой не "[".

Да это совершенно точно.
Когда client_name != unknown, то в client_access.pcre прилетает сначала client_name, потом client_address=IP
Это совершенно точно и соответствует докуметации http://www.postfix.org/access.5.html (раздел HOST NAME/ADDRESS PATTERNS)
Поэтому Ваше второе правило никогда не сработает. Или срабатывает - сколько раз?
В случае с helo_access IP не прилетает.
Если бы это было не так, то мой client.pcre (см. ниже) рубил бы всех и я бы почту вообще не получал.

if /[a-z]/
if !/^unknown/
/([0-9]{1,3}[x\.-]){3}/ REJECT  rDNS client SPAM

Туда НЕ приходит client_name[ip.add.re.ss] - сначала client_name, потом ip.add.re.ss. Если указано в настройках - то еще и поддомены и подсети.
А вот в случае с unknown, действительно приходит unknown[ip.add.re.ss]

Я еще написал скрипт простой на перле (см. ниже), в функцию приходят все эти значения. Что вот только еще придумать пока не знаю. Пока по geoip их отрубаю.

Сделал client.pcre: if

Сделал client.pcre:

if /[a-z]/
if !/^unknown/
/([0-9]{1,3}[x\.-]){3}/ REJECT  rDNS client SPAM
/([\.-][^\.-]*){5}/      REJECT  rDNS client SPAM
/(^d)|(^u)|(host|(dyn(amic|-ip)?)|(ppp(oe)?)|([ax]?dsl)|(dial(up|-in)?)|(cust(omer)?)|(i?net)|line|pool|node|static|broadband|cable|nat|client|ip|dhcp|codetel)[\.-]?([0-9]{1,3}[\.-]){2}/      REJECT  rDNS client SPAM
/([\.-][0-9]{1,3}){2}[\.-]?(host|(dyn(amic|-ip)?)|(ppp(oe)?)|([ax]?dsl)|(dial(up|-in)?)|(cust(omer)?)|(i?net)|line|pool|node|static|broadband|cable|nat|client|ip|dhcp|codetel)/        REJECT  rDNS client SPAM
endif
endif

Почему-то когда unknown туда прилетает именно unknown[IP] ?!!
Для всех остальных сначала client name, потом IP.

Еще поменял порядок

Цитата:
reject_non_fqdn_recipient
reject_unknown_recipient_domain

я так понимаю стоят вначале чтобы пользователь не мог письмо отправить в никуда.
Для этого, если отправлять рассылку, нужно убирать из нее все дохлые адреса, что для пользователя оказалось очень сложно.
А без этого, что происходит с письмом - bounced?

При записи client.pcre

При записи client.pcre допустил опечатку, котораz есть и в helo.pcre
Третье правило выглядит так:

/((^d)|(^u)|host|(dyn(amic|-ip)?)|(ppp(oe)?)|([ax]?dsl)|(dial(up|-in)?)|(cust(omer)?)|(i?net)|line|pool|node|static|broadband|cable|nat|client|ip|dhcp|codetel)[\.-]?([0-9]{1,3}[\.-]){2}/      REJECT  rDNS client SPAM

Изменения с (^d)|(^u)

Почитал ссылку которую Вы

Почитал ссылку которую Вы дали по статистике RBL.
Поставил на пробу самые эффективные, без ложных срабатыванй:

 reject_rbl_client zen.spamhaus.org
 reject_rbl_client bl.spamcop.net
 reject_rbl_client b.barracudacentral.org
 reject_rbl_client cbl.abuseat.org
 reject_rbl_client psbl.surriel.com

Порядок пока такой. Взял на основе
http://stats.dnsbl.com/ и http://www.sdsc.edu/~jeff/spam/cbc.html
l2.apews.org дает ложные срабатывания,
t1.dnsbl.net.au платный,
а для использования b.barracudacentral.org нужна регистрация.
Отзывы есть, что он лучше zen, так что я зарегистрировался.
Про bl.spamcop.net пишут, что он дополняет zen на 3,8%.
Вот мы и проверим. Мне именно нужны дополнения к zen, те, что перекрываются покажут ноль.
Здесь статистика по странам-спамерам - http://www.barracudacentral.org/data/spam
Россия на 3-м месте.
Штаты и Россию я не могу выкинуть, а вот остальные страны спокойно режутся "обкуренным убийцей" -
Бразилия, Турция, Нидерланды, Китай, Польша = 20% - пятая часть!!!
Остается еще вопрос с динамическими адресами - у Вас аж два списка.
Проверю пока эти, выберу какие нужно, потом посмотрим.
И потом исправленный dul_checks у меня хорошо работает :)

Вот первая статистика:mail

Вот первая статистика:

mail ~ # cat /var/log/mail.log | grep blocked | awk '{print($20)}' | sort | uniq -c | sort -r -n
    363 zen.spamhaus.org;
     58 b.barracudacentral.org;
      4 psbl.surriel.com;
      1 bl.spamcop.net;

Как и ожидалось баракуда вырвалась вперед.
Однако заблокировала 2-х клиентов -
mail.csu.ru[195.54.14.68] - Челябинский Государственный Университет
mx.rgs.ru[194.84.56.197] - Росгосстрах.

Видимо, придется отказаться.
Может эту баракуду лучше к SpamAssassin прикрутить?
Уточнил про t1.dnsbl.net.au - вроде бесплатный?

Поменял порядок:

 reject_rbl_client zen.spamhaus.org
 reject_rbl_client bl.spamcop.net
 reject_rbl_client t1.dnsbl.net.au
 reject_rbl_client psbl.surriel.com
  # reject_rbl_client b.barracudacentral.org
 reject_rbl_client cbl.abuseat.org

Стало так:

mail new # cat /var/log/mail.log | grep blocked | awk '{print($20)}' | sort | uniq -c | sort -r -n
   1615 zen.spamhaus.org;
     59 b.barracudacentral.org;
     34 psbl.surriel.com;
     23 bl.spamcop.net;

Теперь проверим динамические

 reject_rbl_client zen.spamhaus.org
 reject_rbl_client psbl.surriel.com
 reject_rbl_client bl.spamcop.net
 reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com
 reject_rbl_client noptr.spamrats.com
 reject_rbl_client dyna.spamrats.com
 reject_rbl_client dul.dnsbl.sorbs.net

а t1.dnsbl.net.au и cbl.abuseat.org можно выкинуть.
также проверю пересечение psbl.surriel.com и bl.spamcop.net.

Вот результат:

mail ~ # cat /var/log/mail.log | grep blocked | awk '{print($20)}' | sort | uniq -c | sort -r -n
   2240 zen.spamhaus.org;
    196 karmasphere.email-sender.dnsbl.karmasphere.com;
     47 psbl.surriel.com;
     26 bl.spamcop.net;
      3 dyna.spamrats.com;

По уникальным:

mail ~ # cat /var/log/mail.log | grep blocked | awk '{print($20, $10)}' | sort | uniq | awk '{print($1)}' | uniq -c | sort -r -n
    914 zen.spamhaus.org;
     54 karmasphere.email-sender.dnsbl.karmasphere.com;
     16 psbl.surriel.com;
     16 bl.spamcop.net;
      1 dyna.spamrats.com;

То есть, после psbl.surriel.com bl.spamcop.net не сработал ни разу.
dul.dnsbl.sorbs.net также думаю будет пустой.
karmasphere.email-sender.dnsbl.karmasphere.com можно ставить после zen - больше всего срабатываний.
Дадим еще шанс spamrats - оставлю на день-два, если будет 1-2 срабатывания - выкину.
И подождем с bl.spamcop.net - поставлю его вниз и посмотрю дойдет до него что-нибудь или нет.
Вручную проверил все срабатывания karmasphere.email-sender.dnsbl.karmasphere.com, dyna.spamrats.com - ложных нет!!!
Теперь список такой:

 reject_rbl_client zen.spamhaus.org
 reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com
 reject_rbl_client psbl.surriel.com
 reject_rbl_client dyna.spamrats.com
 reject_rbl_client noptr.spamrats.com
 reject_rbl_client bl.spamcop.net

Проверил и этот список. Вот результаты:

   2931 zen.spamhaus.org;
    339 karmasphere.email-sender.dnsbl.karmasphere.com;
     59 b.barracudacentral.org;
     48 psbl.surriel.com;
     26 bl.spamcop.net;
     15 dyna.spamrats.com;
      1 noptr.spamrats.com;

Теперь напишу нехорошую вещь -
karmasphere опасная штука.
Ставить ее не советую!!!
Вот адреса, которые она зарубила:
forwards7.yandex.ru
forwards5.yandex.ru
fmail.chtpz.ru - завод
relay4.surnet.ru - местный провайдер

Придется и от нее отказаться.

Если уж клиент попал в zen.spamhaus.org, psbl.surriel.com, bl.spamcop.net - срочно будут искать админа, потому что почта не дойдет ни до кого, а вот карму мало кто использует.

Писать whitelist на всех кто случайно туда попал - спасибо не хочу :)

noptr.spamrats.com из-за одного срабатывания в день мне тоже не нужен.
По уникальным - 3 срабатывания от обоих.
Так что dyna.spamrats.com тоде уберу.

окончательно оставляю:

 reject_rbl_client zen.spamhaus.org
 reject_rbl_client psbl.surriel.com
 reject_rbl_client bl.spamcop.net
# reject_rbl_client karmasphere.email-sender.dnsbl.karmasphere.com
# reject_rbl_client b.barracudacentral.org

Под вопросом остается только bl.spamcop.net - что он теперь покажет без karmasphere.email-sender.dnsbl.karmasphere.com, но, в принципе, можно успокоиться - а вдруг zen упадет! :)

А вот с этими 2-мя, которые закомментированы есть идея.
Написать policy-daemon, который проверит клиента на оба RBL, проверить страну по GeoIP, на перле это сделать несложно.
Сделаю что-то типа правила и баллов -
1. вхождение в karmasphere.email-sender.dnsbl.karmasphere.com
2. вхождение в b.barracudacentral.org
3. Страна

Если в стране, которая мне не нужна - до свидания
Если не в моих странах и в любом из списков - до свидания. Мне только Россия важна. Остальные пусть себя исключают из списка.
Остальных пропустим.

Написал-таки я policy

Написал-таки я policy daemon
Скачать можно здесь:

my $SKIP_COUNTRY = "RU"; - страны, которые не проверяем, разделены пробелом.
my $SPAM_COUNTRY = "PL RO"; - страны, откуда почта не нужна.
my @RBL - проверяемые RBL.

на RBL проверяются страны не SKIP_COUNTRY и не SPAM_COUNTRY
postfix получает либо DUNNO - нормально, либо
450 4.7.1 Service is unavailable; Country SPAM
450 4.7.1 Service is unavailable; Blocked using b.barracudacentral.org
450 4.7.1 Service is unavailable; Blocked using karmasphere.email-sender.dnsbl.karmasphere.com

В level=debug facility=mail валится строка вида

Feb  6 22:34:11 mail /usr/sbin/spam.pl[11073]: client_name=mail-in.rian.ru reverse_client_name=mail-in.rian.ru client_address=195.230.73.37 sender=v.sergeev@rian.ru recipient=maineditor@server.ru helo_name=mail-in.rian.ru Country=RU Action=DUNNO

Здесь хочу проверить reverse_client_name и client_name. Что туда приходит вместо unknown.

Еще подумаю, что можно сделать с sender=user@gmail.com

Поставил после

 reject_rbl_client psbl.surriel.com
 reject_rbl_client bl.spamcop.net
 check_policy_service unix:private/spam
#!/usr/bin/perl

use Fcntl;
use Sys::Syslog qw(:DEFAULT setlogsock);

my @RBL = (
"b.barracudacentral.org",
"karmasphere.email-sender.dnsbl.karmasphere.com"
);

my $SKIP_COUNTRY = "RU";
my $SPAM_COUNTRY = "PL RO";

#
# Usage: spam.pl [-v]
#
# How it works: each time a Postfix SMTP server process is started
# it connects to the policy service socket, and Postfix runs one
# instance of this PERL script.  By default, a Postfix SMTP server
# process terminates after 100 seconds of idle time, or after serving
# 100 clients. Thus, the cost of starting this PERL script is smoothed
# out over time.
#
# To run this from /etc/postfix/master.cf:
#
#    spam  unix  -       n       n       -       -       spawn
#      user=nobody argv=/usr/bin/perl /usr/sbin/spam.pl
#
# To use this from Postfix SMTPD, use in /etc/postfix/main.cf:
#
#    smtpd_recipient_restrictions =
#	...
#	reject_unauth_destination
#	check_policy_service unix:private/spam
#	...
#
# NOTE: specify check_policy_service AFTER reject_unauth_destination
# or else your system can become an open relay.
#
# To test this script by hand, execute:
#
#    % perl spam.pl
#
# Each query is a bunch of attributes. Order does not matter, and
# the demo script uses only a few of all the attributes shown below:
#
#    request=smtpd_access_policy
#    protocol_state=RCPT
#    protocol_name=SMTP
#    helo_name=some.domain.tld
#    queue_id=8045F2AB23
#    sender=foo@bar.tld
#    recipient=bar@foo.tld
#    client_address=1.2.3.4
#    client_name=another.domain.tld
#    instance=123.456.7
#    sasl_method=plain
#    sasl_username=you
#    sasl_sender=
#    size=12345
#    [empty line]
#
# The policy server script will answer in the same style, with an
# attribute list followed by a empty line:
#
#    action=dunno
#    [empty line]
#

#
# Syslogging options for verbose mode and for fatal errors.
# NOTE: comment out the $syslog_socktype line if syslogging does not
# work on your system.
#
$syslog_socktype = 'unix'; # inet, unix, stream, console
$syslog_facility="mail";
$syslog_options="pid";
$syslog_priority="debug";

require Net::DNS;
require Net::IP;
require IP::Country::MaxMind;

sub get_country {
        my ($ip) = @_;
        my $reg = IP::Country::MaxMind->new();
        my $cc = $reg->inet_atocc($ip) || "XX";
        return $cc;
}

sub do_rbl_lookup {
        my ($ip,$rbl) = @_;
        my $ip4 = new Net::IP($ip,4);
        my $rev_ip = $ip4->reverse_ip();
        $rev_ip =~ s/in-addr\.arpa\.//;

        my $res = Net::DNS::Resolver->new();
        $res->force_v4(1);
        $res->retry(1);           # If it fails, it fails
        $res->retrans(0);         # If it fails, it fails
        $res->dnsrch(0);          # ignore domain search-list
        $res->defnames(0);        # don't append stuff to end of query
        $res->tcp_timeout(3);     # timeout of 3 seconds only
        $res->udp_timeout(3);     # timeout of 3 seconds only
        $res->persistent_tcp(0);  # bug 3997
        $res->persistent_udp(0);  # bug 3997

        my $packet = $res->send($rev_ip.$rbl, 'A');
        my @answer = $packet->answer;

        return 0 if ((scalar @answer) eq 0);
        return 0 if ($answer[0]->rdatastr ne "127.0.0.2");
        return 1;
}

my $optional_text;

sub is_bad_ip {
        my ($ip) = @_;
        $optional_text = undef;
        my $country = get_country($ip);

        return 0 if ($SKIP_COUNTRY =~ /$country/);

        if ($SPAM_COUNTRY =~ /$country/)
        {
            $optional_text = "Country SPAM";
            return 1;
        }

        foreach my $rbl (@RBL)
        {
                if (do_rbl_lookup($ip,$rbl))
                {
                    $optional_text = "Blocked using ".$rbl;
                    return 1;
                }
        }

        return 0;
}

#
# Demo SMTPD access policy routine. The result is an action just like
# it would be specified on the right-hand side of a Postfix access
# table.  Request attributes are available via the %attr hash.
#

sub smtpd_access_policy {
	my ($client_name, $reverse_client_name, $client_address, $sender, $recipient, $helo_name) = @_;

    # The result can be any action that is allowed in a Postfix access(5) map.
    #
    # To label mail, return ``PREPEND'' headername: headertext
    #
    # In case of success, return ``DUNNO'' instead of ``OK'' so that the
    # check_policy_service restriction can be followed by other restrictions.
    #
    # In case of failure, specify ``DEFER_IF_PERMIT optional text...''
    # so that mail can still be blocked by other access restrictions.
    #
    
    if (is_bad_ip($client_address))
    {
        return "DEFER_IF_PERMIT Service is unavailable; ". $optional_text;
    }
    else
    {
	return "DUNNO";
    }
}

#
# You should not have to make changes below this point.
#
sub LOCK_SH { 1 };	# Shared lock (used for reading).
sub LOCK_EX { 2 };	# Exclusive lock (used for writing).
sub LOCK_NB { 4 };	# Don't block (for testing).
sub LOCK_UN { 8 };	# Release lock.

#
# Log an error and abort.
#
sub fatal_exit {
    my($first) = shift(@_);
    syslog "err", "fatal: $first", @_;
    exit 1;
}

$SIG{'SEGV'} = 'sigsegv_handler';

#
# This process runs as a daemon, so it can't log to a terminal. Use
# syslog so that people can actually see our messages.
#
setlogsock $syslog_socktype;
openlog $0, $syslog_options, $syslog_facility;

#
# We don't need getopt() for now.
#
while ($option = shift(@ARGV)) {
    if ($option eq "-v") {
	$verbose = 1;
    } else {
	syslog $syslog_priority, "Invalid option: %s. Usage: %s [-v]",
		$option, $0;
	exit 1;
    }
}

#
# Unbuffer standard output.
#
select((select(STDOUT), $| = 1)[0]);

#
# Receive a bunch of attributes, evaluate the policy, send the result.
#
while (<STDIN>) {
    if (/([^=]+)=(.*)\n/) {
	$attr{substr($1, 0, 512)} = substr($2, 0, 512);
    } elsif ($_ eq "\n") {
	if ($verbose) {
	    for (keys %attr) {
		syslog $syslog_priority, "Attribute: %s=%s", $_, $attr{$_};
	    }
	}
	fatal_exit "unrecognized request type: '%s'", $attr{request}
	    unless $attr{"request"} eq "smtpd_access_policy";
	$action = smtpd_access_policy($attr{"client_name"},$attr{"reverse_client_name"},$attr{"client_address"},$attr{"sender"},$attr{"recipient"},$attr{"helo_name"});
	my $log_text = "client_name=".$attr{"client_name"}." reverse_client_name=".$attr{"reverse_client_name"}." client_address=".$attr{"client_address"}." sender=".$attr{"sender"}." recipient=".$attr{"recipient"}." helo_name=".$attr{"helo_name"};
	my $country = get_country($attr{"client_address"});

	syslog $syslog_priority, "%s Country=%s Action=%s", $log_text, $country, $action;
	print STDOUT "action=$action\n\n";
	%attr = ();
    } else {
	chop;
	syslog $syslog_priority, "warning: ignoring garbage: %.100s", $_;
    }
}

Статистика за 10 дней

Статистика за 3 недели:

После чего поставил
my $SPAM_COUNTRY = "CZ CN BH PL AR NL BR TW TH KR"; 10 стран.

Таким образом, удалось отрезать 22,3%.

Копать в типах таблиц, если

Копать в типах таблиц, если не забыл. Для айпишников вроде cidr.

ЗЫ postmap сделал для своей таблицы?

Да конечно

Ошибок нет - они валятся в отдельный лог.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".