- Автор темы
- Администратор
- Модер.
- Команда форума
- #1
Настройка
Fail2Ban — это система предотвращения вторжений (IPS), которая анализирует логи сервисов (например SSH) и автоматически блокирует IP-адреса через firewall при множественных неудачных попытках входа.pf + sshd + nginx (basic auth/401) + postfix (sasl + errors). Конфиги рассчитаны на минимум сюрпризов, нормальные таймауты, whitelist, инкремент бана и вменяемое логирование.
1. Установка Fail2Ban
На FreeBSD Fail2Ban устанавливается из пакетов:
pkg install py311-fail2ban
или через ports:
cd /usr/ports/security/py-fail2ban
make install clean
Проверка версии:
fail2ban-client -V
2. Включение сервиса
Добавить в /etc/rc.conf:
sysrc fail2ban_enable="YES"
3. Подготовка PF firewall
Fail2Ban будет добавлять IP в таблицу PF.
Открыть:
/etc/pf.conf
Добавить таблицу блокировок:
table <fail2ban> persist
block in quick from <fail2ban> to any
Применить конфигурацию:
service pf reload
Проверить таблицу:
pfctl -t fail2ban -T show
4. Структура конфигов Fail2Ban
Конфигурация находится:
/usr/local/etc/fail2ban/
Основные файлы:
jail.conf (не редактировать)
jail.local (наша конфигурация)
filter.d/
action.d/
Создаем основной конфиг:
ee /usr/local/etc/fail2ban/jail.local
5. Production конфигурация jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1d
backend = auto
banaction = pf
usedns = no
loglevel = INFO
logtarget = /var/log/fail2ban.log
# SSH brute-force защита
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 6h
# Nginx basic-auth brute-force
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 12h
# Nginx 401 атаки (опционально)
[nginx-401]
enabled = false
port = http,https
filter = nginx-401
logpath = /var/log/nginx/access.log
maxretry = 10
bantime = 6h
# Postfix SMTP AUTH brute-force
[postfix-sasl]
enabled = true
port = smtp,submission,465
filter = postfix-sasl
logpath = /var/log/maillog
maxretry = 5
bantime = 24h
# Postfix spam / relay атаки
[postfix]
enabled = false
port = smtp
filter = postfix
logpath = /var/log/maillog
maxretry = 10
bantime = 12h
6. Кастомный фильтр для nginx (401)
Если нужно банить HTTP brute-force через access.log, создаем:
/usr/local/etc/fail2ban/filter.d/nginx-401.conf
[Definition]
failregex = ^<HOST> - .* "(GET|POST|HEAD).*" 401 .*
ignoreregex =
7. Проверка логов сервисов
Fail2Ban должен видеть реальные логи.
SSH
/var/log/auth.logNginx
/var/log/nginx/error.log/var/log/nginx/access.log
Postfix
/var/log/maillogЕсли postfix пишет в syslog, убедитесь что mail facility идет в maillog.
8. Запуск Fail2Ban
service fail2ban start
или
service fail2ban restart
9. Проверка jail
Список jail:
fail2ban-client status
Пример вывода:
Status
|- Number of jail: 3
`- Jail list: sshd, nginx-http-auth, postfix-sasl
Проверка конкретного jail:
fail2ban-client status sshd
10. Проверка блокировок
Список забаненных IP:pfctl -t fail2ban -T show
11. Разбан IP
fail2ban-client set sshd unbanip 1.2.3.4
или напрямую через PF:
pfctl -t fail2ban -T delete 1.2.3.4
12. Полезные production улучшения
Увеличение времени бана при повторных атаках
bantime.increment = true
bantime.factor = 2
whitelist админских IP
ignoreip = 127.0.0.1/8 YOUR_ADMIN_IP
просмотр логов Fail2Ban
tail -f /var/log/fail2ban.log
13. Типичная архитектура production сервера
Internet
│
▼
PF firewall
│
▼
Fail2Ban
│
├── sshd (auth.log)
├── nginx (error.log / access.log)
└── postfix (maillog)
