Как правильно настроить fail2ban для защиты порта PSQL от брутфорс-атак на Linux сервере?
Fail2ban — это мощный инструмент для защиты сервисов от брутфорс-атак путём автоматической блокировки IP-адресов, с которых фиксируются подозрительные попытки входа. Настройка fail2ban для PostgreSQL требует создания кастомного фильтра и jail-конфигурации.
## Шаг 1: Убедитесь, что PostgreSQL логирует попытки подключения
Откройте файл конфигурации PostgreSQL:
nano /etc/postgresql/*/main/postgresql.conf
Убедитесь, что включены следующие параметры:
log_connections = on
log_failed_connections = on
log_destination = ‘stderr’
logging_collector = on
log_directory = ‘pg_log’
log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’
После изменений перезапустите PostgreSQL:
systemctl restart postgresql
## Шаг 2: Создайте фильтр для fail2ban
Создайте файл фильтра:
nano /etc/fail2ban/filter.d/postgresql.conf
Добавьте следующее содержимое:
[Definition]
failregex = ^.*FATAL: password authentication failed for user.*host=.*$
^.*FATAL: no pg_hba.conf entry for host «».*$
^.*FATAL: connection rejected.*host=.*$
ignoreregex =
## Шаг 3: Создайте jail для PostgreSQL
Откройте или создайте файл локальной конфигурации:
nano /etc/fail2ban/jail.d/postgresql.conf
Добавьте конфигурацию:
[postgresql]
enabled = true
filter = postgresql
action = iptables[name=PostgreSQL, port=5432, protocol=tcp]
logpath = /var/log/postgresql/postgresql-*.log
maxretry = 5
findtime = 600
bantime = 3600
Параметры:
— **maxretry** — максимальное количество неудачных попыток (5 по умолчанию)
— **findtime** — временной интервал в секундах для подсчёта попыток (600 = 10 минут)
— **bantime** — время блокировки в секундах (3600 = 1 час; -1 для постоянной блокировки)
## Шаг 4: Проверьте корректность фильтра
Перед применением проверьте, что фильтр корректно распознаёт строки лога:
fail2ban-regex /var/log/postgresql/postgresql-*.log /etc/fail2ban/filter.d/postgresql.conf
## Шаг 5: Перезапустите fail2ban и проверьте статус
systemctl restart fail2ban
fail2ban-client status postgresql
## Дополнительные рекомендации
— Ограничьте доступ к порту 5432 через файрвол только доверенным IP-адресам с помощью iptables или ufw.
— Используйте pg_hba.conf для ограничения диапазона IP, которым разрешено подключение к базе данных.
— Рассмотрите увеличение bantime до 86400 (24 часа) или используйте значение -1 для постоянной блокировки повторных нарушителей.
— Настройте уведомления по email при срабатывании блокировок через параметр action в jail-конфигурации.
— Регулярно проверяйте список заблокированных IP командой `fail2ban-client status postgresql`.
