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でうまく再生できることをどのように知ることができますか?
詳細なログを追加した後、システム(および@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