Баним попытки взлома сервисов с помощью ipset
Вторник, сентября 22, 2015 | Автор:

Вдогонку к статье Баним «взломщиков» о 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 с занесением в таблицу IP

mfile=$(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. Внимательно копируйте команды, приведенные здесь. Особенно дифисы