Я настроил сервер qmail для отклонения сообщений, если получатель не указан в rcpthosts, и я использую tcp-env с xinetd, чтобы позволить локальным процессам отправлять электронные письма всем, кто добавляет следующую строку в /etc/hosts.allow
:
tcp-env: 127.0.0.1 : setenv RELAYCLIENT
Во время тестов все работает правильно:
$ telnet mydomain.com 25
Trying xxx.xxx.xxx.xxx...
Connected to mydomain.com.
Escape character is '^]'.
220 mydomain.com ESMTP
HELO
250 mydomain.com
MAIL FROM: someone@gmail.com
250 ok
RCPT TO: anyone@gmail.com
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
В реальной жизни в очереди много таких сообщений:
2744522 (1, remote)
Envelope Sender:
Envelope Recipient: 34c8a4690@ip-37-201-81-252.unitymediagroup.de (To Be Delivered)
Date: 22 Apr 2014 07:38:14 -0000
From: MAILER-DAEMON@mydomain.com
To: 34c8a4690@ip-37-201-81-252.unitymediagroup.de
Subject: failure notice
Size: 18.45KB (18889 Bytes)
QMail должен отправлять уведомление о сбое для доменов, перечисленных в rcpthosts, и должен отклонять электронные письма для доменов, не указанных в нем, без отправки уведомления о сбое.
Может ли кто-нибудь объяснить мне, что я делаю не так?
Спасибо!
Одним из недостатков qmail является то, что по умолчанию он не проверяет локальную часть адреса получателя перед тем, как принять сообщение. Все, что он делает, это проверяет, находится ли домен получателя в списке разрешенных доменов получателя. (Это был вполне разумный выбор дизайна в начале 1990-х годов. В настоящее время это не так.) Это означает, что, например, спамеры, использующие словарный спрей, могут заполнить ваш сервер, рассылая миллионы писем несуществующим получателям. Когда qmail пытается доставить сообщения, он обнаруживает, что локальная часть не существует, и генерирует рикошет. А поскольку спамеры подделывают отправителя конверта, ваш сервер не сможет доставить эти сообщения, и он заполнит очередь.
Лучшее решение - вообще не принимать эти электронные письма. Если ваш сервер может сразу отклонять электронные письма RCPT TO:nonexistent@example.com
, то отправляющим почтовым сервером будет выдавать возврат, и вы не получите сообщения о недоставке.
Другим решением было бы уменьшить количество времени, в течение которого qmail будет продолжать попытки доставки сообщений о недоставке, чтобы они были удалены раньше и, таким образом, также не заполняли очередь.
И, конечно же, вы можете фильтровать входящий спам и отбрасывать его вместо того, чтобы позволить ему генерировать отказы.
Единственный способ добиться этого - исправить qmail, чтобы qmail-smtpd
проверим местные запчасти. Вы не можете сделать это только с помощью параметров конфигурации, вам нужно исправить, перекомпилировать и установить исправленный qmail-smtpd
.
Для этого есть несколько различных патчей. Я не могу рекомендовать какой-либо один из них по сравнению с другим - когда я управлял серверами qmail, у нас была другая система, действующая как прокси, которая выполняла эту фильтрацию, поэтому мне никогда не приходилось ее использовать. Но вы можете найти несколько патчей на netdevice.com/wmail/rcptck и code.dogmap.org/qmail/.
Если это можно сделать только для отказов, я не знаю как. Но вы можете сделать это для всех писем, изменив значение queuelifetime
. man qmail-control
должен рассказать вам, как это сделать.
О фильтрации спама можно сказать слишком много, чтобы дать здесь один единственный ответ. Я бы начал с рассмотрения черных списков в стиле RBL и отклонил соединения с IP-адресов, перечисленных в них. Конечно, вам нужно тщательно выбирать свои черные списки, и вы рискуете заблокировать «настоящую» почту. Информация о фильтрации спама специально для qmail доступна по адресу Howto по борьбе со спамом в qmail от Криса Харди, а информацию о различных списках черных дыр можно найти на spamhaus.org.
Надеюсь, для начала хватит. Я использую qmail уже пару десятилетий, включая запуск почтовой системы для ISP с несколькими миллионами пользователей - но я также должен добавить, что если бы я установил такую систему сейчас, qmail больше не был бы моим первым выбором . Когда он был создан, это был очень хороший почтовый сервер, и он отлично справлялся со многими вещами, но в настоящее время я, вероятно, выбрал бы postfix. Время и спамеры ушли, а qmail - нет.