Борьба с почтовым спамом
Общая информация
Проверить спамерскую активность в своей сети можно командой tcpdump на почтовом сервере:
# tcpdump port 25
чтобы просмотреть трафик пользователя:
# tcpdump host 10.0.0.10
по умолчанию прослушивается интерфейс eth0. Для прослушивания другого интерфейса указываем его в параметре i:
# tcpdump host 10.0.0.10 -i eth1
Средства Postfix
Правила на время установления соединения
Можно добавить ограничения средствами самого Postfix ещё во время соединения (hand shake). Эти правила позволят немного снизить входящий трафик, так как неудовлетворящие правилам сообщения не будут приняты. Вот описания правил из официальной документации:
# These restrictions apply in the context of the SMTP HELO command. smtpd_helo_required = yes smtpd_delay_reject = yes smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access, permit
Файл helo_access может выглядеть так:
64.170.162.98 REJECT Get lost - you're lying about who you are mail.mydomain.ru REJECT Get lost - you're lying about who you are
Первая строка откидывает тех, кто пытается нас убедить, что у него наш ip адрес (при настройке не забудьте заменить на свой!), вторая - тех кто представляется нашим же DNS именем. Вот ещё несколько ограничений в контексте команды RCPT TO:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
- Дополнительную информацию можно почерпнуть из статьи Blocking spammers with Postfix HELO controls
Фильтр для темы сообщения
Будем отсеивать все сообщения содержащие в теме письма определённые слова. Для этого добавим в /etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
и создадим (или добавляем в существующий) файл /etc/postfix/header_checks, в котором пропишем правило отсева сообщений в теме которых содержаться слова: sex, viagra, seduce, naked:
/^Subject.*(sex|viagra|seduce|naked)/ FILTER REJECT:
Спам фильтры
Можно воспользоваться различными спам-фильтрами как, например, spamassassin.
Добавить адрес и/или домен в белый список можно в файле /etc/spamassassin/local.cf в конце в формате:
whitelist_from postmaster@domain1.ru whitelist_from *@domain2.ru
Статьи в помощь:
- http://lists.altlinux.ru/pipermail/sisyphus/2003-October/029572.html - небольшой разбор полётов по работе spamassassin
- http://www.informit.com/articles/article.aspx?p=375704&seqNum=2 - как прикрутить spamassassin к Postfix (на англ)
Механизм серых списков
Можно использовать механизм серых списков (grey listing). Принцип его работы - временный отказ в принятии почты в надежде, что спамеры не будут повторять отправку. Не очень хороший способ, поскольку замедляет доставку почты и увеличивает трафик самого Интернета, так как почтовые сервера вынуждены отправлять одно сообщение несколько раз, но трафик от провайдера уменьшиться на величину объёма отказанных писем. Пока этот способ довольно действенен.
Postgrey - одно из таких приложений.
Статьи в помощь:
- http://www.greylisting.org/ - о технологии серых списков на английском
- http://isg.ee.ethz.ch/tools/postgrey/ - Postgrey - Postfix Greylisting Policy Server
- http://www.postfix.org/SMTPD_POLICY_README.html#greylist - Postfix SMTP Access Policy Delegation
Списки блокировок
В Интернете есть несколько специальных сервисов ведущих учёт спамеров. Можно подключить их списки к своему почтовому серверу.
Вот несколько сервисов:
Смотреть также статью: Списки блокировки спамеров.
Sender Policy Framework (SPF)
Механизм SPF позволяет добавить в DNS текстовую запись, описывающую более детально специфику работы почтового сервера, указать ограничения, снижающие спамерскую активность.
Пример SPF записи в DNS:
example.org. IN TXT "v=spf1 +a +mx -all"
- v=spf1 -- определяет используемую версию SPF. Далее следует перечисление механизмов верификации
- +a -- разрешает приём писем от всех IP-адресов, перечисленных в A-записи DNS для example.org
- +mx -- разрешает приём писем, если отправляющий IP указан в одной из MX-записей DNS для example.org
- -all -- не принимать сообщения, не прошедшие верификацию
Подробнее:
См. также
- http://spamlinks.net -- Набор ссылок на многочисленные инструменты борьбы со спамом и проверки уязвимости собственной системы.