Поиск по сайту:

Как защитить SSH-сервер от перебора с помощью fail2ban


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

fail2ban — это хорошо известная платформа предотвращения вторжений с открытым исходным кодом в Linux, которая отслеживает различные файлы системного журнала (например, /var/log/auth.log или / 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]
# a space delimited list of IP addresses, CIDR prefixes, or DNS hostnames
# to bypass fail2ban protection
ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24

# number of seconds during which a client host is blocked
bantime = 86400

# number of failures before a client host is blocked
maxretry = 5

# number of seconds within which "maxentry" failures result in banning
findtime = 600

mta = sendmail

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email , [email ]
# for Debian-based distros
logpath = /var/log/auth.log
# for Red Hat-based distros
logpath = /var/log/secure
# ssh-specific max-retry threshold
maxretry = 3

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

Когда файл конфигурации будет готов, перезапустите службу 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

Протестируйте защиту от атак грубой силы SSH с помощью fail2ban

Чтобы проверить, работает ли fail2ban, попробуйте подключиться к серверу по SSH, используя неправильные пароли, чтобы имитировать атаку грубой силы. Тем временем следите за файлом /var/log/fail2ban.log, в котором регистрируются все интересные события, происходящие в fail2ban.


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

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

Проверьте статус fail2ban и разблокируйте заблокированные IP-адреса

Поскольку тюрьма fail2ban ssh-iptables использует 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, как указано выше, на самом деле правильным способом является использование fail2ban-client. инструмент командной строки. Этот инструмент позволяет вам управлять не только джейлами ssh-iptables, но и любыми другими типами джейлов fail2ban в едином интерфейсе командной строки.

Чтобы проверить статус fail2ban (который покажет список активных в данный момент джейлов):


$ sudo fail2ban-client status

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


$ sudo fail2ban-client status ssh-iptables

Приведенная выше команда покажет список запрещенных IP-адресов.

Чтобы разблокировать определенный IP-адрес:


$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8

Обратите внимание: если вы остановите 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-адресов, контролируемых ботами.

Статьи по данной тематике: