Защита от сканирования портов.

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

и открыть 22 и 5060

iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --syn --dport 5060 -j ACCEPT

Попробуйте с помощью telnet тыкнуться в любой другой порт, отличный от 22 и 5060. Тут же получите бан.

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

и открыть 22

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".