Решил запомнить для себя те правила, которые обычно ищу…

Для защиты ssh не обязательно ставить fail2ban, Или что-то подобное. Они конечно позволяют настраивать баны более куда более гибко, но сегодня речь о другом способе.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
iptables -N ssh_brute_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 10 минут (600 секунд) с одного адреса было 3 или более НОВЫХ соединений — блокируем этот адрес 
# (не забывайте что за одно соединение у клиента есть несколько попыток авторизации на ssh)
iptables -A ssh_brute_check -m recent --update --seconds 600 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
# Здесь можно разрешать те порты, для которых такая проверка не нужна. Например, HTTP
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP # Что не разрешено — то запрещено