SELinux evitando que o Fail2Ban envie e-mail de notificação via msmtp

1

Tenho o msmtp como um cliente nulo conectado à minha conta do AWS SES para SMTP, fornecendo alertas como cron, monit e, em breve, esperançosamente, 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. Eu recebo e-mails proibidos. No modo Impingir, o Fail2Ban registra um erro e nenhum email é enviado. Uma tentativa é feita para que seja enviada, de acordo com o log msmtp, mas não está indo.

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

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 essa mensagem Fail2Ban exata da linha de comando para o msmtp (diretamente ou por meio do symlink do sendmail) e 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

No jail.conf:

mta = sendmail

sealert não me dá nenhum indício que eu possa reconhecer ou ação.

Confirmei que o fail2ban é executado como root:

$ ps aux | grep fail2ban

Eu adicionei alguns registros adicionais e agora consegui 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 dizer ao SELinux que o Fail2Ban tem permissão para jogar bem com o msmtp?

    
por JayMcTee 29.09.2015 / 15:46

1 resposta

1

Após adicionar mais registros verbosos, recebi dicas suficientes do sistema (e de @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

Além disso:

ausearch -m avc

Estes 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

Eu dei uma olhada para ver o que isso criou:

$ vim fail2ban_msmtp.te

Em seguida, instalei a política, tornando-a persistente na reinicialização:

$ semodule -i fail2ban_msmtp.pp

Em seguida, eu banquei um IP aleatório para acionar uma transação com e-mail para confirmar que agora, finalmente, envia-me o e-mail desejado via msmtp:

$ fail2ban-client set sshd banip 162.229.158.134

Presto! Tão fácil, esse material do SELinux.

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

$ setsebool -P nis_enabled 1
    
por 29.09.2015 / 17:26