Вдогонку к статье Баним «взломщиков» о FreeBSD пишу аналогичную статью для Linux.
В Linux напрямую вставить список ip-адресвов нельзя. Приходится использовать модуль для iptables ipset (http://ipset.netfilter.org/)
# sudo apt-get install ipset
Основные директивы ipset:
ipset -N {название таблицы} {iphash|nethash} # создание таблицы с данными ip (iphash) или сетей (nethash)
ipset add {таблица} {ip} # добавление в список адресов
ipset -L # вывод таблиц. Для вывода конкретной вписать название
Выборку забаненных будем создавать с помощью grep
Создаем файл mail.deny со следующим содержанием:
#!/bin/bash
cat /var/log/exim4/final > /var/log/exim4/deny/log
# выбираем из файла все неудачные попытки аутентификации
cat /var/log/exim4/mainlog |grep -i «Incorrect auth» >> /var/log/exim4/deny/log
# вырезаем из получившегося файла все ip-адреса
grep -oE «[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}» /var/log/exim4/deny/log >> /var/log/exim4/deny/d1
# убираем собственные ip (WAN, LAN, 127.0.0.1) Был такой случай, что в HELO совали localhost. Пришлось добавить строчку.
cat /var/log/exim4/deny/d1 |grep -v «xxx.xxx.xxx.xxx» | grep -v «192.168.0.» | grep -v «127.0.0.1» > /var/log/exim4/deny/table1
# Сортируем и убираем повторяющиеся значения
cat /var/log/exim4/deny/table1 |sort | uniq > /var/log/exim4/final
## Добавляем правила в ipset, создавая таблицу mail.blacklist из значений файла final
ipset -F mail.blacklist # обнуление таблицы
ipset -N mail.blacklist iphash # создание таблицы mail.blacklist с занесением в таблицу IPmfile=$(cat /var/log/exim4/final)
for ipaddr in $mfile
do
ipset -A mail.blacklist $ipaddr
done
Осталось только вписать в /etc/iptables/rules.v4 правило
-A INPUT -m set (подключаем модуль ipset) —match-set mail.blacklist (совпадение таблицы в ipset) src -p tcp —dport 25 -j LOG —log-prefix «DROP blacklist entry INPUT» #логгирование в kern.log
-A INPUT -m set (подключаем модуль ipset) —match-set mail.blacklist (совпадение таблицы в ipset) src -p tcp -m tcp —dport 25 -j DROP # собственно запрет
И правило должно располагаться ДО разрешающего правила на электронку, т.е.
-A INPUT -m set —match-set mail.blacklist src -p tcp -m tcp —dport 25 -j DROP
-A INPUT -p tcp -m tcp —dport 25 -j ACCEPT
Применяем правила
iptables-apply /etc/iptables/rules.v4
Добавляем mail.deny в crontab
P.S. Чистить список забаненных можно руками или написать опять команду в crontab, удаляющую файлы в директории /var/log/exim4/deny, допустим, с периодичностью раз в неделю.
rm /var/log/exim4/deny/*
P.S.S. Внимательно копируйте команды, приведенные здесь. Особенно дифисы