Fail2Ban - это бесплатный инструмент предотвращения вторжений с открытым исходным кодом. Он написан на языке программирования Python и используется для защиты вашего Linux-сервера от атак перебора логинов. Если какая-либо служба требует аутентификации в вашей системе, то злоумышленники и боты пытаются сломать вашу систему аутентификации, постоянно аутентифицируясь с помощью различных учетных данных. SSH является хорошим примером такого типа сервиса, который является первым выбором злоумышленников и ботов для атак методом грубой силы.
Как работает Fail2Ban?
Fail2Ban отслеживает файлы журналов сервера (такие как /var/log/auth.log, /var/log/apache/access.log) на предмет попыток вторжения и другой подозрительной активности. После того, как с удаленного узла было обнаружено заданное количество отказов, Fail2Ban автоматически блокирует его IP-адрес на определенное время. Fail2Ban может найти любые удаленные IP-адреса, которые пытаются сделать слишком много попыток входа в систему. После обнаружения неправомерного IP-адреса, Fail2Ban может выполнить несколько действий, таких как обновление правил брандмауэра Iptable, добавление IP-адреса в таблицу hosts.deny TCP Wrapper, отправка уведомления по электронной почте и любое другое действие, определенное пользователем.
Fail2Ban обеспечивает защиту различных сервисов, таких как FTP, SSH, Apache, Webmin, Docker, WordPress и, по сути, любого сервиса, который записывает информацию в лог-файлы, от атак грубой силы.
В этой статье мы покажем вам, как установить и настроить Fail2Ban для защиты вашего сервера от атак грубой силы для некоторых распространенных сервисов.
Как установить Fail2Ban
По умолчанию Fail2Ban установлен в стеке Webdock LAMP/LEMP. Если он не установлен, вы можете установить его с помощью следующей команды:
1 | sudo apt install fail2ban -y |
После установки Fail2Ban вы можете проверить его состояние с помощью следующей команды:
1 | sudo systemctl status fail2ban |
Как настроить Fail2Ban?
Файлы конфигурации Fail2Ban находятся в каталоге /etc/fail2ban. Вы можете проверить их с помощью следующей команды:
1 | sudo ls -l /etc/fail2ban/ |
Вы должны увидеть следующий результат:
Где jail.conf является основным конфигурационным файлом со всеми доступными опциями. В jail.conf содержится конфигурация jail для многих сервисов, таких как HTTP, FTP, SSH, Squid, Monit, Horde, Drupal и других. Вам просто нужно добавить "enabled = true" под каждым разделом конфигурации jail, чтобы включить конкретный jail.
Ниже приведено краткое объяснение наиболее часто используемых параметров конфигурации:
- port: Определите имя службы или порт службы.
- logpath: Определите имя файла журнала, который проверяет fail2ban.
- bantime: Определите количество секунд, в течение которых хост будет заблокирован fail2ban.
- maxretry: Определите максимальное количество неудачных попыток входа в систему, которое разрешается хосту, прежде чем он будет заблокирован.
- ignoreip: Определите IP-адреса, которые fail2ban будет игнорировать.
Рекомендуется настраивать Fail2Ban путем создания нового конфигурационного файла с именем конкретной службы /etc/fail2ban/jail.d/ вместо редактирования существующего файла jail.conf.
Настройка Fail2Ban для SSH
В Ubuntu Fail2Ban для SSH должен быть автоматически включен после установки Fail2Ban, но вы можете проверить, действительно ли он включен в основном файле jail.conf или проверив состояние jail с помощью CLI, как показано в разделах ниже.
Чтобы вручную настроить Fail2Ban для SSH, вам нужно создать файл jail.local:
1 | sudo nano /etc/fail2ban/jail.d/sshd.conf |
Добавьте следующие строки:
1 2 3 4 5 6 7 8 | [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 120 ignoreip = whitelist-IP |
Сохраните и закройте файл, когда закончите, затем перезапустите службу Fail2Ban, чтобы применить изменения.
1 | sudo systemctl restart fail2ban |
Приведенная выше конфигурация будет блокировать удаленные IP после трех неудачных попыток входа на ваш сервер через SSH. IP удаленного узла будет заблокирован на 120 секунд.
Настройка Fail2Ban для Webmin
Чтобы защитить Webmin с помощью Fail2Ban, отредактируйте файл jail.local, как показано ниже:
1 | sudo nano /etc/fail2ban/jail.d/webmin.conf |
Добавьте следующие строки:
1 2 3 4 5 6 7 | [webmin-auth] enabled = true port = 10000 filter = webmin-auth logpath = /var/log/auth.log maxretry = 3 bantime = 120 |
Сохраните и закройте файл, когда закончите, затем перезапустите службу Fail2Ban, чтобы применить изменения.
1 | sudo systemctl restart fail2ban |
Эта конфигурация будет отслеживать файлы /var/log/auth на предмет неудачных попыток входа в Webmin и блокировать их на 120 секунд.
Настройка Fail2Ban для WordPress
Чтобы защитить админ-панель WordPress с помощью Fail2Ban, вам нужно загрузить файл конфигурации фильтра Fail2ban для WordPress. Вы можете загрузить его с помощью следующей команды:
1 | sudo wget https://plugins.svn.wordpress.org/wp-fail2ban/trunk/filters.d/wordpress-hard.conf -O /etc/fail2ban/filter.d/wordpress.conf |
Затем создайте джейл для WordPress, отредактировав файл jail.local:
1 | sudo nano /etc/fail2ban/jail.d/wordpress.conf |
Добавьте следующие строки:
1 2 3 4 5 6 7 | [wordpress] enabled = true filter = wordpress logpath = /var/log/auth.log maxretry = 3 port = http,https bantime = 300 |
Сохраните и закройте файл, когда закончите, перезапустите службу Fail2Ban, чтобы применить изменения.
1 | sudo systemctl restart fail2ban |
Настройка Fail2Ban для ProFTP
Чтобы настроить Fail2Ban для ProFTP, отредактируйте файл jail.local:
1 | sudo nano /etc/fail2ban/jail.d/proftp.conf |
Добавьте следующие строки:
1 2 3 4 5 6 7 | [proftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = proftpd logpath = /var/log/proftpd/proftpd.log maxretry = 3 bantime = 300 |
Сохраните и закройте файл, когда закончите, перезапустите службу Fail2Ban, чтобы применить изменения.
1 | sudo systemctl restart fail2ban |
Как проверить состояние ловушки
Вы можете получить список всех активированных джейлов Fail2Ban, выполнив следующую команду:
1 | sudo fail2ban-client status |
Вы должны получить все активированные jail в следующем выводе:
Если вы хотите проверить статус запрета конкретной тюрьмы Fail2Ban (SSH), выполните следующую команду:
1 | sudo fail2ban-client status sshd |
Вы должны увидеть все IP, запрещенные Fail2Ban, в следующем выводе:
Вы также можете проверить журнал Fail2Ban на наличие запрещенных IP:
1 | sudo tail -f /var/log/fail2ban.log |
Если вы хотите заблокировать какой-либо удаленный IP-адрес вручную для службы SSH, выполните следующую команду:
1 | sudo fail2ban-client set sshd banip [remote-ip-address] |
Вы также можете проверить правила Iptables, добавленные Fail2Ban, с помощью следующей команды:
1 | sudo iptables -nL |
Как снять запрет с IP-адресов, забаненных Fail2Ban
По умолчанию Fail2ban автоматически снимает запрет с запрещенных IP через заданный интервал времени, который вы указали в файле jail.local.
Чтобы снять запрет с запрещенного IP вручную, выполните следующую команду:
1 | sudo fail2ban-client set sshd unbanip [remote-ip-address] |
Вы также можете добавить доверенные удаленные IP-адреса в файл jail.local, чтобы Fail2Ban игнорировал эти IP-адреса.
1 | sudo nano /etc/fail2ban/jail.local |
Добавьте следующие строки в верхней части файла:
1 2 | [DEFAULT] ignoreip = [trusted-ip1] [trusted-ip2] |
Сохраните и закройте файл. Затем перезапустите Fail2Ban, чтобы применить конфигурацию.
1 | sudo systemctl restart fail2ban |
Заключение
В этом руководстве вы узнали, как установить и настроить Fail2Ban для различных служб на веб-сервере. Мы надеемся, что это поможет вам настроить Fail2Ban для других сервисов, чтобы остановить злоумышленников от взлома вашего сайта.