Настройка fail2ban для защиты от атак — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка fail2ban для защиты от атак = == 1. Подготовка системы == * Войдите в систему под уче…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка fail2ban ===
+
== 2. Установка fail2ban ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите fail2ban:
 
2. Установите fail2ban:
<code>sudo apt install -y fail2ban</code>
+
<pre>sudo apt install -y fail2ban</pre>
  
 
3. Проверьте версию:
 
3. Проверьте версию:
<code>fail2ban-client --version</code>
+
<pre>fail2ban-client --version</pre>
  
 
4. Запустите и включите автозапуск:
 
4. Запустите и включите автозапуск:
<code>sudo systemctl start fail2ban</code>
+
<pre>sudo systemctl start fail2ban</pre>
<code>sudo systemctl enable fail2ban</code>
+
<pre>sudo systemctl enable fail2ban</pre>
  
 
5. Проверьте статус:
 
5. Проверьте статус:
<code>sudo systemctl status fail2ban</code>
+
<pre>sudo systemctl status fail2ban</pre>
  
== 3. Базовая конфигурация ===
+
== 3. Базовая конфигурация ==
  
 
=== Создание конфигурационного файла ===
 
=== Создание конфигурационного файла ===
  
 
1. Создайте локальный конфигурационный файл:
 
1. Создайте локальный конфигурационный файл:
<code>sudo nano /etc/fail2ban/jail.local</code>
+
<pre>sudo nano /etc/fail2ban/jail.local</pre>
  
 
2. Добавьте базовую конфигурацию:
 
2. Добавьте базовую конфигурацию:
<code>[DEFAULT]
+
<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
</code>
+
</pre>
  
 
=== Настройка email уведомлений ===
 
=== Настройка email уведомлений ===
  
 
1. Установите почтовый клиент:
 
1. Установите почтовый клиент:
<code>sudo apt install -y mailutils</code>
+
<pre>sudo apt install -y mailutils</pre>
  
 
2. Настройте почту:
 
2. Настройте почту:
<code>sudo nano /etc/fail2ban/action.d/sendmail-common.conf</code>
+
<pre>sudo nano /etc/fail2ban/action.d/sendmail-common.conf</pre>
  
 
3. Добавьте настройки:
 
3. Добавьте настройки:
<code>[Definition]
+
<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>
</code>
+
</pre>
  
== 4. Настройка защиты SSH ===
+
== 4. Настройка защиты SSH ==
  
 
=== Базовая защита SSH ===
 
=== Базовая защита SSH ===
  
 
1. Добавьте в jail.local:
 
1. Добавьте в jail.local:
<code>[sshd]
+
<pre>[sshd]
 
enabled = true
 
enabled = true
 
port = ssh
 
port = ssh
Строка 103: Строка 103:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
 
=== Расширенная защита SSH ===
 
=== Расширенная защита SSH ===
  
 
1. Создайте фильтр для SSH:
 
1. Создайте фильтр для SSH:
<code>sudo nano /etc/fail2ban/filter.d/sshd.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/sshd.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<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 =
</code>
+
</pre>
  
 
3. Настройте jail для SSH:
 
3. Настройте jail для SSH:
<code>[sshd-ddos]
+
<pre>[sshd-ddos]
 
enabled = true
 
enabled = true
 
port = ssh
 
port = ssh
Строка 134: Строка 134:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
== 5. Защита веб-серверов ===
+
== 5. Защита веб-серверов ==
  
 
=== Защита Apache ===
 
=== Защита Apache ===
  
 
1. Создайте фильтр для Apache:
 
1. Создайте фильтр для Apache:
<code>sudo nano /etc/fail2ban/filter.d/apache-auth.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/apache-auth.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<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 =
</code>
+
</pre>
  
 
3. Настройте jail для Apache:
 
3. Настройте jail для Apache:
<code>[apache-auth]
+
<pre>[apache-auth]
 
enabled = true
 
enabled = true
 
port = http,https
 
port = http,https
Строка 179: Строка 179:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
 
=== Защита Nginx ===
 
=== Защита Nginx ===
  
 
1. Создайте фильтр для Nginx:
 
1. Создайте фильтр для Nginx:
<code>sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<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 =
</code>
+
</pre>
  
 
3. Настройте jail для Nginx:
 
3. Настройте jail для Nginx:
<code>[nginx-http-auth]
+
<pre>[nginx-http-auth]
 
enabled = true
 
enabled = true
 
port = http,https
 
