Блокировка брутфорс атак c помощью iptables
Начиная примерно с 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 -L
Удалить все правила
iptables -F
Это один из тысячь примеров как можно использовать iptables, есть еще много интересных правил которые можно использовать для борьбы легкими dos, ddos, flood атаками, http post брутфорсами, и так далее.
Ссылки
Краткое описание и список команд можно посмотреть на wikipedia
Руководство iptables