IPTABLES + IPSET, чтобы забанить большие списки ip адресов

iptables — это широко используемое программное обеспечение брандмауэра в Linux. Использование iptables для блокировки IP — относительно простой способ борьбы с сетевыми атаками. Он также относительно распространен, но в качестве структуры данных использует связанные списки, а эффективность очень низкая.

ipset — предоставляет метод, он заключается в помещении обрабатываемого IP-адреса в набор и установке правила iptables для этого набора. Как и iptable, наборы IP — это элементы ядра Linux, а команда ipset — это инструмент для управления ими.

Таким образом, стратегия запрета состоит из трех шагов: iptables включает правило запрета, обнаруживает плохой IP-адрес и добавляет плохой IP-адрес в правило запрета.

Вы можете использовать эти команды для обобщения процесса блокировки IP-адресов с помощью ipset и iptables.

# Создаем набор список с названием ipban
ipset create ipban hash:ip hashsize 16777216 maxelem 16777216
# Создаем правило запрещающее всему списку ip в наборе ipban доступ
iptables -I INPUT -m set --match-set ipban src -j DROP
# Сохраняем правило
service iptables save
# Проверяем правило
iptables -L --line-numbers | grep ipban
# добавляем ip в список
ipset add ipban 4.5.6.7 
ipset add ipban 1.2.3.4 
ipset add ipban ...
# Просмотр списка ipban 
ipset list ipban
# Удаление ip из списка ipban
ipset del ipban 4.5.6.7

Iptables как забанить или разбанить ip

Баним перманентно и сохраняем это правило

/sbin/iptables -I INPUT -s xxx.xxx.xxx.xxx -p tcp -j DROP && /sbin/service iptables save

или подсеть

/sbin/iptables -I INPUT -s xxx.xxx.xxx.0/24 -p tcp -j DROP && /sbin/service iptables save

Как разбанить ip в iptables

Из командной строки

/sbin/iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Или по номеру строки

/sbin/iptables -L INPUT -n --line-numbers | grep xxx.xxx.xxx.xxx

в ответ получаем следующее

5    DROP       tcp  --  xxx.xxx.xxx.xxx      0.0.0.0/0

данное правило у нас находится на 5 строке, ее и нужно удалить

/sbin/iptables -D INPUT 5

Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов

Возможно, есть способы и попроще, но я сделал так.

Защищать будем, например, Asterisk (по-умолчанию порт для протокола SIP 5060)

Создаем новую цепочку:

iptables -N asterisk-manual
iptables -I INPUT -i eth0 -p udp --dport 5060 -j asterisk-manual
Читать далее «Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов»