मेरे पास एसएमटीपी के लिए मेरे एडब्ल्यूएस एसईएस खाते से जुड़ने वाले एक अशक्त ग्राहक के रूप में msmtp है, जो मेरे ईमेल पते पर क्रोन, मोनिट और जल्द ही Fail2Ban जैसे अलर्ट वितरित करता है। हालाँकि, Fail2Ban गेंद नहीं खेल रहा है, या अधिक सटीक होने के लिए, selinux चीजों को होने से रोक रहा है।

action_mwl अनुमेय मोड में ठीक काम करता है। मुझे प्रतिबंधित ई-मेल मिलते हैं। प्रवर्तन मोड में, Fail2Ban एक त्रुटि लॉग करता है और कोई मेल नहीं भेजा जाता है। Msmtp लॉग के अनुसार, इसे भेजने का प्रयास किया जाता है, लेकिन यह नहीं जा रहा है।

यहाँ एक ऐसा (एक का हिस्सा) 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'

एमएसएमटीपी रिपोर्ट:

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 कॉन्फिग इश्यू नहीं है और न ही ईमेल बॉडी कंटेंट इश्यू है क्योंकि मैं कमांड लाइन पाइपिंग से msmtp (सीधे, या सेंडमेल सिमलिंक के माध्यम से) में सटीक Fail2Ban मैसेज भेज सकता हूं और यह खूबसूरती से भेजता है। क्रेडेंशियल आदि इसलिए ठीक हैं। क्रॉन के माध्यम से भी काम करता है। जिसका अर्थ है कि यह फ़ायरवॉल समस्या भी नहीं है।

$ 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

जेल में।

mta = sendmail

सीलर्ट मुझे कोई संकेत नहीं देता है जिसे मैं पहचान सकता हूं या कार्रवाई कर सकता हूं।

मैंने पुष्टि की है कि फ़ेल2बैन रूट के रूप में चलता है:

$ 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 के साथ अच्छी तरह से खेलने की अनुमति है?

answer

अधिक वर्बोज़ लॉगिंग जोड़ने के बाद, मुझे यह पता लगाने के लिए सिस्टम (और @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

इसके बाद मैंने ईमेल के साथ प्रतिबंध लगाने के लिए एक यादृच्छिक आईपी पर प्रतिबंध लगा दिया, यह पुष्टि करने के लिए कि अब अंत में मुझे msmtp के माध्यम से वांछित ईमेल शूट करता है:

$ fail2ban-client set sshd banip 162.229.158.134

प्रेस्टो! इतना आसान, यह SELinux सामान।

पीएस एक और तरीका प्रतीत होता है (परीक्षण नहीं किया गया):

$ setsebool -P nis_enabled 1