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

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

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 # Что не разрешено — то запрещено

Для управления iptables в debian 7, 8 удобно использовать netfilter-persistent (iptables-persistent).

apt-get update
apt-get install netfilter-persistent chkconfig
chkconfig netfilter-persistent on


Управление производится простыми командами

invoke-rc.d netfilter-persistent {flush, force-reload, reload, restart, save, start}
flush - очистить правила
reload - загрузить из файлов
save - сохранить в файлы
В debian и ubuntu добавили пакет iptables-persistent
который использует iptables-save/iptables-restore

#service iptables-persistent 
 Usage: /etc/init.d/iptables-persistent {start|restart|reload|force-reload|save|flush}


после настройки правил как нужно, сделать service iptables-persistent save и при следующей загрузке они будут применены

При покупке нового VPS сервера поставил перед собой задачи большей защищённости SSH.
Конечно можно перенести SSH на другой порт, в следствии чего количество попыток взлома очень сильно падает, но это не мой вариант.

Что будем делать: установим базу GeoIP, привяжем её к iptables, разрешим доступ к SSH только из нужной нам страны (UA), даже на Украину повесим fail2ban, для желающих попробовать свои возможности во взломах SSH с Украины.

Зачем эти сложности, ведь можно только моему IP разрешить доступ? Всё дело в том что замечена следующая ситуация, как только уезжаешь из дома к кому--то в гости, сразу же происходит что-то не адекватное с сервером, нужно зайти по SSH и всё исправить. Но если мы разрешим доступ только для домашнего IP, то с гостей уже не зайдём. Было решено разрешить доступ только украинским IP адресам, чтоб не волноваться.

Приступим же...

 

yum install xtables-addons perl-Text-CSV_XS