Безопасность · 6 min read · Dec 03, 2025

Предотвращение атак методом подбора с помощью Fail2ban на Mandriva 2008.1

Предотвращение атак методом подбора с помощью Fail2ban на Mandriva 2008.1

Версия 1.0
Автор: Фалько Тимме

В этой статье я покажу, как установить и настроить fail2ban на системе Mandriva 2008.1. 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, который доступен для Mandriva 2008.1. Он поставляется с конфигурацией по умолчанию, но, к сожалению, эта конфигурация не совсем подходит для большинства из упомянутых сервисов. Поэтому я создам индивидуальную конфигурацию fail2ban, которую я протестировал и которая работает для меня.

2 Установка fail2ban

Перед установкой любых пакетов мы должны включить основные репозитории, обновления основных, contrib и обновления contrib. Перейдите на http://easyurpmi.zarb.org/ - он должен предоставить вам команды, которые нужно выполнить для включения этих репозиториев. В моем случае я выполнил

urpmi.addmedia contrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/release with media_info/hdlist.cz
urpmi.addmedia --update contrib_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/updates with media_info/hdlist.cz
urpmi.addmedia main ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/release with media_info/hdlist.cz
urpmi.addmedia --update main_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/updates with media_info/hdlist.cz

Fail2ban можно установить следующим образом:

urpmi fail2ban

Затем мы запускаем 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 # # Автор: Cyril Jaquier # # $Revision: 617 $ # # 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/auth.log 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/proftpd/proftpd.log maxretry = 6 [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/info.log [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/httpd/*error_log maxretry = 6 [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail/info.log bantime = 300 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/auth.log [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [apache-badbots] enabled = false filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/www/*/logs/access_log bantime = 172800 maxretry = 1 [apache-shorewall] enabled = false filter = apache-noscript action = shorewall sendmail[name=Postfix, [email protected]] logpath = /var/log/apache2/error_log [ssh-ipfw] enabled = false filter = sshd action = ipfw[localhost=192.168.0.1] sendmail-whois[name="SSH,IPFW", [email protected]] logpath = /var/log/auth.log ignoreip = 168.192.0.1 [named-refused-udp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=udp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 [named-refused-tcp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=tcp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 |

Мой клиентский компьютер имеет статический 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 не подходят для Mandriva 2008.1.

Каждый раз, когда мы изменяем конфигурацию fail2ban, мы должны перезапустить fail2ban, так что сейчас мы это и сделаем:

/etc/init.d/fail2ban restart

Вот и все. Fail2ban записывает логи в /var/log/fail2ban.log, так что вы можете проверить этот файл, чтобы узнать, были ли заблокированы какие-либо хосты. Если хост был заблокирован fail2ban, это выглядит так:

2008-08-12 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4  
2008-08-12 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4  
2008-08-12 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4  
2008-08-12 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4

Вы также можете проверить свой брандмауэр, чтобы увидеть, есть ли в настоящее время заблокированные хосты. Просто выполните

iptables -L

Для сервисов, которые используют TCPWrappers для блокировки хостов, посмотрите на /etc/hosts.deny.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.