Как правильно настроить 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`.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.