Настройка fail2ban для защиты от атак
Содержание
- 1 Настройка fail2ban для защиты от атак
- 1.1 1. Подготовка системы
- 1.2 2. Установка fail2ban =
- 1.3 3. Базовая конфигурация =
- 1.4 4. Настройка защиты SSH =
- 1.5 5. Защита веб-серверов =
- 1.6 6. Защита баз данных =
- 1.7 7. Защита почтовых серверов =
- 1.8 8. Продвинутые настройки =
- 1.9 9. Мониторинг и управление =
- 1.10 10. Настройка логирования =
- 1.11 11. Настройка уведомлений =
- 1.12 12. Устранение неполадок =
- 1.13 Заключение
Настройка fail2ban для защиты от атак
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Установка fail2ban =
Обновление системы
1. Обновите систему:
sudo apt update
2. Установите fail2ban:
sudo apt install -y fail2ban
3. Проверьте версию:
fail2ban-client --version
4. Запустите и включите автозапуск:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
5. Проверьте статус:
sudo systemctl status fail2ban
3. Базовая конфигурация =
Создание конфигурационного файла
1. Создайте локальный конфигурационный файл:
sudo nano /etc/fail2ban/jail.local
2. Добавьте базовую конфигурацию:
[DEFAULT]
- Игнорировать IP адреса
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
- Время блокировки в секундах
bantime = 3600
- Время поиска в секундах
findtime = 600
- Максимальное количество попыток
maxretry = 3
- Backend для поиска в логах
backend = systemd
- Email уведомления
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s
Настройка email уведомлений
1. Установите почтовый клиент:
sudo apt install -y mailutils
2. Настройте почту:
sudo nano /etc/fail2ban/action.d/sendmail-common.conf
3. Добавьте настройки:
[Definition]
actionstart = printf %%b "Hi,\n
The jail <name> has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: started on <fq-hostname>" <dest>
actionstop = printf %%b "Hi,\n
The jail <name> has been stopped.\n
Regards,\n
Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: stopped on <fq-hostname>" <dest>
actioncheck =
actionban = printf %%b "Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n
Regards,\n
Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: banned <ip> from <fq-hostname>" <dest>
actionunban = printf %%b "Hi,\n
The IP <ip> has been unbanned by Fail2Ban from <name>.\n
Regards,\n
Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: unbanned <ip> from <fq-hostname>" <dest>
4. Настройка защиты SSH =
Базовая защита SSH
1. Добавьте в jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
Расширенная защита SSH
1. Создайте фильтр для SSH:
sudo nano /etc/fail2ban/filter.d/sshd.conf
2. Добавьте правила:
[Definition]
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>(?: port \d*)?(?: ssh\d*)?(?: on \S+)?\s*$
^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$
^%(__prefix_line)sFailed \w+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?(?: on \S+)?\s*$
^%(__prefix_line)sROOT LOGIN REFUSED.* from <HOST>\s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
^%(__prefix_line)sUser .* from <HOST> not allowed because not listed in AllowUsers\s*$
^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
^%(__prefix_line)srefused connect from <HOST>\s*$
^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT!\s*$
ignoreregex =
3. Настройте jail для SSH:
[sshd-ddos]
enabled = true
port = ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 6
bantime = 3600
findtime = 600
5. Защита веб-серверов =
Защита Apache
1. Создайте фильтр для Apache:
sudo nano /etc/fail2ban/filter.d/apache-auth.conf
2. Добавьте правила:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$
^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$
^<HOST> -.*"GET.*HTTP.*" (200|301|302) .*".*".*$
ignoreregex =
3. Настройте jail для Apache:
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 3600
findtime = 600
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/*access.log
maxretry = 3
bantime = 3600
findtime = 600
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 3600
findtime = 600
Защита Nginx
1. Создайте фильтр для Nginx:
sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf
2. Добавьте правила:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$
^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$
ignoreregex =
3. Настройте jail для Nginx:
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
findtime = 600
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
findtime = 600
6. Защита баз данных =
Защита MySQL
1. Создайте фильтр для MySQL:
sudo nano /etc/fail2ban/filter.d/mysql-auth.conf
2. Добавьте правила:
[Definition]
failregex = ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$
^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$
^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$
ignoreregex =
3. Настройте jail для MySQL:
[mysql-auth]
enabled = true
port = 3306
filter = mysql-auth
logpath = /var/log/mysql/error.log
maxretry = 3
bantime = 3600
findtime = 600
Защита PostgreSQL
1. Создайте фильтр для PostgreSQL:
sudo nano /etc/fail2ban/filter.d/postgresql.conf
2. Добавьте правила:
[Definition]
failregex = ^.*FATAL: password authentication failed for user ".*" from <HOST>.*$
^.*FATAL: no pg_hba.conf entry for host "<HOST>", user ".*", database ".*", SSL off.*$
ignoreregex =
3. Настройте jail для PostgreSQL:
[postgresql]
enabled = true
port = 5432
filter = postgresql
logpath = /var/log/postgresql/postgresql-*.log
maxretry = 3
bantime = 3600
findtime = 600
7. Защита почтовых серверов =
Защита Postfix
1. Создайте фильтр для Postfix:
sudo nano /etc/fail2ban/filter.d/postfix.conf
2. Добавьте правила:
[Definition]
failregex = ^.*HOST=<HOST>.*REJECT.*$
^.*HOST=<HOST>.*REJECT.*$
^.*HOST=<HOST>.*REJECT.*$
ignoreregex =
3. Настройте jail для Postfix:
[postfix]
enabled = true
port = smtp,465,submission
filter = postfix
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
findtime = 600
Защита Dovecot
1. Создайте фильтр для Dovecot:
sudo nano /etc/fail2ban/filter.d/dovecot.conf
2. Добавьте правила:
[Definition]
failregex = ^.*authentication failure.*rip=<HOST>.*$
^.*Login attempt.*rip=<HOST>.*$
ignoreregex =
3. Настройте jail для Dovecot:
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps,submission,465,sieve
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
findtime = 600
8. Продвинутые настройки =
Настройка whitelist
1. Добавьте в jail.local:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8
2. Создайте файл whitelist:
sudo nano /etc/fail2ban/ignoreip.local
3. Добавьте IP адреса:
# Доверенные IP адреса
192.168.1.100
192.168.1.101
10.0.0.50
Настройка blacklist
1. Создайте файл blacklist:
sudo nano /etc/fail2ban/blacklist.local
2. Добавьте IP адреса:
# Заблокированные IP адреса
192.168.1.200
192.168.1.201
3. Настройте jail для blacklist:
[blacklist]
enabled = true
port = ssh,http,https
filter = blacklist
logpath = /var/log/fail2ban.log
maxretry = 1
bantime = -1
findtime = 1
Настройка кастомных фильтров
1. Создайте кастомный фильтр:
sudo nano /etc/fail2ban/filter.d/custom.conf
2. Добавьте правила:
[Definition]
failregex = ^.*<HOST>.*FAILED.*$
^.*<HOST>.*ERROR.*$
^.*<HOST>.*DENIED.*$
ignoreregex =
3. Настройте jail для кастомного фильтра:
[custom]
enabled = true
port = ssh,http,https
filter = custom
logpath = /var/log/custom.log
maxretry = 3
bantime = 3600
findtime = 600
9. Мониторинг и управление =
Просмотр статуса
1. Просмотр активных jail:
sudo fail2ban-client status
2. Просмотр статуса конкретного jail:
sudo fail2ban-client status sshd
3. Просмотр заблокированных IP:
sudo fail2ban-client status sshd
Управление jail
1. Запуск jail:
sudo fail2ban-client start sshd
2. Остановка jail:
sudo fail2ban-client stop sshd
3. Перезапуск jail:
sudo fail2ban-client restart sshd
4. Перезагрузка конфигурации:
sudo fail2ban-client reload
Управление IP адресами
1. Разблокировка IP:
sudo fail2ban-client set sshd unbanip 192.168.1.100
2. Блокировка IP:
sudo fail2ban-client set sshd banip 192.168.1.100
3. Просмотр заблокированных IP:
sudo fail2ban-client get sshd banned
10. Настройка логирования =
Настройка логов fail2ban
1. Настройте логирование:
sudo nano /etc/fail2ban/fail2ban.conf
2. Измените параметры:
loglevel = INFO
logtarget = /var/log/fail2ban.log
3. Настройте ротацию логов:
sudo nano /etc/logrotate.d/fail2ban
4. Добавьте конфигурацию:
/var/log/fail2ban.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 root root
postrotate
systemctl reload fail2ban
endscript
}
Создание скрипта мониторинга
1. Создайте скрипт мониторинга:
sudo nano /usr/local/bin/fail2ban-monitor.sh
2. Добавьте содержимое:
#!/bin/bash
- Проверка статуса fail2ban
if ! systemctl is-active --quiet fail2ban; then
echo "Fail2ban is down!" | mail -s "Fail2ban Alert" admin@example.com
fi
- Проверка количества заблокированных IP
BLOCKED_COUNT=$(sudo fail2ban-client status sshd | grep "Currently banned:" | awk '{print $4}')
if [ $BLOCKED_COUNT -gt 10 ]; then
echo "High number of blocked IPs: $BLOCKED_COUNT" | mail -s "Fail2ban Alert" admin@example.com
fi
- Проверка логов на ошибки
ERROR_COUNT=$(grep -c "ERROR" /var/log/fail2ban.log 2>/dev/null || echo 0)
if [ $ERROR_COUNT -gt 5 ]; then
echo "Fail2ban errors detected: $ERROR_COUNT" | mail -s "Fail2ban Alert" admin@example.com
fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/fail2ban-monitor.sh
4. Добавьте в crontab:
sudo crontab -e
5. Добавьте задачу:
*/5 * * * * /usr/local/bin/fail2ban-monitor.sh
11. Настройка уведомлений =
Настройка Slack уведомлений
1. Создайте Slack webhook:
sudo nano /etc/fail2ban/action.d/slack.conf
2. Добавьте конфигурацию:
[Definition]
actionstart = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> started on <fq-hostname>"}' <slack_webhook_url>
actionstop = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> stopped on <fq-hostname>"}' <slack_webhook_url>
actioncheck =
actionban = curl -X POST -H 'Content-type: application/json' --data '{"text":"IP <ip> banned by Fail2ban after <failures> attempts against <name>"}' <slack_webhook_url>
actionunban = curl -X POST -H 'Content-type: application/json' --data '{"text":"IP <ip> unbanned by Fail2ban from <name>"}' <slack_webhook_url>
3. Настройте jail с Slack уведомлениями:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
action = slack
Настройка Telegram уведомлений
1. Создайте Telegram бота и получите токен
2. Создайте конфигурацию:
sudo nano /etc/fail2ban/action.d/telegram.conf
3. Добавьте настройки:
[Definition]
actionstart = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="Fail2ban jail <name> started on <fq-hostname>"
actionstop = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="Fail2ban jail <name> stopped on <fq-hostname>"
actioncheck =
actionban = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="IP <ip> banned by Fail2ban after <failures> attempts against <name>"
actionunban = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="IP <ip> unbanned by Fail2ban from <name>"
12. Устранение неполадок =
Частые проблемы
1. Fail2ban не запускается:
- Проверьте конфигурацию:
sudo fail2ban-client -t
- Проверьте логи:
sudo journalctl -u fail2ban
- Проверьте права доступа к файлам
2. Jail не работает:
- Проверьте фильтры:
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
- Проверьте пути к логам
- Проверьте права доступа к логам
3. Ложные срабатывания:
- Настройте whitelist
- Измените параметры maxretry и findtime
- Проверьте фильтры
Диагностика
1. Проверка статуса:
sudo systemctl status fail2ban
2. Проверка конфигурации:
sudo fail2ban-client -t
3. Тестирование фильтров:
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
4. Проверка логов:
sudo tail -f /var/log/fail2ban.log
5. Проверка iptables:
sudo iptables -L -n
Заключение
Fail2ban успешно настроен и готов к работе! Теперь у вас есть мощная защита от атак с возможностями мониторинга, уведомлений и гибкой настройки.
Для размещения ваших защищенных серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для критически важных серверов с повышенной защитой
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой fail2ban и обеспечением безопасности ваших серверов!