port = http,https
Строка 212: Строка 212:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
== 6. Защита баз данных ===
+
== 6. Защита баз данных ==
  
 
=== Защита MySQL ===
 
=== Защита MySQL ===
  
 
1. Создайте фильтр для MySQL:
 
1. Создайте фильтр для MySQL:
<code>sudo nano /etc/fail2ban/filter.d/mysql-auth.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/mysql-auth.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<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 =
</code>
+
</pre>
  
 
3. Настройте jail для MySQL:
 
3. Настройте jail для MySQL:
<code>[mysql-auth]
+
<pre>[mysql-auth]
 
enabled = true
 
enabled = true
 
port = 3306
 
port = 3306
Строка 239: Строка 239:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
 
=== Защита PostgreSQL ===
 
=== Защита PostgreSQL ===
  
 
1. Создайте фильтр для PostgreSQL:
 
1. Создайте фильтр для PostgreSQL:
<code>sudo nano /etc/fail2ban/filter.d/postgresql.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/postgresql.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<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 =
</code>
+
</pre>
  
 
3. Настройте jail для PostgreSQL:
 
3. Настройте jail для PostgreSQL:
<code>[postgresql]
+
<pre>[postgresql]
 
enabled = true
 
enabled = true
 
port = 5432
 
port = 5432
Строка 263: Строка 263:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
== 7. Защита почтовых серверов ===
+
== 7. Защита почтовых серверов ==
  
 
=== Защита Postfix ===
 
=== Защита Postfix ===
  
 
1. Создайте фильтр для Postfix:
 
1. Создайте фильтр для Postfix:
<code>sudo nano /etc/fail2ban/filter.d/postfix.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/postfix.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<pre>[Definition]
 
failregex = ^.*HOST=<HOST>.*REJECT.*$
 
failregex = ^.*HOST=<HOST>.*REJECT.*$
 
             ^.*HOST=<HOST>.*REJECT.*$
 
             ^.*HOST=<HOST>.*REJECT.*$
Строка 279: Строка 279:
  
 
ignoreregex =
 
ignoreregex =
</code>
+
</pre>
  
 
3. Настройте jail для Postfix:
 
