Настройка fail2ban для защиты от атак — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка fail2ban для защиты от атак = == 1. Подготовка системы == * Войдите в систему под уче…») |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Установка fail2ban | + | == 2. Установка fail2ban == |
=== Обновление системы === | === Обновление системы === | ||
1. Обновите систему: | 1. Обновите систему: | ||
− | < | + | <pre>sudo apt update</pre> |
2. Установите fail2ban: | 2. Установите fail2ban: | ||
− | < | + | <pre>sudo apt install -y fail2ban</pre> |
3. Проверьте версию: | 3. Проверьте версию: | ||
− | < | + | <pre>fail2ban-client --version</pre> |
4. Запустите и включите автозапуск: | 4. Запустите и включите автозапуск: | ||
− | < | + | <pre>sudo systemctl start fail2ban</pre> |
− | < | + | <pre>sudo systemctl enable fail2ban</pre> |
5. Проверьте статус: | 5. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status fail2ban</pre> |
− | == 3. Базовая конфигурация | + | == 3. Базовая конфигурация == |
=== Создание конфигурационного файла === | === Создание конфигурационного файла === | ||
1. Создайте локальный конфигурационный файл: | 1. Создайте локальный конфигурационный файл: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/jail.local</pre> |
2. Добавьте базовую конфигурацию: | 2. Добавьте базовую конфигурацию: | ||
− | < | + | <pre>[DEFAULT] |
− | # Игнорировать IP адреса | + | \# Игнорировать IP адреса |
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 | ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 | ||
− | # Время блокировки в секундах | + | \# Время блокировки в секундах |
bantime = 3600 | bantime = 3600 | ||
− | # Время поиска в секундах | + | \# Время поиска в секундах |
findtime = 600 | findtime = 600 | ||
− | # Максимальное количество попыток | + | \# Максимальное количество попыток |
maxretry = 3 | maxretry = 3 | ||
− | # Backend для поиска в логах | + | \# Backend для поиска в логах |
backend = systemd | backend = systemd | ||
− | # Email уведомления | + | \# Email уведомления |
destemail = admin@example.com | destemail = admin@example.com | ||
sender = fail2ban@example.com | sender = fail2ban@example.com | ||
action = %(action_mwl)s | action = %(action_mwl)s | ||
− | </ | + | </pre> |
=== Настройка email уведомлений === | === Настройка email уведомлений === | ||
1. Установите почтовый клиент: | 1. Установите почтовый клиент: | ||
− | < | + | <pre>sudo apt install -y mailutils</pre> |
2. Настройте почту: | 2. Настройте почту: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/action.d/sendmail-common.conf</pre> |
3. Добавьте настройки: | 3. Добавьте настройки: | ||
− | < | + | <pre>[Definition] |
actionstart = printf %%b "Hi,\n | actionstart = printf %%b "Hi,\n | ||
The jail <name> has been started successfully.\n | The jail <name> has been started successfully.\n | ||
Строка 88: | Строка 88: | ||
Regards,\n | Regards,\n | ||
Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: unbanned <ip> from <fq-hostname>" <dest> | Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: unbanned <ip> from <fq-hostname>" <dest> | ||
− | </ | + | </pre> |
− | == 4. Настройка защиты SSH | + | == 4. Настройка защиты SSH == |
=== Базовая защита SSH === | === Базовая защита SSH === | ||
1. Добавьте в jail.local: | 1. Добавьте в jail.local: | ||
− | < | + | <pre>[sshd] |
enabled = true | enabled = true | ||
port = ssh | port = ssh | ||
Строка 103: | Строка 103: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
=== Расширенная защита SSH === | === Расширенная защита SSH === | ||
1. Создайте фильтр для SSH: | 1. Создайте фильтр для SSH: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/sshd.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>(?: port \d*)?(?: ssh\d*)?(?: on \S+)?\s*$ | 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)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$ | ||
Строка 123: | Строка 123: | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для SSH: | 3. Настройте jail для SSH: | ||
− | < | + | <pre>[sshd-ddos] |
enabled = true | enabled = true | ||
port = ssh | port = ssh | ||
Строка 134: | Строка 134: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
− | == 5. Защита веб-серверов | + | == 5. Защита веб-серверов == |
=== Защита Apache === | === Защита Apache === | ||
1. Создайте фильтр для Apache: | 1. Создайте фильтр для Apache: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/apache-auth.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$ | failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$ | ||
^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$ | ^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$ | ||
Строка 150: | Строка 150: | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для Apache: | 3. Настройте jail для Apache: | ||
− | < | + | <pre>[apache-auth] |
enabled = true | enabled = true | ||
port = http,https | port = http,https | ||
Строка 179: | Строка 179: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
=== Защита Nginx === | === Защита Nginx === | ||
1. Создайте фильтр для Nginx: | 1. Создайте фильтр для Nginx: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$ | failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$ | ||
^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$ | ^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$ | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для Nginx: | 3. Настройте jail для Nginx: | ||
− | < | + | <pre>[nginx-http-auth] |
enabled = true | enabled = true | ||
port = http,https | port = http,https | ||
Строка 212: | Строка 212: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
− | == 6. Защита баз данных | + | == 6. Защита баз данных == |
=== Защита MySQL === | === Защита MySQL === | ||
1. Создайте фильтр для MySQL: | 1. Создайте фильтр для MySQL: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/mysql-auth.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$ | failregex = ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$ | ||
^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$ | ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$ | ||
Строка 228: | Строка 228: | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для MySQL: | 3. Настройте jail для MySQL: | ||
− | < | + | <pre>[mysql-auth] |
enabled = true | enabled = true | ||
port = 3306 | port = 3306 | ||
Строка 239: | Строка 239: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
=== Защита PostgreSQL === | === Защита PostgreSQL === | ||
1. Создайте фильтр для PostgreSQL: | 1. Создайте фильтр для PostgreSQL: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/postgresql.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^.*FATAL: password authentication failed for user ".*" from <HOST>.*$ | failregex = ^.*FATAL: password authentication failed for user ".*" from <HOST>.*$ | ||
^.*FATAL: no pg_hba.conf entry for host "<HOST>", user ".*", database ".*", SSL off.*$ | ^.*FATAL: no pg_hba.conf entry for host "<HOST>", user ".*", database ".*", SSL off.*$ | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для PostgreSQL: | 3. Настройте jail для PostgreSQL: | ||
− | < | + | <pre>[postgresql] |
enabled = true | enabled = true | ||
port = 5432 | port = 5432 | ||
Строка 263: | Строка 263: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
− | == 7. Защита почтовых серверов | + | == 7. Защита почтовых серверов == |
=== Защита Postfix === | === Защита Postfix === | ||
1. Создайте фильтр для Postfix: | 1. Создайте фильтр для Postfix: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/postfix.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^.*HOST=<HOST>.*REJECT.*$ | failregex = ^.*HOST=<HOST>.*REJECT.*$ | ||
^.*HOST=<HOST>.*REJECT.*$ | ^.*HOST=<HOST>.*REJECT.*$ | ||
Строка 279: | Строка 279: | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для Postfix: | 3. Настройте jail для Postfix: | ||
− | < | + | <pre>[postfix] |
enabled = true | enabled = true | ||
port = smtp,465,submission | port = smtp,465,submission | ||
Строка 290: | Строка 290: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
=== Защита Dovecot === | === Защита Dovecot === | ||
1. Создайте фильтр для Dovecot: | 1. Создайте фильтр для Dovecot: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/dovecot.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^.*authentication failure.*rip=<HOST>.*$ | failregex = ^.*authentication failure.*rip=<HOST>.*$ | ||
^.*Login attempt.*rip=<HOST>.*$ | ^.*Login attempt.*rip=<HOST>.*$ | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для Dovecot: | 3. Настройте jail для Dovecot: | ||
− | < | + | <pre>[dovecot] |
enabled = true | enabled = true | ||
port = pop3,pop3s,imap,imaps,submission,465,sieve | port = pop3,pop3s,imap,imaps,submission,465,sieve | ||
Строка 314: | Строка 314: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
− | == 8. Продвинутые настройки | + | == 8. Продвинутые настройки == |
=== Настройка whitelist === | === Настройка whitelist === | ||
1. Добавьте в jail.local: | 1. Добавьте в jail.local: | ||
− | < | + | <pre>[DEFAULT] |
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8 | ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8 | ||
− | </ | + | </pre> |
2. Создайте файл whitelist: | 2. Создайте файл whitelist: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/ignoreip.local</pre> |
3. Добавьте IP адреса: | 3. Добавьте IP адреса: | ||
− | < | + | <pre>\# Доверенные IP адреса |
192.168.1.100 | 192.168.1.100 | ||
192.168.1.101 | 192.168.1.101 | ||
10.0.0.50 | 10.0.0.50 | ||
− | </ | + | </pre> |
=== Настройка blacklist === | === Настройка blacklist === | ||
1. Создайте файл blacklist: | 1. Создайте файл blacklist: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/blacklist.local</pre> |
2. Добавьте IP адреса: | 2. Добавьте IP адреса: | ||
− | < | + | <pre>\# Заблокированные IP адреса |
192.168.1.200 | 192.168.1.200 | ||
192.168.1.201 | 192.168.1.201 | ||
− | </ | + | </pre> |
3. Настройте jail для blacklist: | 3. Настройте jail для blacklist: | ||
− | < | + | <pre>[blacklist] |
enabled = true | enabled = true | ||
port = ssh,http,https | port = ssh,http,https | ||
Строка 355: | Строка 355: | ||
bantime = -1 | bantime = -1 | ||
findtime = 1 | findtime = 1 | ||
− | </ | + | </pre> |
=== Настройка кастомных фильтров === | === Настройка кастомных фильтров === | ||
1. Создайте кастомный фильтр: | 1. Создайте кастомный фильтр: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/filter.d/custom.conf</pre> |
2. Добавьте правила: | 2. Добавьте правила: | ||
− | < | + | <pre>[Definition] |
failregex = ^.*<HOST>.*FAILED.*$ | failregex = ^.*<HOST>.*FAILED.*$ | ||
^.*<HOST>.*ERROR.*$ | ^.*<HOST>.*ERROR.*$ | ||
Строка 369: | Строка 369: | ||
ignoreregex = | ignoreregex = | ||
− | </ | + | </pre> |
3. Настройте jail для кастомного фильтра: | 3. Настройте jail для кастомного фильтра: | ||
− | < | + | <pre>[custom] |
enabled = true | enabled = true | ||
port = ssh,http,https | port = ssh,http,https | ||
Строка 380: | Строка 380: | ||
bantime = 3600 | bantime = 3600 | ||
findtime = 600 | findtime = 600 | ||
− | </ | + | </pre> |
− | == 9. Мониторинг и управление | + | == 9. Мониторинг и управление == |
=== Просмотр статуса === | === Просмотр статуса === | ||
1. '''Просмотр активных jail''': | 1. '''Просмотр активных jail''': | ||
− | < | + | <pre>sudo fail2ban-client status</pre> |
2. '''Просмотр статуса конкретного jail''': | 2. '''Просмотр статуса конкретного jail''': | ||
− | < | + | <pre>sudo fail2ban-client status sshd</pre> |
3. '''Просмотр заблокированных IP''': | 3. '''Просмотр заблокированных IP''': | ||
− | < | + | <pre>sudo fail2ban-client status sshd</pre> |
=== Управление jail === | === Управление jail === | ||
1. '''Запуск jail''': | 1. '''Запуск jail''': | ||
− | < | + | <pre>sudo fail2ban-client start sshd</pre> |
2. '''Остановка jail''': | 2. '''Остановка jail''': | ||
− | < | + | <pre>sudo fail2ban-client stop sshd</pre> |
3. '''Перезапуск jail''': | 3. '''Перезапуск jail''': | ||
− | < | + | <pre>sudo fail2ban-client restart sshd</pre> |
4. '''Перезагрузка конфигурации''': | 4. '''Перезагрузка конфигурации''': | ||
− | < | + | <pre>sudo fail2ban-client reload</pre> |
=== Управление IP адресами === | === Управление IP адресами === | ||
1. '''Разблокировка IP''': | 1. '''Разблокировка IP''': | ||
− | < | + | <pre>sudo fail2ban-client set sshd unbanip 192.168.1.100</pre> |
2. '''Блокировка IP''': | 2. '''Блокировка IP''': | ||
− | < | + | <pre>sudo fail2ban-client set sshd banip 192.168.1.100</pre> |
3. '''Просмотр заблокированных IP''': | 3. '''Просмотр заблокированных IP''': | ||
− | < | + | <pre>sudo fail2ban-client get sshd banned</pre> |
− | == 10. Настройка логирования | + | == 10. Настройка логирования == |
=== Настройка логов fail2ban === | === Настройка логов fail2ban === | ||
1. Настройте логирование: | 1. Настройте логирование: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/fail2ban.conf</pre> |
2. Измените параметры: | 2. Измените параметры: | ||
− | < | + | <pre>loglevel = INFO |
logtarget = /var/log/fail2ban.log | logtarget = /var/log/fail2ban.log | ||
− | </ | + | </pre> |
3. Настройте ротацию логов: | 3. Настройте ротацию логов: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/fail2ban</pre> |
4. Добавьте конфигурацию: | 4. Добавьте конфигурацию: | ||
− | < | + | <pre>/var/log/fail2ban.log { |
daily | daily | ||
missingok | missingok | ||
Строка 448: | Строка 448: | ||
endscript | endscript | ||
} | } | ||
− | </ | + | </pre> |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/fail2ban-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Проверка статуса fail2ban | + | \# Проверка статуса fail2ban |
if ! systemctl is-active --quiet fail2ban; then | if ! systemctl is-active --quiet fail2ban; then | ||
echo "Fail2ban is down!" | mail -s "Fail2ban Alert" admin@example.com | echo "Fail2ban is down!" | mail -s "Fail2ban Alert" admin@example.com | ||
fi | fi | ||
− | # Проверка количества заблокированных IP | + | \# Проверка количества заблокированных IP |
BLOCKED_COUNT=$(sudo fail2ban-client status sshd | grep "Currently banned:" | awk '{print $4}') | BLOCKED_COUNT=$(sudo fail2ban-client status sshd | grep "Currently banned:" | awk '{print $4}') | ||
if [ $BLOCKED_COUNT -gt 10 ]; then | if [ $BLOCKED_COUNT -gt 10 ]; then | ||
Строка 469: | Строка 469: | ||
fi | fi | ||
− | # Проверка логов на ошибки | + | \# Проверка логов на ошибки |
ERROR_COUNT=$(grep -c "ERROR" /var/log/fail2ban.log 2>/dev/null || echo 0) | ERROR_COUNT=$(grep -c "ERROR" /var/log/fail2ban.log 2>/dev/null || echo 0) | ||
if [ $ERROR_COUNT -gt 5 ]; then | if [ $ERROR_COUNT -gt 5 ]; then | ||
echo "Fail2ban errors detected: $ERROR_COUNT" | mail -s "Fail2ban Alert" admin@example.com | echo "Fail2ban errors detected: $ERROR_COUNT" | mail -s "Fail2ban Alert" admin@example.com | ||
fi | fi | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/fail2ban-monitor.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
5. Добавьте задачу: | 5. Добавьте задачу: | ||
− | < | + | <pre>*/5 * * * * /usr/local/bin/fail2ban-monitor.sh</pre> |
− | == 11. Настройка уведомлений | + | == 11. Настройка уведомлений == |
=== Настройка Slack уведомлений === | === Настройка Slack уведомлений === | ||
1. Создайте Slack webhook: | 1. Создайте Slack webhook: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/action.d/slack.conf</pre> |
2. Добавьте конфигурацию: | 2. Добавьте конфигурацию: | ||
− | < | + | <pre>[Definition] |
actionstart = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> started on <fq-hostname>"}' <slack_webhook_url> | actionstart = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> started on <fq-hostname>"}' <slack_webhook_url> | ||
Строка 503: | Строка 503: | ||
actionunban = curl -X POST -H 'Content-type: application/json' --data '{"text":"IP <ip> unbanned by Fail2ban from <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> | ||
− | </ | + | </pre> |
3. Настройте jail с Slack уведомлениями: | 3. Настройте jail с Slack уведомлениями: | ||
− | < | + | <pre>[sshd] |
enabled = true | enabled = true | ||
port = ssh | port = ssh | ||
Строка 515: | Строка 515: | ||
findtime = 600 | findtime = 600 | ||
action = slack | action = slack | ||
− | </ | + | </pre> |
=== Настройка Telegram уведомлений === | === Настройка Telegram уведомлений === | ||
Строка 521: | Строка 521: | ||
1. Создайте Telegram бота и получите токен | 1. Создайте Telegram бота и получите токен | ||
2. Создайте конфигурацию: | 2. Создайте конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/action.d/telegram.conf</pre> |
3. Добавьте настройки: | 3. Добавьте настройки: | ||
− | < | + | <pre>[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>" | 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>" | ||
Строка 534: | Строка 534: | ||
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>" | 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>" | ||
− | </ | + | </pre> |
− | == 12. Устранение неполадок | + | == 12. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''Fail2ban не запускается''': | 1. '''Fail2ban не запускается''': | ||
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>sudo fail2ban-client -t</pre> |
− | * Проверьте логи: < | + | * Проверьте логи: <pre>sudo journalctl -u fail2ban</pre> |
* Проверьте права доступа к файлам | * Проверьте права доступа к файлам | ||
2. '''Jail не работает''': | 2. '''Jail не работает''': | ||
− | * Проверьте фильтры: < | + | * Проверьте фильтры: <pre>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre> |
* Проверьте пути к логам | * Проверьте пути к логам | ||
* Проверьте права доступа к логам | * Проверьте права доступа к логам | ||
Строка 558: | Строка 558: | ||
1. '''Проверка статуса''': | 1. '''Проверка статуса''': | ||
− | < | + | <pre>sudo systemctl status fail2ban</pre> |
2. '''Проверка конфигурации''': | 2. '''Проверка конфигурации''': | ||
− | < | + | <pre>sudo fail2ban-client -t</pre> |
3. '''Тестирование фильтров''': | 3. '''Тестирование фильтров''': | ||
− | < | + | <pre>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre> |
4. '''Проверка логов''': | 4. '''Проверка логов''': | ||
− | < | + | <pre>sudo tail -f /var/log/fail2ban.log</pre> |
5. '''Проверка iptables''': | 5. '''Проверка iptables''': | ||
− | < | + | <pre>sudo iptables -L -n</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:33, 15 октября 2025
Содержание
- 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 и обеспечением безопасности ваших серверов!