SMTP için AWS SES hesabıma bağlanan, cron, monit ve yakında Fail2Ban gibi uyarıları e-posta adreslerime gönderen boş bir istemci olarak msmtp'ye sahibim. Ancak Fail2Ban top oynamıyor ya da daha kesin olmak gerekirse, selinux olayların olmasını engelliyor.

action_mwl İzinli modda gayet iyi çalışıyor. Yasak e-postaları alıyorum. Zorlama modunda, Fail2Ban bir hata kaydeder ve hiçbir posta gönderilmez. Msmtp günlüğüne göre gönderilmeye çalışılıyor ama gitmiyor.

İşte böyle bir (bir parçası) Fail2Ban günlük girişi:

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'

msmtp raporları:

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

Bu bir msmtp yapılandırma sorunu veya bir e-posta gövdesi içeriği sorunu değil, çünkü tam olarak bu Fail2Ban mesajını komut satırı borularından msmtp'ye (doğrudan veya sendmail sembolik bağlantısı aracılığıyla) gönderebiliyorum ve gayet güzel gönderiyor. Kimlik bilgileri vb. bu nedenle iyidir. Ayrıca cron üzerinden çalışır. Bu da bir güvenlik duvarı sorunu olmadığı anlamına gelir.

$ 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

jail.conf'ta:

mta = sendmail

mühürleyici bana tanıyabileceğim veya harekete geçebileceğim herhangi bir ipucu vermiyor.

fail2ban'ın root olarak çalıştığını onayladım:

$ ps aux | grep fail2ban

Bazı ek günlükler ekledim ve şimdi bunu /var/log/messages içine alıyorum

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.

Daha sonra nereye bakmalı? SELinux Fail2Ban'in msmtp ile iyi oynamasına izin verildiğini nasıl söyleyebilirim?

answer

Daha ayrıntılı günlük kaydı ekledikten sonra, bunu anlamak için sistemden (ve @Michael Hampton'dan) yeterli ipucu aldım.

yum install setroubleshoot setools

Bu, /var/log/messages içinde çok daha fazla bilgi verir ve aşağıdaki gibi araçlar sunar:

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

Ayrıca:

ausearch -m avc

Bunlar size aşağıdaki gibi talimatlar verecektir:

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

Önerilen komutu çalıştırmak:

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

Bana verir:

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

Ben de yaptım:

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

Ne yarattığını görmek için bir göz attım:

$ vim fail2ban_msmtp.te

Ardından politikayı yükleyerek yeniden başlatmanın ardından kalıcı hale getirdi:

$ semodule -i fail2ban_msmtp.pp

Daha sonra, e-postayla bir yasaklamayı tetiklemek için rastgele bir IP'yi yasakladım ve şimdi nihayet bana istenen e-postayı msmtp aracılığıyla gönderiyor:

$ fail2ban-client set sshd banip 162.229.158.134

Presto! Bu SELinux işi çok kolay.

PS Başka bir yol gibi görünüyor (test edilmedi):

$ setsebool -P nis_enabled 1