3. Настройте jail для Postfix:
<code>[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
</code>
+
</pre>
  
 
=== Защита Dovecot ===
 
=== Защита Dovecot ===
  
 
1. Создайте фильтр для Dovecot:
 
1. Создайте фильтр для Dovecot:
<code>sudo nano /etc/fail2ban/filter.d/dovecot.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/dovecot.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<pre>[Definition]
 
failregex = ^.*authentication failure.*rip=<HOST>.*$
 
failregex = ^.*authentication failure.*rip=<HOST>.*$
 
             ^.*Login attempt.*rip=<HOST>.*$
 
             ^.*Login attempt.*rip=<HOST>.*$
  
 
ignoreregex =
 
ignoreregex =
</code>
+
</pre>
  
 
3. Настройте jail для Dovecot:
 
3. Настройте jail для Dovecot:
<code>[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
</code>
+
</pre>
  
== 8. Продвинутые настройки ===
+
== 8. Продвинутые настройки ==
  
 
=== Настройка whitelist ===
 
=== Настройка whitelist ===
  
 
1. Добавьте в jail.local:
 
1. Добавьте в jail.local:
<code>[DEFAULT]
+
<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
</code>
+
</pre>
  
 
2. Создайте файл whitelist:
 
2. Создайте файл whitelist:
<code>sudo nano /etc/fail2ban/ignoreip.local</code>
+
<pre>sudo nano /etc/fail2ban/ignoreip.local</pre>
  
 
3. Добавьте IP адреса:
 
3. Добавьте IP адреса:
<code># Доверенные 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
</code>
+
</pre>
  
 
=== Настройка blacklist ===
 
=== Настройка blacklist ===
  
 
1. Создайте файл blacklist:
 
1. Создайте файл blacklist:
<code>sudo nano /etc/fail2ban/blacklist.local</code>
+
<pre>sudo nano /etc/fail2ban/blacklist.local</pre>
  
 
2. Добавьте IP адреса:
 
2. Добавьте IP адреса:
<code># Заблокированные IP адреса
+
<pre>\# Заблокированные IP адреса
 
192.168.1.200
 
192.168.1.200
 
192.168.1.201
 
192.168.1.201
</code>
+
</pre>
  
 
3. Настройте jail для blacklist:
 
3. Настройте jail для blacklist:
<code>[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
</code>
+
</pre>
  
 
=== Настройка кастомных фильтров ===
 
=== Настройка кастомных фильтров ===
  
 
1. Создайте кастомный фильтр:
 
1. Создайте кастомный фильтр:
<code>sudo nano /etc/fail2ban/filter.d/custom.conf</code>
+
<pre>sudo nano /etc/fail2ban/filter.d/custom.conf</pre>
  
 
2. Добавьте правила:
 
2. Добавьте правила:
<code>[Definition]
+
<pre>[Definition]
 
failregex = ^.*<HOST>.*FAILED.*$
 
failregex = ^.*<HOST>.*FAILED.*$
 
             ^.*<HOST>.*ERROR.*$
 
             ^.*<HOST>.*ERROR.*$
Строка 369: Строка 369:
  
 
ignoreregex =
 
ignoreregex =
</code>
+
</pre>
  
 
3. Настройте jail для кастомного фильтра:
 
3. Настройте jail для кастомного фильтра:
<code>[custom]
+
<pre>[custom]
 
enabled = true
 
enabled = true
 
port = ssh,http,https
 
port = ssh,http,https
Строка 380: Строка 380:
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
</code>
+
</pre>
  
== 9. Мониторинг и управление ===
+
== 9. Мониторинг и управление ==
  
 
=== Просмотр статуса ===
 
=== Просмотр статуса ===
  
 
1. '''Просмотр активных jail''':
 
1. '''Просмотр активных jail''':
<code>sudo fail2ban-client status</code>
+
<pre>sudo fail2ban-client status</pre>
  
 
2. '''Просмотр статуса конкретного jail''':
 
2. '''Просмотр статуса конкретного jail''':
<code>sudo fail2ban-client status sshd</code>
+
<pre>sudo fail2ban-client status sshd</pre>
  
 
3. '''Просмотр заблокированных IP''':
 
3. '''Просмотр заблокированных IP''':
<code>sudo fail2ban-client status sshd</code>
+
<pre>sudo fail2ban-client status sshd</pre>
  
 
=== Управление jail ===
 
=== Управление jail ===
  
 
1. '''Запуск jail''':
 
1. '''Запуск jail''':
<code>sudo fail2ban-client start sshd</code>
+
<pre>sudo fail2ban-client start sshd</pre>
  
 
2. '''Остановка jail''':
 
2. '''Остановка jail''':
<code>sudo fail2ban-client stop sshd</code>
+
<pre>sudo fail2ban-client stop sshd</pre>
  
 
3. '''Перезапуск jail''':
 
3. '''Перезапуск jail''':
<code>sudo fail2ban-client restart sshd</code>
+
<pre>sudo fail2ban-client restart sshd</pre>
  
 
4. '''Перезагрузка конфигурации''':
 
4. '''Перезагрузка конфигурации''':
<code>sudo fail2ban-client reload</code>
+
<pre>sudo fail2ban-client reload</pre>
  
 
=== Управление IP адресами ===
 
=== Управление IP адресами ===
  
 
1. '''Разблокировка IP''':
 
1. '''Разблокировка IP''':
<code>sudo fail2ban-client set sshd unbanip 192.168.1.100</code>
+
<pre>sudo fail2ban-client set sshd unbanip 192.168.1.100</pre>
  
 
2. '''Блокировка IP''':
 
2. '''Блокировка IP''':
<code>sudo fail2ban-client set sshd banip 192.168.1.100</code>
+
<pre>sudo fail2ban-client set sshd banip 192.168.1.100</pre>
  
 
3. '''Просмотр заблокированных IP''':
 
3. '''Просмотр заблокированных IP''':
<code>sudo fail2ban-client get sshd banned</code>
+
<pre>sudo fail2ban-client get sshd banned</pre>
  
== 10. Настройка логирования ===
+
== 10. Настройка логирования ==
  
 
=== Настройка логов fail2ban ===
 
=== Настройка логов fail2ban ===
  
 
1. Настройте логирование:
 
1. Настройте логирование:
<code>sudo nano /etc/fail2ban/fail2ban.conf</code>
+
<pre>sudo nano /etc/fail2ban/fail2ban.conf</pre>
  
 
2. Измените параметры:
 
2. Измените параметры:
<code>loglevel = INFO
+
<pre>loglevel = INFO
 
logtarget = /var/log/fail2ban.log
 
logtarget = /var/log/fail2ban.log
</code>
+
</pre>
  
 
3. Настройте ротацию логов:
 
3. Настройте ротацию логов:
<code>sudo nano /etc/logrotate.d/fail2ban</code>
+
<pre>sudo nano /etc/logrotate.d/fail2ban</pre>
  
 
4. Добавьте конфигурацию:
 
4. Добавьте конфигурацию:
<code>/var/log/fail2ban.log {
+
<pre>/var/log/fail2ban.log {
 
     daily
 
     daily
 
     missingok
 
     missingok
Строка 448: Строка 448:
 
     endscript
 
     endscript
 
}
 
}
</code>
+
</pre>
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/fail2ban-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/fail2ban-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/fail2ban-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/fail2ban-monitor.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
5. Добавьте задачу:
 
5. Добавьте задачу:
<code>*/5 * * * * /usr/local/bin/fail2ban-monitor.sh</code>
+
<pre>*/5 * * * * /usr/local/bin/fail2ban-monitor.sh</pre>
  
== 11. Настройка уведомлений ===
+
== 11. Настройка уведомлений ==
  
 
=== Настройка Slack уведомлений ===
 
=== Настройка Slack уведомлений ===
  
 
1. Создайте Slack webhook:
 
1. Создайте Slack webhook:
<code>sudo nano /etc/fail2ban/action.d/slack.conf</code>
+
<pre>sudo nano /etc/fail2ban/action.d/slack.conf</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code>[Definition]
+
<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>
</code>
+
</pre>
  
 
3. Настройте jail с Slack уведомлениями:
 
3. Настройте jail с Slack уведомлениями:
<code>[sshd]
+
<pre>[sshd]
 
enabled = true
 
enabled = true
 
port = ssh
 
port = ssh
Строка 515: Строка 515:
 
findtime = 600
 
findtime = 600
 
action = slack
 
action = slack
</code>
+
</pre>
  
 
=== Настройка Telegram уведомлений ===
 
=== Настройка Telegram уведомлений ===
Строка 521: Строка 521:
 
1. Создайте Telegram бота и получите токен
 
1. Создайте Telegram бота и получите токен
 
2. Создайте конфигурацию:
 
2. Создайте конфигурацию:
<code>sudo nano /etc/fail2ban/action.d/telegram.conf</code>
+
<pre>sudo nano /etc/fail2ban/action.d/telegram.conf</pre>
  
 
3. Добавьте настройки:
 
3. Добавьте настройки:
<code>[Definition]
+
<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>"
</code>
+
</pre>
  
== 12. Устранение неполадок ===
+
== 12. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''Fail2ban не запускается''':
 
1. '''Fail2ban не запускается''':
* Проверьте конфигурацию: <code>sudo fail2ban-client -t</code>
+
* Проверьте конфигурацию: <pre>sudo fail2ban-client -t</pre>
* Проверьте логи: <code>sudo journalctl -u fail2ban</code>
+
* Проверьте логи: <pre>sudo journalctl -u fail2ban</pre>
 
* Проверьте права доступа к файлам
 
* Проверьте права доступа к файлам
  
 
2. '''Jail не работает''':
 
2. '''Jail не работает''':
* Проверьте фильтры: <code>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</code>
+
* Проверьте фильтры: <pre>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre>
 
* Проверьте пути к логам
 
* Проверьте пути к логам
 
* Проверьте права доступа к логам
 
* Проверьте права доступа к логам
Строка 558: Строка 558:
  
 
1. '''Проверка статуса''':
 
1. '''Проверка статуса''':
<code>sudo systemctl status fail2ban</code>
+
<pre>sudo systemctl status fail2ban</pre>
  
 
2. '''Проверка конфигурации''':
 
2. '''Проверка конфигурации''':
<code>sudo fail2ban-client -t</code>
+
<pre>sudo fail2ban-client -t</pre>
  
 
3. '''Тестирование фильтров''':
 
3. '''Тестирование фильтров''':
<code>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</code>
+
<pre>sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre>
  
 
4. '''Проверка логов''':
 
4. '''Проверка логов''':
<code>sudo tail -f /var/log/fail2ban.log</code>
+
<pre>sudo tail -f /var/log/fail2ban.log</pre>
  
 
5. '''Проверка iptables''':
 
5. '''Проверка iptables''':
<code>sudo iptables -L -n</code>
+
<pre>sudo iptables -L -n</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:33, 15 октября 2025

Содержание

Настройка 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):

Наши специалисты помогут с настройкой fail2ban и обеспечением безопасности ваших серверов!