среда, 30 июля 2008 г.

Бедный relay...

Давненько я не писал...

Вобщем такая задача:
Есть почтовый релей на sendmail, на нем идет сканирование через spamassassint, clamav. Среднее количество писем в секунду - 7. Очередь писем очень большая, увеличиваеться на 10 писем в минуту. Эффективные при данной проблеме спамлисты делают reject еще и нужным пользователям.

Разобрки проблемы:
1) 98% писем идущих через релей - спам
2) 90% спама - сканирующий спам (случайная переборка пользователей с целью получить список рассылки)
3) очередь большая именно из-за попытки седмайла отправить нотайс на отсутсвующего пользователя (серверов или нет, или там нет пользователя)

Решение проблемы:
1) настройка smf-spf на релее. Описание настройки - смотри /usr/share/doc
2) создание базы данных зарегестрированных пользователей на релее.
Этого можно достичь за счет включения недокументированной функции:
FEATURE(`access_db', `',`relaytofulladdress')
define(`_RELAY_FULL_ADDR_',`1')
После этого собираете на сервере или серверах на которые релеиться почта список всех допустимых пользователей (не забудьте про алиасы). Далее 2 решения:
I) вносите адреса в access в формате:
To:user@domain RELAY
II) вносите адреса в mailertable в формате описанном выше, в конце пишете:
To:domain ERROR:5.1.1:550 Unknown user
Конечно вместо "550 Unknown user" можете вписать все что угодно. Собственно это единственное различие второго метода от первого - в первом reject в ошибкой "Relaying denied" и фиг что с этим сделаешь :)

Далее - вопрос Вам на смекалку - синхронизация пользователей на почтовых серверах и на релееях.