Pull to refresh

Почта на сервере (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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.