1. Будем банить на 10 минут всех, кто обратится не на открытые порты, например, 5060 и 22.
iptables -A INPUT -m recent --rcheck --seconds 600 --name BANLIST -j DROP
iptables -A INPUT -p tcp -m multiport ! --dports 22,5060 -m recent --set --name BANLIST -j DROP
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 5060 -j ACCEPT
2. Защита от bruteforce средствами iptables на примере ssh порта:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BANLIST --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BANLIST --update --seconds 60 --rttl --hitcount 3 -j DROP
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
Разрешаем только 3 запроса в минуту, третий должен быть удачным, чтобы подключиться, иначе ip адрес уходит в бан на 60 секунд.
Посмотреть содержимое создаваемого списка BANLIST можно так:
cat /proc/net/xt_recent/BANLIST
-m state --state NEW: Это модуль -m state, который используется для работы с состояниями соединений.
Опция --state NEW означает, что правило будет применяться только к новым соединениям.
-m recent --name BANLIST --set:
Это модуль -m recent, который позволяет отслеживать и управлять списками адресов.
Опция --name BANLIST указывает имя списка, которое называется "BANLIST".
Опция --set используется для добавления текущего источника пакета (IP-адреса) в список "BANLIST".