Настройка Fail2Ban на FreeBSD 14

Itnull

Команда форума
Администратор
Регистрация
22.05.13
Сообщения
27.890
Реакции
12.481
Веб-сайт
itnull.me

Настройка​

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.log


Nginx​

/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)
 

Создайте аккаунт или войдите в систему, чтобы комментировать

Вы должны быть зарегистрированным, чтобы оставить комментарий

Создать аккаунт

Создайте аккаунт в нашем сообществе.

Войти

У вас уже есть аккаунт? Войдите здесь.

Назад
Сверху Снизу