Начиная примерно с 2005-го года увеличилось количество брутфорс атак на SSH сервис. Даже если ваш сервер хорошо зищищен, например установлены последнии версии всех пакетов это не значит что подобрать пароль к ftp,ssh,pop и другим сервисам не является возможным. Любой хакер может сорвать джекпот, подобрав пароль к одному из сервисов установленных на вашем сервере, но только в том случае если ваш фаервол бездействует.
Хватит всего 2-х iptables правил, что бы остановить брутфорс атаку на SSH.
Логи
Вот вам пример из файла auth.log. Как видите боты генерируют разные комбинации логин:пароль и пытаются авторизироваться на разных сервисах.
Jul 12 22:42:46 hostname sshd[10955]: Illegal user office from 211.191.73.xxx
Jul 12 22:42:46 hostname sshd[10855]: Failed password for illegal user office from 213.191.73.xxx port 53033 ssh2
Jul 12 22:42:46 hostname sshd[10957]: Illegal user samba from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10957]: Failed password for illegal user samba from 213.191.74.xxx port 53712 ssh2
Jul 12 22:42:46 hostname sshd[10959]: Illegal user tomcat from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10959]: Failed password for illegal user tomcat from 213.191.74.xxx port 54393 ssh2
Jul 12 22:42:46 hostname sshd[10961]: Illegal user webadmin from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10961]: Failed password for illegal user webadmin from 213.191.74.xxx port 55099 ssh2
Feb 7 06:52:33 sitename24 sshd[31992]: Failed password for root from 87.244.yy.xx port 36490 ssh2
Feb 7 06:52:35 sitename24 sshd[32017]: Failed password for invalid user oracle from 87.244.24.38 port 36917 ssh2
Feb 7 06:52:38 sitename24 sshd[32040]: Failed password for invalid user test from 87.244.yy.xx port 37254 ssh2
Кратко о iptables.
Iptables – это стандартный фаервол в Linux, который я использую у себя на Debian машинах, по умолчанию он установлен и готов к работе. Изначально количество правил равно – 0.
Есть еще утилиты такие как fail2ban, которые занимаются примерно тем же что мы сейчас хотим сделать. Но я выбрал путь использовать iptables потому что он работает на уровне ядра и на сетевом уровне, т.е нагрузка на процессор будет минимальная, а fail2ban занимается тем что парсит логи, ищет там брутфорс атаки и блокирует вредителей.
Обезопасим себя
Пока вы тестируете новые правила для iptables, лучше позаботиться о своей безопасности, что бы не случилось так, что вы сами себя заблокируете, после чего не сможете удаленно подключиться к своему серверу по SSH протоколу.
Для этого пропишем в crontab-e следующее:
*/10 * * * * /sbin/iptables -F
Теперь если вдруг окажется, что вы заблокировали себя, crontab очистит таблицу с правилами через 10 минут, и вы сможете снова подключиться
Два правила
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
-i eth0 это сетевой интерфейс на котором висит SSH. Обычно по умолчанию у многих это eth0, но если у вас другой, уважите его. Посмотореть каие у вас в системе интерфейсы можно используя утилиту ifconfig.
Готово! Теперь все входящие подключения на ваш SSH сервис – лимитированы, максимальное количество попыток подключиться – 8 в минуту. Нормальные пользователи без проблем смогут пользоваться дальше SSH сервисом, а почти все брут-форс атаки на SSH будут блокироваться нашим фаерволом iptables.
Вывести список правил в iptables
Удалить все правила
Это один из тысячь примеров как можно использовать iptables, есть еще много интересных правил которые можно использовать для борьбы легкими dos, ddos, flood атаками, http post брутфорсами, и так далее.
Ссылки
Краткое описание и список команд можно посмотреть на wikipedia
Руководство iptables