{"id":1130,"date":"2019-07-19T16:19:52","date_gmt":"2019-07-19T14:19:52","guid":{"rendered":"https:\/\/www.howto-do.it\/de\/?post_type=howto&#038;p=1130"},"modified":"2021-02-01T12:57:25","modified_gmt":"2021-02-01T11:57:25","slug":"fail2ban-ueberwacht-logfiles-nicht","status":"publish","type":"howto","link":"https:\/\/www.howto-do.it\/de\/howto\/fail2ban-ueberwacht-logfiles-nicht\/","title":{"rendered":"Fail2ban \u00fcberwacht Logfiles nicht"},"content":{"rendered":"<p>Mit fail2ban kann man unter Linux Logfiles \u00fcberwachen und den Server gegen massive Einbruchsversuche \u00fcber das Netzwerk sch\u00fctzen. Mit fail2ban kann man zum Beispiel den ssh-Daemon absichern oder die access-Logs einer Website kontrollieren und Angreifer vom weiteren Zugriff aussperren.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Inhalt<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a2b4b1664b73\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a2b4b1664b73\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.howto-do.it\/de\/howto\/fail2ban-ueberwacht-logfiles-nicht\/#Ein_merkwuerdiges_Phaenomen_von_fail2ban\" >Ein merkw\u00fcrdiges Ph\u00e4nomen von fail2ban<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.howto-do.it\/de\/howto\/fail2ban-ueberwacht-logfiles-nicht\/#Wie_bemerkt_man_dass_fail2ban_nicht_funktioniert\" >Wie bemerkt man dass fail2ban nicht funktioniert?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.howto-do.it\/de\/howto\/fail2ban-ueberwacht-logfiles-nicht\/#Fehlersuche_mit_fail2ban\" >Fehlersuche mit fail2ban<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.howto-do.it\/de\/howto\/fail2ban-ueberwacht-logfiles-nicht\/#Fazit_zum_fail2ban_%E2%80%9EFehler%E2%80%9C\" >Fazit zum fail2ban \u201eFehler\u201c<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Ein_merkwuerdiges_Phaenomen_von_fail2ban\"><\/span>Ein merkw\u00fcrdiges Ph\u00e4nomen von fail2ban<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wir setzen als Linux Distribution haupts\u00e4chlich Centos ein. Unter Centos 6 funktioniert das \u00dcberwachen von apache Logfiles mit fail2ban prima. Sowohl Jails als auch Actions sind ok. Unter Centos7 werden aber bei n\u00e4herem Hinsehen die Logfiles der nginx\/apache Websites nicht wirklich \u00fcberwacht. In der Konsequenz kann sich der Webserver nicht effektiv gegen verteilte DDOS Angriffe wehren.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Wie_bemerkt_man_dass_fail2ban_nicht_funktioniert\"><\/span>Wie bemerkt man dass fail2ban nicht funktioniert?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Im ersten Schritt steigt in der Regel die Last auf dem Centos 7 Server erheblich an. Bei einer Analyse f\u00e4llt dann auf, da\u00df sehr viele php-fpm Prozesse f\u00fcr eine Website immer aktiv sind. Im konkreten Beispiel war nginx mit php-fpm installiert. Das Vorgehen w\u00e4re aber auch bei einem Apache2 im Wesentlichen identisch.<\/p>\n<p>Sofern man sich das Logfile der Web-Domain n\u00e4her anschaut, st\u00f6\u00dft man auf folgenden Eintr\u00e4ge.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">66.33.212.11 - - [18\/Jul\/2019:15:42:53 +0000] \"GET \/wp-login.php HTTP\/1.1\" 499 0 \"-\" \"Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko\/20100101 Firefox\/62.0\"\r\n\r\n132.148.130.138 - - [18\/Jul\/2019:15:42:54 +0000] \"POST \/wp-login.php HTTP\/1.1\" 499 0 \"-\" \"Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko\/20100101 Firefox\/62.0\"<\/pre>\n<p>Wir haben bereits einen Filter f\u00fcr genau diesen Fall:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[Definition]\r\n\r\nfailregex = ^&lt;HOST&gt; .* \"GET \/wp-login.php\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^&lt;HOST&gt; .* \"POST \/wp-login.php\"<\/pre>\n<p>Ebenfalls ist unter \/etc\/fail2ban\/jail.conf ein Eintrag daf\u00fcr vorhanden:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[apache-wplogin]\r\n\r\nenabled\u00a0 = true\r\n\r\naction\u00a0\u00a0 = iptables-multiport[name=apache-wplogin, port=\"80,443\", protocol=tcp]\r\n\r\nfilter\u00a0\u00a0 = apache-wplogin\r\n\r\nlogpath\u00a0 = \/var\/log\/ispconfig\/httpd\/*\/access.log\r\n\r\n#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/var\/log\/ispconfig\/httpd\/*\/access.log\r\n\r\nmaxretry = 5\r\n\r\nfindtime = 600<\/pre>\n<p>Trotzdem finden sich keine Eintr\u00e4ge von IP-adressen in den iptables oder bei der Auflistung des fail2ban-jails:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">iptables -L -n\r\n\r\nChain f2b-apache-wplogin (1 references)\r\n\r\ntarget\u00a0\u00a0\u00a0 \u00a0prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination\r\n\r\nRETURN\u00a0\u00a0\u00a0\u00a0 all\u00a0 --\u00a0 0.0.0.0\/0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0.0.0\/0<\/pre>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Fehlersuche_mit_fail2ban\"><\/span>Fehlersuche mit fail2ban<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Die Ausgabe von &#8220;fail2ban-client status&#8221; bringt folgendes:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[root@server01 fail2ban]# fail2ban-client status\r\n\r\nWARNING 'pidfile' not defined in 'Definition'. Using default one: '\/var\/run\/fail2ban\/fail2ban.pid'\r\n\r\nStatus\r\n\r\n|- Number of jail:\u00a0\u00a0\u00a0\u00a0\u00a0 10\r\n\r\n`- Jail list:\u00a0\u00a0 apache-wplogin, apache-xmlrpc, dovecot, nginx-wplogin, postfix-sasl, pure-ftpd, recidive, ssh-blocklist, ssh-iptables, sshd\r\n\r\n[root@server01 fail2ban]#<\/pre>\n<p>Sofern man sich dann ein Jail genauer anschaut:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[root@server01 fail2ban]# fail2ban-client status apache-wplogin\r\n\r\nWARNING 'pidfile' not defined in 'Definition'. Using default one: '\/var\/run\/fail2ban\/fail2ban.pid'\r\n\r\nStatus for the jail: apache-wplogin\r\n\r\n|- Filter\r\n\r\n|\u00a0 |- Currently failed: 0\r\n\r\n|\u00a0 |- Total failed:\u00a0\u00a0\u00a0\u00a0 0\r\n\r\n|\u00a0 `- Journal matches:\r\n\r\n`- Actions\r\n\r\n\u00a0\u00a0 |- Currently banned: 0\r\n\r\n\u00a0\u00a0 |- Total banned:\u00a0\u00a0\u00a0\u00a0 0\r\n\r\n\u00a0\u00a0 `- Banned IP list:\r\n\r\n[root@server01 fail2ban]#<\/pre>\n<p>Bei genauerem Hinsehen f\u00e4llt also auf, dass f\u00fcr das <strong>Jail \u201eapache-wplogin&#8221; gar kein Logfile \u00fcberwacht wird<\/strong>. Die Zeile \u201eJournal matches&#8221; benennt jeweils f\u00fcr jedes Jail die \u00fcberwachten Logfiles. Zum Vergleich schauen wir uns den ssh-jail an, der die erfolglosen Einbruchsversuche \u00fcber ssh protololliert:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[root@server01 fail2ban]# fail2ban-client status ssh-iptables\r\n\r\nWARNING 'pidfile' not defined in 'Definition'. Using default one: '\/var\/run\/fail2ban\/fail2ban.pid'\r\n\r\nStatus for the jail: ssh-iptables\r\n\r\n|- Filter\r\n\r\n|\u00a0 |- Currently failed: 13\r\n\r\n|\u00a0 |- Total failed:\u00a0\u00a0\u00a0\u00a0 79\r\n\r\n|\u00a0 `- Journal matches:\u00a0 _SYSTEMD_UNIT=sshd.service + _COMM=sshd\r\n\r\n`- Actions\r\n\r\n\u00a0\u00a0 |- Currently banned: 7\r\n\r\n\u00a0\u00a0 |- Total banned:\u00a0\u00a0\u00a0\u00a0 7\r\n\r\n\u00a0\u00a0 `- Banned IP list:\u00a0\u00a0 104.211.4.217 177.139.28.241 182.93.48.21 37.187.6.235 177.71.74.230 188.165.211.201 81.149.211.134<\/pre>\n<p>Wenn man tiefer bohrt und die Logfiles pro Jail von fail2ban explizit abfragt\u00a0 mit &#8220;fail2ban-client get &lt;jail&gt; logpath&#8221;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[root@server01 fail2ban]# fail2ban-client get apache-wplogin logpath\r\n\r\nWARNING 'pidfile' not defined in 'Definition'. Using default one: '\/var\/run\/fail2ban\/fail2ban.pid'\r\n\r\nNo file is currently monitored\r\n\r\n[root@server01 fail2ban]#<\/pre>\n<p>Hinweis: Mit &#8220;fail2ban-client -d&#8221; bekommt man f\u00fcr fail2ban die gesamte effektive Konfiguration als Dump angezeigt. Ausschnitt:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">['add', 'apache-wplogin', 'systemd']\r\n\r\n['set', 'apache-wplogin', 'usedns', 'warn']\r\n\r\n['set', 'apache-wplogin', 'maxretry', 5]\r\n\r\n['set', 'apache-wplogin', 'addignoreip', '127.0.0.1\/8']<\/pre>\n<p>Zum Vergleich: So sollte das eigentlich aussehen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">['add', 'apache-wplogin', 'auto']\r\n\r\n['set', 'apache-wplogin', 'usedns', 'warn']\r\n\r\n['set', 'apache-wplogin', 'addlogpath', '\/var\/www\/domain.com\/log\/access.log', 'head']\r\n\r\n...\r\n\r\n['set', 'apache-wplogin', 'addlogpath', '\/var\/log\/httpd\/access_log', 'head']\r\n\r\n['set', 'apache-wplogin', 'maxretry', 10]\r\n\r\n['set', 'apache-wplogin', 'addignoreip', '127.0.0.1\/8']<\/pre>\n<p>Die erste Zeile gibt einen Hinweis darauf, wo es klemmt: Die Standard-Vorgabe f\u00fcr fail2ban bei Centos 7 scheint &#8220;systemd&#8221; zu sein. Das passt f\u00fcr ssh-Einbruchsversuche oder andere Hacks die auf generische Dienste abzielen, deren System-Logfiles via systemd \u00fcberwacht werden k\u00f6nnen. Im Fall unserer Websites m\u00fcssen aber normale Logfile \u00fcberwacht werden.<\/p>\n<p>W\u00e4hrend bei Centos 6 hier pro Jail automatisch die richtige Art der \u00dcberwachung von fail2ban gew\u00e4hlt wurde, muss man bei Centos 7 pro Jail zus\u00e4tzlich das Backend des Logfiles angeben.<\/p>\n<p>In unserem Fall war die richtige Einstellung<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">backend = pyinotify<\/pre>\n<p>Der gesamte Eintrag f\u00fcr ein Jail sieht dann so aus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[apache-wplogin]\r\n\r\nenabled\u00a0 = true\r\n\r\naction\u00a0\u00a0 = iptables-multiport[name=apache-wplogin, port=\"80,443\", protocol=tcp]\r\n\r\nfilter\u00a0\u00a0 = apache-wplogin\r\n\r\nlogpath\u00a0 = \/var\/log\/ispconfig\/httpd\/*\/access.log\r\n\r\nmaxretry = 5\r\n\r\nfindtime = 600\r\n\r\nbackend\u00a0 = pyinotify<\/pre>\n<p>Sobald man die eine <strong>Zeile \u201ebackend = pyinotify\u201c<\/strong> einf\u00fcgt, dann sieht die Abfrage \u201efail2ban-client get apache-wplogin logpath\u201c wie folgt aus:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[root@server01 ~]# fail2ban-client\u00a0 status apache-wplogin\r\n\r\nWARNING 'pidfile' not defined in 'Definition'. Using default one: '\/var\/run\/fail2ban\/fail2ban.pid'\r\n\r\nStatus for the jail: apache-wplogin\r\n\r\n|- Filter\r\n\r\n|\u00a0 |- Currently failed: 0\r\n\r\n|\u00a0 |- Total failed:\u00a0\u00a0\u00a0\u00a0 1202\r\n\r\n|\u00a0 `- File list:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/var\/www\/domain01.net\/log\/access.log \/var\/www\/domain02.com\/log\/access.log\r\n\r\n`- Actions\r\n\r\n\u00a0\u00a0 |- Currently banned: 1\r\n\r\n\u00a0\u00a0 |- Total banned:\u00a0\u00a0\u00a0\u00a0 30\r\n\r\n\u00a0\u00a0 `- Banned IP list:\u00a0\u00a0 122.134.143.253<\/pre>\n<p>Gut zu erkennen ist, da\u00df nun zwei konkrete Log-Files in der \u201eFile List\u201c auftauchen.<\/p>\n<p>Dazu passt dann auch die Ausgabe von \u201eiptables \u2013L \u2013n\u201c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">Chain f2b-apache-wplogin (1 references)\r\n\r\ntarget\u00a0\u00a0\u00a0\u00a0 prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination\r\n\r\nREJECT\u00a0\u00a0\u00a0\u00a0 all\u00a0 --\u00a0 122.134.143.253\u00a0\u00a0\u00a0\u00a0\u00a0 0.0.0.0\/0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reject-with icmp-port-unreachable\r\n\r\nRETURN\u00a0\u00a0\u00a0\u00a0 all\u00a0 --\u00a0 0.0.0.0\/0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0.0.0\/0<\/pre>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Fazit_zum_fail2ban_%E2%80%9EFehler%E2%80%9C\"><\/span>Fazit zum fail2ban \u201eFehler\u201c<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Das Auffinden des Fehlers von fail2ban war hier tats\u00e4chlich kniffelig und zeitaufw\u00e4ndig. Den entscheidenden und anschlie\u00dfenden Hinweis gab \u00fcbrigens <a href=\"https:\/\/north.thco.mp\/2019\/05\/04\/fail2ban\/\" target=\"_blank\" rel=\"noopener\">eine japanische Website<\/a>, auf der wir dann mit Google Translate den passenden Eintrag f\u00fcr \u201ebackend=\u201c gefunden haben. Vielen Dank daf\u00fcr.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit fail2ban kann man unter Linux Logfiles \u00fcberwachen und den Server gegen massive Einbruchsversuche \u00fcber das Netzwerk sch\u00fctzen. Mit fail2ban kann man zum Beispiel den ssh-Daemon absichern oder die access-Logs einer Website kontrollieren und Angreifer vom weiteren Zugriff aussperren. Ein merkw\u00fcrdiges Ph\u00e4nomen von fail2ban Wir setzen als Linux Distribution haupts\u00e4chlich Centos ein. Unter Centos 6&#8230;<\/p>\n","protected":false},"author":3,"featured_media":1132,"template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[45],"tags":[76],"class_list":["post-1130","howto","type-howto","status-publish","has-post-thumbnail","hentry","category-linux","tag-fail2ban"],"_links":{"self":[{"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/howto\/1130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/howto"}],"about":[{"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/types\/howto"}],"author":[{"embeddable":true,"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":0,"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/howto\/1130\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/media\/1132"}],"wp:attachment":[{"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/media?parent=1130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/categories?post=1130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.howto-do.it\/de\/wp-json\/wp\/v2\/tags?post=1130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}