В сети нашел интересный инструмент для защиты SSH от взлома, который называется Fail2ban. Часто бывает, что кто-то настойчиво долбится по стандартному порту (у SSH — это 22 порт), перебирая пароли и пытаясь получить доступ к серверу. Конечно, можно перевесить стандартный порт на что-то экзотическое, к примеру, на 2341-й порт. Но, как показывает практика, и это не спасает от брутфорса, т.к. с помощью сканеров можно легко найти нужный порт для атаки. Без сомнения, защита SSH — одна из самых важных задач, т.к. если злоумышленник завладеет доступом к нему — то пиши пропало!
Кстати, как вариант, можно ограничить спиcок IP-адресов, которым разрешен доступ к SSH. Если администратором являетесь только вы, и у вас статичный IP — то это хороший вариант. Но часто бывает, что IP динамический, что зайти к себе на сервер через SSH нужно с соседа или с другой точки доступа и т.д.
И так, что же из себя представляет Fail2ban? В его задачи, по мимо защиты SSH, входит также и защита FTP, SMTP, Apache и др. Как работает? Демон Fail2ban находит постоянно повторяющиеся неудачные попытки с одного и того же IP-адреса или хоста, после чего дальнейшие попытки залогиниться с этого IP-адреса/хоста блокируются с помощью правила iptables.
Устанавливается пакет Fail2ban в ОС Debian очень легко, так как есть в стандартных репозиториях:
apt-get install fail2ban
По-умолчанию, Fail2ban настроен на защиту SSH, но можно применить правила и для других сервисов. Для этого необходимо произвести изменения в файле конфигруации:
/etc/fail2ban/jail.conf
В опции destemail меняем дефолтный e-mail на свой, если хотим получать на почту уведомления о попытке атаки на ваш сервер. По мимо SSH, как уже отмечалось выше, можно применить правила защиты и для других сервисов. Для этого достаточно найти соответствующую секцию с названием сервиса и отредактировать параметры исходя из собственных предпочтений. Ниже я привожу пояснения к доступным параметрам:
- ignoreip — это разделенный пробелами список ip-адресов, которые не могут быть блокированы fail2ban. Сюда можно занести свою локальную машину или комьютер, с которого будут проводится эксперименты над системой.
- bantime — время в секунда, на которое блокируется хост. По-умолчанию равно 600 секундам, т.е. 10 минутам.
- maxretry — максимальное число ошибочных попыток доступа к сервису, прежде чем хост будет заблокирован fail2ban.
- filter — имя соответствующего файла-фильтра в /etc/fail2ban/filter.d, без конечного .conf
- action — имя соответствующего файла-реакции на срабатывание фильтра в /etc/fail2ban/action.d
- logpath — файл логов, мониторинг которого осуществляет fail2ban, для проверки попыток атак.
- enabled — правило может принимать значение true или false (включено или выключено).
После того, как все изменения в конфигурационный файл будут произведены, необходимо произвести перезапуск демона:
/etc/init.d/fail2ban restart
Если необходимо проанализировать логи, которые ведет Fail2ban, то можно выполнить следующее:
cat /var/log/fail2ban.log
Если кто-то уже заблокирован, то в логах вы увидите примерно следующее:
2011-01-25 12:00:39,531 fail2ban.actions: WARNING [ssh] Ban 81.9.5.200
2011-01-25 12:07:43,326 fail2ban.actions: WARNING [ssh] Unban 81.9.5.200
Можно также проанализировать файрволл, посмотрев, заблокированы ли какие-нибудь хосты:
iptables -L
Проверка конфигурации:
fail2ban-client -d
Рекомендую также прочитать руководство по использованию Fail2ban, которое доступно на официальном сайте.