История начинается с того что мне понадобилось настроить Fail2ban на блокировку по IP
если кото-то неудачно залогинился в PostgreSQL, если интересно можно почитать тут. Так вот написал я своё правило верно, но при старте fail2ban получил ошибку Have not found any log file for postgres-lockuser jail. По сути ошибка говорит о том, что нет никаких логов в директории, что я указал. Но я-то знаю, что там есть, да и если выключить Selinux то всё работает прекрасно.
Решение
Have not found any log file for jail
Начинающий специалист или в простонародном пофигист просто отключил бы этот вредный Selinux и пошёл дальше смотреть приколы в глобальной паутине. Но это не мой выход, и я решил разобраться. Да и решение на самом деле оказалось довольно простым.
/var/log/audit/audit.log
Для начала проверим логи /var/log/audit/audit.log.
sudo tail -f /var/log/audit/audit.log | grep fail2ban-server
type=AVC msg=audit(1665124834.173:407292): avc: denied { read } for pid=16323 comm="fail2ban-server" name="log" dev="sdi" ino=1442802 scontext=system_u:system_r:fail2ban_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=0
Да вроде бы и нашли что-то, но кто-то может и не понять, что тут да к чему, поэтому посмотрим немного с другой стороны, более удобной человеческому взгляду.
sudo audit2allow -w -a
type=AVC msg=audit(1665124834.173:407292): avc: denied { read } for pid=16323 comm="fail2ban-server" name="log" dev="sdi" ino=1442802 scontext=system_u:system_r:fail2ban_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=0
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
В итоге мы видим, что нет правила selinux чтобы Fail2ban имел доступ к логам PostgreSQL.
Создадим это правило
На самом деле всё просто и создаём мы все одной командой.
Для начала узнаем какое правило нам нужно найти в логах. Для этого выполняем:
sudo audit2allow -a
#============= fail2ban_t ==============
#!!!! WARNING: 'unlabeled_t' is a base type.
allow fail2ban_t unlabeled_t:dir read
Теперь используя grep отыщем логи с упоминанием fail2ban и сразу же создадим правило только для fail2ban. Иначе в правило попадут все проблемные сервисы и права для них.
sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-postgresql
To make this policy package active, execute:
semodule -i fail2ban-postgresql.pp
В выводе нам как бы сразу намекают что это еще не всё и нужно применить созданное правило. Но для начала рекомендую проверить какие файлы нам создала команда выше.
sudo ls -la | grep fail2ban
-rw-r-----. 1 root root 2008 Oct 7 14:07 fail2ban-postgresql.pp
-rw-r-----. 1 root root 840 Oct 7 14:07 fail2ban-postgresql.te
В файле fail2ban-postgresql.te
как раз-таки и прописывается что будет происходить при активации данного правила.
sudo vim fail2ban-postgresql.te
module fail2ban-postgresql 1.0;
require {
type unlabeled_t;
type fail2ban_t;
class dir read;
}
#============= fail2ban_t ==============
#!!!! WARNING: 'unlabeled_t' is a base type.
allow fail2ban_t unlabeled_t:dir read;
Применяем правило
И теперь собственно последний шаг в этом нелегком деле - это применить созданное правило.
sudo semodule -i fail2ban-postgresql.pp
Иногда возможно будет необходимо провести все операции еще раз, так как после исправления одной проблемы с Selinux возможно придётся исправлять новую.
Комментарии