Как стать автором
Обновить

Почта на сервере (centos) — блокируем спамеров на уровне iptables

Centos+Exim+Fail2ban+iptables, фильтры и конфигурация


Недавно обнаружилась на одном из серверов проблема с MTA. Ящики юзеров были довольно таки старые по времени существования, и количество сыпавшегося на них спама превышало все мыслимые пределы.
Естественно была произведена настройка конфигурационного файла exim`a (dnsbl, ehlo, postgrey, spamassassin, bounce отлуп и т.д).
Спам удачно режется до вменяемого уровня, spamassasin обучается, но количество коннектов на сервер от всяких редисок от этого, естественно, не уменьшается. Вплоть до затруднений в прохождении нормальной почты.
Количество процессов exim доходило до 350-600.
Возникла идея покопать в сторону fail2ban+iptables и вот что из этого вышло:

Естественно, должен быть установлен iptables и сконфигурирован
/etc/sysconfig/iptables

Устанавливаем fail2ban и прописываем в автозагрузку
yum install fail2ban
chkconfig --level 234 fail2ban on


Редактируем конфиг fail2ban:

Редактируем /etc/fail2ban/fail2ban.conf
# Тут единственное что изменил, вывод не в SYSLOG, а в файл
# logtarget = SYSLOG
logtarget = /var/log/fail2ban.log


Редактируем /etc/fail2ban/jail.conf
Первым делом проверяем все фильтры — на всех должно быть прописано
enabled = false
во избежании срабатывания того, чего нам пока не надобно.
Проверяем дефолтную секцию, если у Вас выделенный ip у провайдера, дописываем его к
ignoreip — так ваш ip точно не попадет ни в какой фильтр
[DEFAULT]
ignoreip = 127.0.0.1, ваш_ip
bantime = 600
findtime = 900
maxretry = 3
backend = auto

Пишем свою секцию на exim
[exim]
enabled = true #включаем свой фильтр
filter = exim # имя фильтра в директории /etc/fail2ban/filter.d/
# далее указываем какой файл(ы) в директории /etc/fail2ban/action.d/ будут отрабатывать
# на срабатывание фильтра. Я тут использую iptables.conf (занесение ip в iptables) и
# sendmail.conf (отправка сообщения от fail2ban о блокировании/разблокировании ip на почту)
# пояснения к передаваемым атрибутам
# iptables:
# name=Exim - будет дописано к названию цепочки(chain) в iptables
# port=smtp - какой порт будет заблокирован у ip
# protocol=tcp - какой протокол будет заблокирован у ip
# sendmail:
# name=exim-spam-dnsbl - добавляется к теме письма
# dest=ваша@почта - ваш почтовый ящик, куда будут приходить сообщения
# sender=fail2ban@localhost - соответственно от кого будет приходить почта
action = iptables[name=Exim, port=smtp, protocol=tcp]
sendmail[name=exim-spam-dnsbl, dest=ваша@почта, sender=fail2ban@localhost]
logpath = /var/log/exim/main.log # путь до лог файла exim`a
# сколько раз нужно сработать фильтру, что бы сработал action, иными словами, если ip "засветился"
# в логе 2 раза и подходит по регулярным выражениям фильтра, то срабатывает action, и ip заносится
# в iptables
maxretry = 2
# На сколько времени баним ip
bantime = 18000


Та же самая секция jail.conf без комментариев
[exim]
enabled = true
filter = exim
action = iptables[name=Exim, port=smtp, protocol=tcp]
sendmail[name=exim-spam-dnsbl, dest=noc@rain-media.ru, sender=fail2ban@localhost]
logpath = /var/log/exim/main.log
maxretry = 2
bantime = 18000


Редактируем /etc/fail2ban/filter.d/exim.conf
failregex = \[<HOST>\] .*(?:rejected by local_scan|Unrouteable address)
\[<HOST>\] .*Dnsbl blocked
\[<HOST>\] .*Sender verify failed
\[<HOST>\] .*relay not permitted


Пояснения.
У меня, к сожалению количество статей по regexp ещё не превратилось в качество, но я стараюсь.
По этому брал с интернета, руководствуясь здравым смыслом.
Просматривая файл /var/log/exim/main.log у меня получились именно такие фразы
Unrouteable address
Dnsbl blocked
Sender verify failed
relay not permitted


P.S. Подозреваю, что строчка
failregex = \[<HOST>\] .*(?:rejected by local_scan|Unrouteable address|Dnsbl blocked|Sender verify failed|relay not permitted)
то же прекрасно бы сработала.
\[<HOST>\], как я понял, передает action`у IP, на который сработал фильтр.

Запускаем fail2ban:
service fail2ban start

и смотрим почту, которую указали в dest= или просматриваем /var/log/fail2ban.log на предмет забаненных IP

Итог: в начале сервер немного прибалдел от работы fail2ban (скорее всего из за размера лога exim) до LA 4-10, но потом состояние выправилось, логи exim уменьшились на порядок, количество процессов exim в пределах 10-50.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.