web-dev-qa-db-ja.com

SELinuxは、Fail2Banがmsmtpを介して通知を電子メールで送信するのを防ぎます

SMTP用のAWSSESアカウントに接続するヌルクライアントとしてmsmtpを使用しており、cron、monit、できればFail2Banなどのアラートをメールアドレスに配信しています。ただし、Fail2Banはボールをプレーしていません。より正確には、selinuxは事態の発生を防いでいます。

action_mwlは、許容モードで問題なく機能します。禁止メールが届きます。強制モードでは、Fail2Banはエラーをログに記録し、メールは送信されません。 msmtpログによると、送信しようとしましたが、送信されません。

これがそのような(aの一部)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レポート:

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

コマンドラインパイプからmsmtpに(直接またはsendmailシンボリックリンクを介して)正確なFail2Banメッセージを送信でき、美しく送信されるため、msmtp構成の問題でも電子メール本文の問題でもありません。したがって、資格情報などは問題ありません。 cron経由でも機能します。つまり、ファイアウォールの問題でもありません。

$ 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内:

mta = sendmail

シーラートは、私が認識したり行動したりできるヒントを私に与えません。

私はfail2banがrootとして実行されることを確認しました:

$ ps aux | grep fail2ban

いくつかのログを追加し、これを/ 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.

次にどこを見ればいいですか? SELinux Fail2Banがmsmtpでうまく再生できることをどのように知ることができますか?

1
JayMcTee

詳細なログを追加した後、システム(および@Michael Hampton)からこれを理解するのに十分なヒントを得ました。

yum install setroubleshoot setools

これにより、/ var/log/messagesにさらに多くの情報が生成され、次のようなツールが提供されます。

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

また:

ausearch -m avc

これらはあなたに次のような指示を与えるでしょう:

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

提案されたコマンドの実行:

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

私に与える:

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

だから私はしました:

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

私はそれが何を作成したかを見てみました:

$ vim fail2ban_msmtp.te

次に、ポリシーをインストールして、再起動時に永続的にします。

$ semodule -i fail2ban_msmtp.pp

次に、ランダムIPを禁止して、電子メールで禁止をトリガーし、最終的にmsmtpを介して目的の電子メールを送信することを確認しました。

$ fail2ban-client set sshd banip 162.229.158.134

プレスト!とても簡単です、このSELinuxのもの。

PS別の方法は(テストされていない)ようです:

$ setsebool -P nis_enabled 1
1
JayMcTee