Безопасность · 6 min read · Dec 30, 2025
Предотвращение атак грубой силы с помощью Fail2ban на OpenSUSE 10.3
Предотвращение атак грубой силы с помощью Fail2ban на OpenSUSE 10.3
Версия 1.0
Автор: Фалько Тимме
В этой статье я покажу, как установить и настроить fail2ban на системе OpenSUSE 10.3. Fail2ban — это инструмент, который наблюдает за попытками входа в различные сервисы, например, SSH, FTP, SMTP, Apache и т. д., и если он находит неудачные попытки входа снова и снова с одного и того же IP-адреса или хоста, fail2ban останавливает дальнейшие попытки входа с этого IP-адреса/хоста, блокируя его с помощью правила брандмауэра iptables.
Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот способ, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
Fail2ban похож на DenyHosts, который я описывал в этом учебном пособии: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, но в отличие от DenyHosts, который сосредоточен на SSH, fail2ban может быть настроен для мониторинга любого сервиса, который записывает попытки входа в файл журнала, и вместо использования только /etc/hosts.deny для блокировки IP-адресов/хостов, fail2ban может использовать iptables и /etc/hosts.deny.
В этом примере я настрою fail2ban для мониторинга попыток входа на SSH-сервер, сервер Proftpd, попыток входа на защищенные веб-сайты .htaccess/.htpasswd, на Courier POP3 и Courier IMAP, а также на SASL (для отправки электронных писем). Я установлю пакет fail2ban, который доступен для OpenSUSE 10.3. Он поставляется с конфигурацией по умолчанию, но, к сожалению, эта конфигурация не совсем подходит для большинства вышеупомянутых сервисов. Поэтому я создам индивидуальную конфигурацию fail2ban, которую я протестировал и которая работает для меня.
2 Установка fail2ban
Fail2ban доступен из репозитория Packman, поэтому сначала мы должны его активировать:
yast2 В YaST перейдите в Программное обеспечение > Сообщество репозиториев:

Затем активируйте репозиторий Packman и нажмите [Завершить]:

После этого выйдите из YaST:

