SELinux impedindo que Fail2Ban envie notificação por e-mail via msmtp

SELinux impedindo que Fail2Ban envie notificação por e-mail via msmtp

Tenho msmtp como um cliente nulo conectando-se à minha conta AWS SES para SMTP, entregando alertas como cron, monit e em breve Fail2Ban para meus endereços de e-mail. No entanto, o Fail2Ban não está jogando bola ou, para ser mais preciso, o selinux está impedindo que as coisas aconteçam.

action_mwl funciona bem no modo Permissivo. Recebo e-mails de proibição. No modo Enforcing, Fail2Ban registra um erro e nenhum email é enviado. Foi feita uma tentativa de envio, conforme log do msmtp, mas não deu certo.

Aqui está uma entrada de log Fail2Ban (parte de uma):

2015-09-29 12:25:12,543 fail2ban.actions        [31113]: ERROR   Failed to execute ban jail 'wordpress' action 'sendmail-whois-lines' info 'CallingMap({'ipjailmatches': <function <lambda> at 0x2c5ac08>, 'matches': u'

relatórios msmtp:

Sep 29 12:25:12 host=email-smtp.eu-west-1.amazonaws.com tls=on auth=on user=12345 [email protected] [email protected] errormsg='cannot connect to email-smtp.eu-west-1.amazonaws.com, port 587: Permission denied' exitcode=EX_TEMPFAIL

Não é um problema de configuração do msmtp nem um problema de conteúdo do corpo do e-mail, pois posso enviar aquela mensagem Fail2Ban exata da linha de comando para o msmtp (diretamente ou via link simbólico do sendmail) perfeitamente e ele envia lindamente. Credenciais, etc., portanto, estão bem. Também funciona via cron. O que significa que também não é um problema de firewall.

$ sudo ls -lZ /usr/bin/msmtp
-rwxr-xr-x. root root system_u:object_r:bin_t:s0       /usr/bin/msmtp

$ sudo ls -lZ /usr/bin/sendmail
lrwxrwxrwx. root root unconfined_u:object_r:bin_t:s0   /usr/bin/sendmail -> /usr/bin/msmtp

Em jail.conf:

mta = sendmail

Sealert não me dá nenhuma dica que eu possa reconhecer ou agir.

Confirmei que fail2ban é executado como root:

$ ps aux | grep fail2ban

Eu adicionei alguns registros adicionais e agora coloco isso em /var/log/messages

Sep 29 16:11:15 ip-172-31-6-51 setroubleshoot: SELinux is preventing /usr/bin/msmtp from name_connect access on the tcp_socket port 587. For complete SELinux messages. run sealert -l 78f05dbd-a953-4196-9f14-afaabb5a4d88
Sep 29 16:11:15 ip-172-31-6-51 python: SELinux is preventing /usr/bin/msmtp from name_connect access on the tcp_socket port 587.

Onde procurar a seguir? Como posso saber se o SELinux Fail2Ban pode funcionar bem com o msmtp?

Responder1

Depois de adicionar registros mais detalhados, recebi dicas suficientes do sistema (e do @Michael Hampton) para descobrir isso.

yum install setroubleshoot setools

Isso gera muito mais informações em /var/log/messages e oferece ferramentas como:

sealert -a /var/log/audit/audit.log

Também:

ausearch -m avc

Eles lhe darão instruções como:

Sep 29 16:11:15 ip-172-31-6-51 setroubleshoot: SELinux is preventing /usr/bin/msmtp from name_connect access on the tcp_socket port 587. For complete SELinux messages. run sealert -l 78f05dbd-a953-4196-9f14-afaabb5a4d88

Executando o comando sugerido:

sealert -l 78f05dbd-a953-4196-9f14-afaabb5a4d88

Me dá:

If you believe that msmtp should be allowed name_connect access on the port 587 tcp_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep msmtp /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

Então eu fiz:

$ grep msmtp /var/log/audit/audit.log | audit2allow -M fail2ban_msmtp

Dei uma olhada para ver o que ele criou:

$ vim fail2ban_msmtp.te

E então instalei a política, tornando-a persistente na reinicialização:

$ semodule -i fail2ban_msmtp.pp

Em seguida, bani um IP aleatório para acionar um banimento com e-mail para confirmar e agora finalmente me envia o e-mail desejado via msmtp:

$ fail2ban-client set sshd banip 162.229.158.134

Presto! Tão fácil, essa coisa do SELinux.

PS Outra maneira parece ser (não testada):

$ setsebool -P nis_enabled 1

informação relacionada