18 декабря 2023 СуБД fail2ban postgres
Если postgres используется в качестве мастерсервера для репликаций то у него должен быть открыт порт для подключения клиентов извне, соответственно открытый порт начнут сканировать с целью подобрать пароли и тогда в логах появится вот такое записи
postgres@postgres FATAL: no pg_hba.conf entry for host "115.216.124.164", user "postgres", database "postgres", no encryption
postgres@postgres FATAL: no pg_hba.conf entry for host "222.90.83.209", user "postgres", database "postgres", no encryption
Причём, подбор паролей идёт активно, десятки тысяч запросов за сутки
for f in /var/log/postgresql/postgresql-14-main.log.*.gz; do
echo `date -r $f +"%Y-%m-%d"` `zcat $f | grep 'no pg_hba.conf entry for host' |wc -l` ;
done
2023-10-15 79090
2023-12-10 81664
2023-12-03 33115
2023-11-26 22769
2023-11-19 100753
2023-11-12 70794
2023-11-05 130725
2023-10-29 82514
2023-10-22 119528
Для блокировки адресов источников запроса необходимо добавить фильтр и добавить новое правило в fail2ban
/etc/fail2ban/filter.d/postgres.conf
[Definition]
failregex = FATAL: no pg_hba.conf entry for host "<HOST>"
Затем созданное имя фильтра необходимо использовать в правиле, добавив в конец файла /etc/fail2ban/jail.conf
[postgresql]
enabled = true
filter = postgres
action = iptables[name=PostgreSQL, port=5432, protocol=tcp, blocktype=DROP]
sendmail-whois[name=PostgreSQL, dest=root]
logpath = /var/log/postgresql/postgresql-14-main.log
maxretry = 3
findtime = 600
bantime = 604800
После этого необходимо перезапустить fail2ban: service fail2ban restart
и проконтролировать перезапуск сервиса просмотрел логи: tail -f /var/log/fail2ban.log
- fail2ban-client status # — покажет список сервисов события которых обслуживает fail2ban
- fail2ban-client status postgresql # — показать статус обработки postgresql
- fail2ban-client set postgresql unbanip 115.216.124.164 222.90.83.209 34.76.158.233 # — удалить из бана заданные IP