После этого fail2ban можно установить следующим образом:
yast2 -i fail2banЗатем мы должны создать ссылки для автозагрузки системы для fail2ban и запустить его:
chkconfig –add fail2ban
/etc/init.d/fail2ban start
Вы найдете все файлы конфигурации fail2ban в директории /etc/fail2ban.
3 Настройка fail2ban
Поведение по умолчанию fail2ban настраивается в файле /etc/fail2ban/jail.conf. Взгляните на него, его несложно понять. Есть раздел [DEFAULT], который применяется ко всем другим разделам, если параметры по умолчанию не переопределены в других разделах.
Я объясню некоторые параметры конфигурации здесь:
- ignoreip: Это список IP-адресов, разделенных пробелами, которые не могут быть заблокированы fail2ban. Например, если компьютер, с которого вы подключаетесь к серверу, имеет статический IP-адрес, вы можете захотеть указать его здесь.
- bantime: Время в секундах, в течение которого хост блокируется, если он был пойман fail2ban (600 секунд = 10 минут).
- maxretry: Макс. количество неудачных попыток входа, прежде чем хост будет заблокирован fail2ban.
- filter: Ссылается на соответствующий файл фильтра в /etc/fail2ban/filter.d.
- action: Ссылается на соответствующий файл действия в /etc/fail2ban/action.d.
- logpath: Файл журнала, который проверяет fail2ban на наличие неудачных попыток входа.
Вот как выглядит мой файл /etc/fail2ban/jail.conf:
vi /etc/fail2ban/jail.conf| # Файл конфигурации Fail2Ban # # Автор: Сирил Жакье # # $Revision: 611 $ # # DEFAULT позволяет глобально определить параметры. Их можно переопределить # в каждой тюрьме впоследствии. [DEFAULT] # "ignoreip" может быть IP-адресом, маской CIDR или DNS-хостом. Fail2ban не будет # банить хост, который соответствует адресу из этого списка. Несколько адресов можно # определить с помощью разделителя пробелов. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" — это количество секунд, в течение которых хост забанен. bantime = 600 # Хост забанен, если он сгенерировал "maxretry" за последние "findtime" # секунд. findtime = 600 # "maxretry" — это количество неудач, прежде чем хост будет забанен. maxretry = 3 # "backend" указывает на бэкенд, используемый для получения модификации файлов. Доступные # параметры: "gamin", "polling" и "auto". Этот параметр также можно переопределить в # каждой тюрьме (используйте "gamin" для одной тюрьмы и "polling" для другой). # # gamin: требует установки Gamin (монитор изменения файлов). Если Gamin # не установлен, Fail2ban будет использовать polling. # polling: использует алгоритм опроса, который не требует внешних библиотек. # auto: выберет Gamin, если он доступен, и polling в противном случае. backend = auto # Эта тюрьма соответствует стандартной конфигурации в Fail2ban 0.6. # Действие mail-whois отправляет уведомление по электронной почте с запросом whois # в теле. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/messages maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/messages maxretry = 6 # Эта тюрьма принуждает бэкенд к "polling". [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail # Здесь мы используем TCP-Wrappers вместо Netfilter/Iptables. "ignoreregex" используется # для избежания бана пользователя "myuser". [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/messages # Эта тюрьма демонстрирует использование подстановочных знаков в "logpath". # Более того, можно указать другие файлы на новой строке. [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/apache2/error_log maxretry = 6 # Путь hosts.deny можно определить с помощью аргумента "file", если он не находится # в /etc. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail bantime = 300 # Не банить никого. Просто сообщать информацию о удаленном хосте. # Уведомление отправляется не чаще чем каждые 600 секунд (bantime). [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # То же самое, что и выше, но с баном IP-адреса. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Блокировать хосты, которые агент идентифицирует как спам-роботов, сканирующих веб # для адресов электронной почты. Выходы почты буферизуются. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/log/apache2/access_log bantime = 172800 maxretry = 1 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 |
Мой клиентский компьютер имеет статический IP-адрес 192.168.0.99, и поскольку я не хочу быть заблокированным, я добавил его в список ignoreip.
Я хочу контролировать попытки входа на SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP и Sasl, поэтому я установил enabled в true для этих сервисов и в false для всех остальных сервисов. Обратите внимание, что некоторые сервисы, такие как SSH, могут быть заблокированы либо с помощью iptables, либо с помощью TCPWrappers (/etc/hosts.deny). Решите сами, какой метод вы предпочитаете.
Убедитесь, что вы заменили адрес электронной почты [email protected] на свой собственный адрес электронной почты, чтобы вы получали уведомления, когда кто-то будет заблокирован fail2ban.
Если вы сравните файл с конфигурацией по умолчанию /etc/fail2ban/jail.conf, вы также заметите, что я изменил некоторые файлы журналов, потому что файлы журналов в конфигурации по умолчанию /etc/fail2ban/jail.conf не подходят для OpenSUSE 10.3.
Каждый раз, когда мы изменяем конфигурацию fail2ban, мы должны перезапустить fail2ban, так что сейчас мы это и сделаем:
/etc/init.d/fail2ban restartВот и все. Fail2ban ведет журнал в /var/log/fail2ban.log, так что вы можете проверить этот файл, чтобы узнать, какие хосты были заблокированы. Если хост был заблокирован fail2ban, это выглядит так:
2007-10-07 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2007-10-07 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2007-10-07 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-10-07 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4
Вы также можете проверить свой брандмауэр, чтобы увидеть, какие хосты в настоящее время заблокированы. Просто выполните
iptables -L Для сервисов, которые используют TCPWrappers для блокировки хостов, посмотрите на /etc/hosts.deny.
Ссылки
- Fail2ban: http://www.fail2ban.org
- OpenSUSE: http://www.opensuse.org
Get new posts in your inbox
No spam. Unsubscribe anytime.