Tôi có msmtp với tư cách là ứng dụng khách rỗng kết nối với tài khoản AWS SES của tôi cho SMTP, gửi các cảnh báo như cron, theo dõi và hy vọng sắp tới là Fail2Ban tới địa chỉ email của tôi. Tuy nhiên, Fail2Ban không chơi bóng, hay nói chính xác hơn, selinux đang ngăn mọi thứ xảy ra.

action_mwl chỉ hoạt động tốt ở chế độ Cho phép. Tôi nhận được những e-mail bị cấm. Trong chế độ Thực thi, Fail2Ban ghi lại một lỗi và không có thư nào được gửi đi. Theo nhật ký msmtp, người ta đã cố gắng gửi nó đi, nhưng nó không thành công.

Đây là một (một phần của mục nhập nhật ký 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'

msmtp báo cáo:

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

Đó không phải là vấn đề cấu hình msmtp cũng không phải là vấn đề về nội dung email vì tôi có thể gửi thông báo Fail2Ban chính xác đó từ đường ống dòng lệnh đến msmtp (trực tiếp hoặc thông qua liên kết biểu tượng sendmail) tốt và nó gửi rất đẹp. Thông tin xác thực, vv do đó là tốt. Cũng hoạt động thông qua cron. Có nghĩa là nó cũng không phải là vấn đề tường lửa.

$ 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

Trong jail.conf:

mta = sendmail

sealert không cung cấp cho tôi bất kỳ gợi ý nào mà tôi có thể nhận ra hoặc hành động.

Tôi đã xác nhận fail2ban chạy dưới dạng root:

$ ps aux | grep fail2ban

Tôi đã thêm một số ghi nhật ký bổ sung và bây giờ nhận được điều này trong / 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.

Tiếp theo để xem ở đâu? Làm cách nào để biết SELinux Fail2Ban được phép chơi tốt với msmtp?

answer

Sau khi thêm nhiều bản ghi chi tiết hơn, tôi đã nhận được đầy đủ gợi ý từ hệ thống (và @Michael Hampton) để tìm ra điều này.

yum install setroubleshoot setools

Điều này mang lại nhiều thông tin hơn trong / var / log / messages và cung cấp các công cụ như:

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

Cũng:

ausearch -m avc

Những điều này sẽ cung cấp cho bạn các hướng dẫn như:

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

Chạy lệnh gợi ý:

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

Đưa cho tôi:

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

Tôi cũng vậy:

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

Tôi đã xem qua để xem nó đã tạo ra những gì:

$ vim fail2ban_msmtp.te

Và sau đó cài đặt chính sách, làm cho nó hoạt động liên tục khi khởi động lại:

$ semodule -i fail2ban_msmtp.pp

Sau đó, tôi đã cấm một IP ngẫu nhiên để kích hoạt một hành động bằng email để xác nhận, giờ cuối cùng tôi đã gửi cho tôi email mong muốn qua msmtp:

$ fail2ban-client set sshd banip 162.229.158.134

Mau! Thật dễ dàng, công cụ SELinux này.

PS Một cách khác dường như được (không được thử nghiệm):

$ setsebool -P nis_enabled 1