Как защитить SSH сервер от атаки методом перебора (грубой силой — брут-форсинга) используя fail2ban

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

fail2ban — это хорошо известный, с открытым кодом фреймворк по предотвращению вторжений для Linux, он мониторит различные лог-файлы системы (например, /var/log/auth.log or /var/log/secure) и автоматически задействуют различные способы защиты против выявленных подозрительных действий. На самом деле, fail2ban может быть очень полезен для защиты против атак по перебору паролей на SSH сервер.

В этом уроке я продемонстрирую как установить и настроить fail2ban для защиты SSH сервера против атак брут-форсингом с удалённых IP адресов.

Установка Fail2ban на Linux

Для установки fail2ban на CentOS или RHEL, сначала, установите репозиторий EPEL, и затем выполните следующую команду.

$ sudo yum install fail2ban

Для установки fail2ban на Fedora, просто запустите:

$ sudo yum install fail2ban

Для установки fail2ban на Ubuntu, Debian или Linux Mint:

$ sudo apt-get install fail2ban

Настройка Fail2ban для SSH сервера

Сейчас вы готовы для конфигурирования fail2ban для усиления вашего SSH сервера. Вам нужно отредактировать конфигурационный файл в /etc/fail2ban/jail.conf. Конфигурационный файл содержит секцию «DEFAULT», где вы определяете параметры по умолчанию для всех сервисов, которые мониторятся, и специфичные для каждого сервиса секции, где вы определяете любые специфичные для сервиса джэйлы (например SSH, Apache и т. д.) для перезаписи параметров по умолчанию.

В секции джейлов определённых сервисов (где-то после секции [DEFAULT]) вам нужно задать секцию [ssh-iptables], где вы зададите особые настройки для джэйлов SSH. Текущий бан IP адресов делается iptables.

Последующий пример в /etc/fail2ban/jail.conf, который содержит настройку джэйла «ssh-iptables». Конечно, там могут быть и другие джейлы для разных приложений, в зависимости от ваших нужд.

$ sudo vi /etc/fail2ban/jail.local

[DEFAULT]
# разделённый пробелами список IP адресов, CIDR префиксов или DNS имён хостов
# для обхода защиты fail2ban
ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24
# количество секунд, на которое блокируется клиент
bantime = 86400
# количество неудачных попыток, после которых происходит блокировка
maxretry = 5
# количество секунд в течение которых накопительно фиксируются неудачные попытки
findtime = 600
mta = sendmail
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]
# для основанных на Debian дистрибутивов
logpath = /var/log/auth.log
# для основанных на Red Hat дистрибутивах
logpath = /var/log/secure
# специфичный для ssh порог максимальных попыток
maxretry = 3

В соответствии с приведённой конфигурацией, fail2ban будет автоматически банить любые удалённые IP адреса, с которых поступило хотя бы 3 неудачных попытки за последние 10 минут. Однажды забаненный, IP нарушителя будет оставаться заблокированным в течение 24 часов. Уведомление об этом событии будет отправлено по почте.

После того, как конфигурационный файл готов, перезапустите службу fail2ban как показано ниже.

На Debian, Ubuntu или CentOS/RHEL 6:

$ sudo service fail2ban restart

На Fedora или CentOS/RHEL 7:

$ sudo systemctl restart fail2ban

Чтобы проверить, успешно ли запущен fail2ban, выполните команду fail2ban-client с аргументом «ping». Если служба fail2ban запущена нормально, вы должны увидеть ответ «pong».

$ sudo fail2ban-client ping
Server replied: pong

Тестирование защиты с Fail2ban на SSH от атаки перебором паролей

Чтобы проверить, работает ли fail2ban, попробуйте войти на сервер SSH используя неверный пароль для симуляции брут-форс атаки. В то же время, проверяйте /var/log/fail2ban.log, который записывает все интересные события, которые происходят в fail2ban.

$ sudo tail -f /var/log/fail2ban.log

15882084127_93ce562651_o

Согласно логу выше, fail2ban забанил IP адрес 192.168.1.8, поскольку выявил множественные ошибки в попытка залогиниться на SSH с этого IP адреса.

Проверка статуса Fail2ban и разблокировка заблокированных IP адресов

Джейл «ssh-iptables» в fail2ban использует iptables для блокировки IP адресов нарушителей, вы можете легко проверить бан, посмотрев текущие правила iptables как показано ниже.

$ sudo iptables --list -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain fail2ban-SSH (1 references)
target prot opt source destination
DROP all -- 192.168.1.8 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Если вы хотите разблокировать IP адреса от fail2ban, вы можете также выполнить команду iptables:

$ sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP

В то время, как вы можете проверять и управлять списком заблокированных IP в fail2ban вручную с помощью команд iptables, как было показано, верным способом, на самом деле, является использование инструмента командной строки ail2ban-client. Этот инструмент позволяет вам управлять не только джэйлом «ssh-iptables», но также любыми другими типами джэйлов fail2ban в унифицированным интерфейсе командной строки.

Для проверки статуса fail2ban (который покажет список активных в настоящее время джейлов):

$ sudo fail2ban-client status

Чтобы проверить статус конкретного джейла (например, ssh-iptables):

$ sudo fail2ban-client status ssh-iptables

Вышеприведённая команда покажет список забаненных IP адресов.

16067847655_e8c6d8546b_o

Для разблокировки конкретного IP адреса:

$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8

16065915571_19db9d1335_o

Обратите внимание, если вы остановите fail2ban, все заблокированные IP адреса будут разблокированы. Когда вы перезапустите fail2ban, он найдёт список IP адресов нарушителей из /var/log/secure (или /var/log/auth.log) и перезабанит эти IP адреса, если не истекло время бана.

Установка Fail2ban на автозагрузку и включении

После того, как вы успешно протестировали fail2ban, последним шагов по задействованию fail2ban является автоматический запуск при включении питания сервера. На основанных на Debian дистрибутивах, автозапуск fail2ban включен по умолчанию. На основанных на Red Hat дистрибутивах, включите автостарт следующим способом.

На CentOS/RHEL 6:

$ sudo chkconfig fail2ban on

На Fedora или CentOS/RHEL 7:

$ sudo systemctl enable fail2ban

Итог

В этом уроке я продемонстрировал как установить и настроить fail2ban для защиты SSH сервера. Хотя fail2ban может смягчить атаку перебором паролей, пожалуйста помните, он не может защитить SSH сервера против сложных (распределённых) кампаний по брут-форсингу, когда атакующие обходят fail2ban используя тысячи подконтрольных ботам IP адресов.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *