В современном цифровом ландшафте защита вашей системы от несанкционированного доступа крайне важна. Fail2Ban - это инструмент безопасности с открытым исходным кодом, который может помочь в этом. Он автоматически сканирует файлы журналов на предмет подозрительного поведения и запрещает IP-адреса нарушителей, предотвращая дальнейшие попытки несанкционированного доступа. Настраиваемые тюрьмы обеспечивают дополнительный уровень безопасности, позволяя создавать индивидуальные фильтры и действия для определенных приложений или служб. В этой статье мы рассмотрим 20 примеров конфигураций для пользовательских jails, а также примеры команд и параметров конфигурации, которые помогут вам начать работу.
Как работает Fail2Ban
Fail2Ban - это инструмент безопасности с открытым исходным кодом, предназначенный для защиты вашего сервера от несанкционированного доступа путем сканирования файлов журнала на предмет многочисленных неудачных попыток входа в систему или других вредоносных действий. При обнаружении такой активности он запрещает IP-адрес нарушителя, предотвращая дальнейшие попытки несанкционированного доступа. Это помогает минимизировать риск атак методом перебора и других угроз безопасности.
Преимущества использования Fail2Ban
Fail2Ban предоставляет несколько ключевых преимуществ, помогающих обеспечить безопасность вашего сервера:
- Автоматическая блокировка IP-адресов: Fail2Ban сканирует файлы журналов и автоматически запрещает IP-адреса с подозрительным поведением.
- Персонализация: Вы можете создавать пользовательские тюрьмы и фильтры в соответствии с конкретными потребностями вашего сервера.
- Расширяемость: Fail2Ban поддерживает множество сервисов и приложений, обеспечивая комплексную защиту.
Понимание пользовательских тюрем
Зачем создавать пользовательские тюрьмы?
Пользовательские тюрьмы обеспечивают дополнительный уровень безопасности, позволяя задавать уникальные фильтры и действия для определенных приложений или служб. Создавая пользовательские тюрьмы, вы можете лучше защитить свой сервер от целевых атак и обеспечить оптимальную производительность.
Компоненты пользовательской тюрьмы
Чтобы создать пользовательскую тюрьму, вы должны понимать три ее основных компонента: фильтр, действие и конфигурацию.
Фильтр
Фильтр определяет шаблон, который Fail2Ban ищет в файлах журнала. Обычно этот шаблон представляет собой регулярное выражение, которое соответствует записям журнала, указывающим на вредоносную активность. Создавая пользовательские фильтры, вы можете идентифицировать и блокировать определенные типы атак, например, повторные попытки входа в систему или атаки "грубой силы".
Действие
Действие определяет, что должен сделать Fail2Ban после обнаружения совпадения в файлах журнала. Это может включать в себя запрет IP-адреса нарушителя, отправку уведомлений или выполнение пользовательских сценариев. Определяя пользовательские действия, вы можете реагировать на атаки так, как это соответствует вашим требованиям безопасности.
Конфигурация тюрьмы
Конфигурация тюрьмы связывает фильтр и действие вместе, указывая файл журнала для мониторинга, время запрета и другие параметры. Настроив эти параметры, вы можете точно настроить пользовательскую тюрьму в соответствии с конкретными потребностями вашего сервера.
Понимание этих компонентов позволяет создавать пользовательские тюрьмы, обеспечивающие целенаправленную защиту от конкретных угроз безопасности.
20 примеров конфигураций пользовательских тюрем
В этом разделе рассматриваются 20 примеров конфигураций пользовательских джейлов. Эти примеры помогут вам лучше понять, как создавать пользовательские фильтры, действия и конфигурации для защиты вашего сервера. Каждая конфигурация предназначена для защиты от определенного типа угроз безопасности, таких как атаки перебором SSH или атаки аутентификации Nginx HTTP.
Важно отметить, что эти примеры являются лишь отправной точкой - они могут быть изменены в соответствии с уникальными потребностями вашего сервера. Как говорилось ранее, вы можете создавать пользовательские тюрьмы, которые обеспечивают целенаправленную защиту от конкретных угроз безопасности, если поймете компоненты пользовательской тюрьмы.
Защита от перебора SSH:
Создайте пользовательский джейл для защиты от атак SSH brute-force путем сканирования файла журнала SSH на наличие нескольких неудачных попыток входа в систему в указанный промежуток времени.
1 2 3 4 5 6 7 8 | [sshd-custom] enabled = true filter = sshd logpath = /var/log/auth.log bantime = 3600 findtime = 600 maxretry = 3 action = iptables-multiport[name=sshd, port="ssh", protocol=tcp] |
HTTP-аутентификация Nginx:
Настройте джейл для защиты от атак грубой силы, направленных на HTTP-аутентификацию Nginx, путем мониторинга журналов Nginx на предмет повторных неудачных попыток аутентификации.
1 2 3 4 5 6 7 8 | [nginx-http-auth-custom] enabled = true filter = nginx-http-auth logpath = /var/log/nginx/error.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=nginx, port="http,https", protocol=tcp] |
SMTP-аутентификация Postfix:
Настройте пользовательский джейл для защиты почтового сервера Postfix от SMTP-атак методом грубой силы, отслеживая журналы Postfix на предмет повторяющихся сбоев аутентификации.
1 2 3 4 5 6 7 8 | [postfix-smtp-auth-custom] enabled = true filter = postfix-auth logpath = /var/log/mail.log bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=postfix, port="smtp", protocol=tcp] |
Аутентификация IMAP/POP3 в Dovecot:
Реализуйте пользовательский джейл для защиты почтового сервера Dovecot от атак перебора аутентификации IMAP и POP3, отслеживая файлы журнала Dovecot на предмет повторяющихся сбоев аутентификации.
1 2 3 4 5 6 7 8 | [dovecot-imap-pop3-auth-custom] enabled = true filter = dovecot-auth logpath = /var/log/dovecot.log bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=dovecot, port="imap,imaps,pop3,pop3s", protocol=tcp] |
Защита входа в систему WordPress:
Создайте пользовательский джейл для защиты сайта WordPress от атак на вход "грубой силы", сканируя журнал доступа на предмет нескольких неудачных попыток входа.
1 2 3 4 5 6 7 8 | [wordpress-login-custom] enabled = true filter = wordpress-auth logpath = /var/log/nginx/access.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp] |
Защита аутентификации MySQL:
Защитите свой сервер MySQL от атак грубой силы, направленных на аутентификацию MySQL, путем мониторинга журнала ошибок MySQL.
1 2 3 4 5 6 7 8 | [mysql-auth-custom] enabled = true filter = mysql-auth logpath = /var/log/mysql/error.log bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=mysql, port="3306", protocol=tcp] |
Защита входа на FTP:
Настройте пользовательский джейл для защиты FTP-сервера от атак на вход "грубой силы", отслеживая журнал FTP-сервера.
1 2 3 4 5 6 7 8 | [vsftpd-custom] enabled = true filter = vsftpd logpath = /var/log/vsftpd.log bantime = 3600 findtime = 600 maxretry = 3 action = iptables-multiport[name=vsftpd, port="ftp", protocol=tcp]/* Your code... */ |
Защита аутентификации Apache:
Настройте пользовательский джейл для защиты сервера Apache от атак грубой силы, направленных на HTTP-аутентификацию путем сканирования файлов журнала Apache.
1 2 3 4 5 6 7 8 | [apache-auth-custom] enabled = true filter = apache-auth logpath = /var/log/apache2/error.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=apache, port="http,https", protocol=tcp] |
Защита входа в веб-почту Roundcube:
Реализуйте пользовательский джейл для защиты веб-почты Roundcube от атак перебора логинов путем мониторинга файлов журнала Roundcube.
1 2 3 4 5 6 7 8 | [roundcube-auth-custom] enabled = true filter = roundcube-auth logpath = /var/log/roundcube/errors.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=roundcube, port="http,https", protocol=tcp]/* Your code... */ |
Защита общего доступа к файлам Samba:
Создайте пользовательскую тюрьму для защиты файлообменного сервера Samba от атак методом перебора, отслеживая файлы журнала Samba.
1 2 3 4 5 6 7 8 | [samba-custom] enabled = true filter = samba logpath = /var/log/samba/log.* bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=samba, port="139,445", protocol=tcp] |
Защита входа в систему Joomla:
Настройте пользовательский джейл для защиты сайта Joomla от атак перебором путем сканирования журнала доступа на предмет неудачных попыток входа.
1 2 3 4 5 6 7 8 | [joomla-login-custom] enabled = true filter = joomla-auth logpath = /var/log/nginx/access.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=joomla, port="http,https", protocol=tcp] |
Защита входа в систему Drupal:
Создайте пользовательский джейл для защиты вашего сайта Drupal от атак перебора логинов, отслеживая журнал доступа на предмет многочисленных неудачных попыток входа.
1 2 3 4 5 6 7 8 | [drupal-login-custom] enabled = true filter = drupal-auth logpath = /var/log/nginx/access.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=drupal, port="http,https", protocol=tcp] |
Защита входа в систему Moodle:
Внедрите пользовательский джейл для защиты вашей платформы электронного обучения Moodle от атак перебором путем сканирования журнала доступа на предмет повторных неудачных попыток входа.
1 2 3 4 5 6 7 8 | [moodle-login-custom] enabled = true filter = moodle-auth logpath = /var/log/nginx/access.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=moodle, port="http,https", protocol=tcp] |
Защита входа в Nextcloud:
Настройте пользовательский джейл для защиты экземпляра Nextcloud от атак перебора логинов, отслеживая файл журнала Nextcloud на предмет нескольких неудачных попыток входа.
1 2 3 4 5 6 7 8 | [nextcloud-login-custom] enabled = true filter = nextcloud-auth logpath = /var/nextcloud/data/nextcloud.log bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=nextcloud, port="http,https", protocol=tcp] |
Защита входа в ProFTPD:
Настройте пользовательский джейл для защиты вашего сервера ProFTPD от атак перебора путем сканирования файла журнала ProFTPD на предмет повторных неудачных попыток входа.
1 2 3 4 5 6 7 8 | [proftpd-custom] enabled = true filter = proftpd logpath = /var/log/proftpd/proftpd.log bantime = 3600 findtime = 600 maxretry = 3 action = iptables-multiport[name=proftpd, port="ftp", protocol=tcp] |
Защита аутентификации OpenVPN:
Создайте пользовательский джейл для защиты вашего сервера OpenVPN от атак перебора аутентификации путем мониторинга файлов журнала OpenVPN.
1 2 3 4 5 6 7 8 | [openvpn-auth-custom] enabled = true filter = openvpn logpath = /var/log/openvpn.log bantime = 3600 findtime = 600 maxretry = 3 action = iptables-multiport[name=openvpn, port="1194", protocol=udp] |
Защита SMTP-аутентификации Exim:
Настройте пользовательский джейл для защиты почтового сервера Exim от атак перебора SMTP-аутентификации путем сканирования файлов журнала Exim.
1 2 3 4 5 6 7 8 | [exim-smtp-auth-custom] enabled = true filter = exim-auth logpath = /var/log/exim/main.log bantime = 3600 findtime = 600 maxretry = 5 action = iptables-multiport[name=exim, port="smtp", protocol=tcp] |
Защита входа в панель Plesk:
Внедрите пользовательский джейл для защиты панели Plesk от атак перебора логинов, отслеживая в логах Plesk многочисленные неудачные попытки входа.
1 2 3 4 5 6 7 8 | [plesk-panel-login-custom] enabled = true filter = plesk-panel-auth logpath = /var/log/plesk/panel.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=plesk, port="http,https", protocol=tcp] |
Защита входа в cPanel:
Настройте пользовательский джейл для защиты вашего сервера cPanel от атак перебора логинов путем сканирования файлов журнала cPanel на предмет повторных неудачных попыток входа.
1 2 3 4 5 6 7 8 | [cpanel-login-custom] enabled = true filter = cpanel-auth logpath = /var/log/cpanel/login_log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=cpanel, port="2082,2083,2086,2087", protocol=tcp] |
Защита входа в Webmin:
Создайте пользовательский джейл для защиты сервера Webmin от атак перебора логинов, отслеживая файлы журнала Webmin на предмет нескольких неудачных попыток входа.
1 2 3 4 5 6 7 8 | [webmin-login-custom] enabled = true filter = webmin-auth logpath = /var/log/webmin/miniserv.log bantime = 1800 findtime = 300 maxretry = 5 action = iptables-multiport[name=webmin, port="10000", protocol=tcp] |
Устранение неполадок: Общие проблемы с пользовательскими фильтрами Fail2Ban
Создание пользовательских фильтров Fail2Ban иногда может привести к ошибкам или неожиданному поведению. В этом разделе об устранении неполадок будут рассмотрены некоторые общие проблемы и способы их решения.
Копирование пользовательских фильтров:
При копировании пользовательских фильтров из других источников помещайте их в правильную директорию. По умолчанию пользовательские фильтры должны быть размещены в каталоге /etc/fail2ban/filter.d. После копирования фильтра убедитесь, что файл имеет правильные разрешения и права собственности.
Пример:
1 2 3 | sudo cp custom-filter.conf /etc/fail2ban/filter.d/ sudo chown root:root /etc/fail2ban/filter.d/custom-filter.conf sudo chmod 644 /etc/fail2ban/filter.d/custom-filter.conf |
Неправильный путь к журналу:
Убедитесь, что директива logpath в конфигурации вашей пользовательской тюрьмы указывает на правильный файл журнала для приложения или службы, которую вы защищаете. Например, Nginx и Apache используют разные пути к журналу:
Nginx: /var/log/nginx/access.log
Apache: /var/log/apache2/access.log
Пример (для защиты Joomla с помощью Nginx):
1 2 3 4 5 | [joomla-login-custom] включено = true фильтр = joomla-auth logpath = /var/log/nginx/access.log ... |
Несовместимые регулярные выражения:
Убедитесь, что регулярные выражения в вашем пользовательском фильтре соответствуют формату файла журнала приложения или службы, которую вы защищаете. Несовместимые регулярные выражения могут привести к тому, что Fail2Ban не сможет правильно определить неудачные попытки входа в систему.
Чтобы проверить регулярные выражения, используйте команду fail2ban-regex:
1 | sudo fail2ban-regex /path/to/logfile /etc/fail2ban/filter.d/custom-filter.conf |
Если тест показывает, что ваше регулярное выражение не соответствует ни одной строке в файле журнала, пересмотрите фильтр и при необходимости скорректируйте регулярное выражение.
Отсутствующее или неправильное действие:
Убедитесь, что директива action в пользовательской конфигурации jail корректна и ссылается на существующее действие. Действие определяет, как Fail2Ban должен запретить нарушающие IP-адреса. Некоторые распространенные действия - iptables-multiport, iptables-allports и iptables[name=<name>, port=<port(s)>, protocol=<protocol>].
Пример (для защиты Joomla с Nginx):
1 2 3 4 5 6 | [joomla-login-custom] enabled = true фильтр = joomla-auth logpath = /var/log/nginx/access.log ... action = iptables-multiport[name=joomla, port="http,https", protocol=tcp]. |
Ошибки в jail.local или jail.conf:
При внесении изменений в jail.local или jail.conf убедитесь, что в них нет синтаксических ошибок или неправильно расположенных директив конфигурации. Ошибки в этих файлах могут привести к сбою Fail2Ban при запуске или неправильной обработке пользовательских тюрем.
Чтобы проверить наличие ошибок, можно воспользоваться командой fail2ban-client:
1 | sudo fail2ban-client -d |
Заключение
Fail2Ban - это мощный инструмент безопасности, который может значительно снизить риск атак методом перебора и других угроз безопасности. Создавая собственные тюрьмы, адаптированные к специфическим потребностям вашего сервера, вы можете усилить защиту ваших приложений и служб. Приведенные здесь 20 примеров конфигураций помогут вам понять, как создавать и адаптировать пользовательские jails к вашей среде.