Aujourd’hui, je vais vous présenter rapidement une configuration SELinux pour pouvoir utiliser Fail2ban de manière correcte.
Notre système système est toujours une Centos 6 à jour. La politique SELinux est une politique mls presque de base et l’objectif est de l’utiliser en mode enforcing.
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: permissive
Policy version: 24
Policy from config file: mls
Fail2ban est un logiciel de protection réseau qui va bannir pendant un temps spécifique les IP qui “tentent des choses” sur notre serveur. Pour cela, il doit aller lire le contenu de certains fichiers. Suivant la configuration ces fichiers vont être : messages, daemon, syslog, etc.
Sur une configuration de base, le module de politique SELinux pour Fail2ban n’est pas assez bien renseigné et Fail2ban ne peut pas se lancer. Il est nécessaire de lui donner quelques accès supplémentaire pour qu’il puisse fonctionner correctement.
Sur notre configuration, Fail2ban ne s’occupe que de : ssh, bind, httpd et postfix. Pour pouvoir lancer correctement Fail2ban, il faut commencer par rajouter ces éléments. On notera que par défaut, Fail2ban n’a pas le droit d’aller lire le contenu des fichiers de log alors que c’est son but principal…
allow insmod_t fail2ban_t:fifo_file { write read };
allow insmod_t fail2ban_tmp_t:file { write };
allow insmod_t inotifyfs_t:dir read;
allow insmod_t var_log_t:file read
mls_file_read_all_levels(fail2ban_t);
allow initrc_t fail2ban_t:unix_stream_socket { connectto };
allow initrc_t fail2ban_var_run_t:sock_file { write setattr };
allow fail2ban_t var_log_t:file { read getattr };
Il est nécessaire de générer une exception au niveau MLS pour que Fail2ban puisse lire les fichiers qui ne sont pas à son niveau de sensibilité (No Read Up de Bell-La Padula). Les règles sur l’init permettent de pouvoir (re)lancer le programme depuis la commande run_init.
Si vous souhaitez en plus rajouter le fait que Fail2ban aille lire le contenu de /var/log/audit/audit.log (pour activer le ssh-selinux par exemple), il suffit de rajouter les lignes suivantes :
allow fail2ban_t auditd_log_t:dir search;
allow fail2ban_t auditd_log_t:file read;
allow fail2ban_t auditd_log_t:file open;
allow fail2ban_t auditd_log_t:file getattr;
allow fail2ban_t auditd_log_t:dir read;
allow fail2ban_t auditd_log_t:dir getattr;
Il ne reste plus qu’à compiler la politique, la charger et lancer Fail2ban avec la commande run_init.