iptablesがIPアドレスをブロックしないのはなぜですか?


9

取得している悪意のあるトラフィックの特定のパターンを監視し、関連付けられているIPアドレスを禁止するようにfail2banを構成しました。

すべてがうまく機能しているようです-正規表現はパターンに適切に一致しており、問題のあるIPアドレスがiptablesに追加されています。

ただし、Apacheのログを確認すると、禁止されているIPアドレスからのヒットがまだあります。iptablesがまったく実行されていないようです。

したがって、すべてが正しく構成されていることを確認するために、いくつかの詳細を共有します。

まず、iptablesルールをクリアしてリロードします。

$ sudo iptables -F
$ cat /etc/iptables.firewall.rules 
*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT
$ sudo iptables-restore < /etc/iptables.firewall.rules
$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      *       0.0.0.0/0            127.0.0.0/8          reject-with icmp-port-unreachable
   14  1432 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   11  1638 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  

ここで、fail2ban構成は次のようになります。

$ cat /etc/fail2ban/filter.d/apache-xmlrpc.conf 
[Definition]
failregex = .*:80 <HOST> .*POST .*xmlrpc\.php.*
ignoreregex =
$ cat /etc/fail2ban/jail.local 
[apache-xmlrpc]

enabled  = true
port     = http,https
filter   = apache-xmlrpc
logpath  = /var/log/apache2/other_vhosts_access.log
maxretry = 6
$ fail2ban-regex /var/log/apache2/other_vhosts_access.log /etc/fail2ban/filter.d/apache-xmlrpc.conf 

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/apache-xmlrpc.conf
Use log file   : /var/log/apache2/other_vhosts_access.log


Results
=======

Failregex
|- Regular expressions:
|  [1] .*:80 <HOST> .*POST .*xmlrpc\.php.*
|
`- Number of matches:
   [1] 29 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Addresses found:
[1]
    80.82.70.239 (Sat Jul 13 02:41:52 2013)
    80.82.70.239 (Sat Jul 13 02:41:53 2013)
    80.82.70.239 (Sat Jul 13 02:41:55 2013)
    80.82.70.239 (Sat Jul 13 02:41:56 2013)
    80.82.70.239 (Sat Jul 13 02:41:57 2013)
    80.82.70.239 (Sat Jul 13 02:41:58 2013)
    80.82.70.239 (Sat Jul 13 02:41:59 2013)
    80.82.70.239 (Sat Jul 13 02:42:00 2013)
    80.82.70.239 (Sat Jul 13 02:42:02 2013)
    80.82.70.239 (Sat Jul 13 02:42:03 2013)
    80.82.70.239 (Sat Jul 13 02:42:04 2013)
    80.82.70.239 (Sat Jul 13 02:42:05 2013)
    80.82.70.239 (Sat Jul 13 02:42:06 2013)
    80.82.70.239 (Sat Jul 13 02:42:07 2013)
    80.82.70.239 (Sat Jul 13 02:42:09 2013)
    80.82.70.239 (Sat Jul 13 02:42:10 2013)
    80.82.70.239 (Sat Jul 13 02:42:11 2013)
    80.82.70.239 (Sat Jul 13 02:42:12 2013)
    80.82.70.239 (Sat Jul 13 02:42:13 2013)
    80.82.70.239 (Sat Jul 13 02:42:15 2013)
    80.82.70.239 (Sat Jul 13 02:42:16 2013)
    80.82.70.239 (Sat Jul 13 02:42:17 2013)
    80.82.70.239 (Sat Jul 13 02:42:18 2013)
    80.82.70.239 (Sat Jul 13 02:42:19 2013)
    80.82.70.239 (Sat Jul 13 02:42:20 2013)
    80.82.70.239 (Sat Jul 13 02:42:22 2013)
    80.82.70.239 (Sat Jul 13 02:42:23 2013)
    80.82.70.239 (Sat Jul 13 02:42:24 2013)
    80.82.70.239 (Sat Jul 13 02:42:25 2013)

Date template hits:
0 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
70 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Year.Month.Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): <Month/Day/Year@Hour:Minute:Second>

Success, the total number of match is 29

However, look at the above section 'Running tests' which could contain important
information.

ご覧のとおり、フィルターにfailregexが設定されていて、フィルターが有効になっています。fail2ban-regexを使用して、フィルターは監視しているログファイルで一致を見つけます。(現在、問題のあるIPアドレスに積極的に攻撃されているため、テストが非常に簡単になっています。)

したがって、私はfail2banを再起動し、ルールが有効になるのを観察します。

$ sudo service fail2ban restart
 * Restarting authentication failure monitor fail2ban                                                                                                                         [ OK ] 
$ tail /var/log/fail2ban.log -n 50
2013-07-13 02:42:58,014 fail2ban.server : INFO   Stopping all jails
2013-07-13 02:42:58,745 fail2ban.jail   : INFO   Jail 'apache-xmlrpc' stopped
2013-07-13 02:42:59,439 fail2ban.jail   : INFO   Jail 'ssh' stopped
2013-07-13 02:42:59,440 fail2ban.server : INFO   Exiting Fail2ban
2013-07-13 02:43:08,055 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2013-07-13 02:43:08,057 fail2ban.jail   : INFO   Creating new jail 'ssh'
2013-07-13 02:43:08,111 fail2ban.jail   : INFO   Jail 'ssh' uses Gamin
2013-07-13 02:43:08,397 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2013-07-13 02:43:08,404 fail2ban.filter : INFO   Set maxRetry = 6
2013-07-13 02:43:08,414 fail2ban.filter : INFO   Set findtime = 600
2013-07-13 02:43:08,435 fail2ban.actions: INFO   Set banTime = 600
2013-07-13 02:43:09,277 fail2ban.jail   : INFO   Creating new jail 'apache-xmlrpc'
2013-07-13 02:43:09,277 fail2ban.jail   : INFO   Jail 'apache-xmlrpc' uses Gamin
2013-07-13 02:43:09,283 fail2ban.filter : INFO   Added logfile = /var/log/apache2/other_vhosts_access.log
2013-07-13 02:43:09,286 fail2ban.filter : INFO   Set maxRetry = 6
2013-07-13 02:43:09,289 fail2ban.filter : INFO   Set findtime = 600
2013-07-13 02:43:09,292 fail2ban.actions: INFO   Set banTime = 600
2013-07-13 02:43:09,458 fail2ban.jail   : INFO   Jail 'ssh' started
2013-07-13 02:43:09,792 fail2ban.jail   : INFO   Jail 'apache-xmlrpc' started
2013-07-13 02:43:11,361 fail2ban.actions: WARNING [apache-xmlrpc] Ban 80.82.70.239
$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  244 39277 fail2ban-apache-xmlrpc  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
  101  7716 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      *       0.0.0.0/0            127.0.0.0/8          reject-with icmp-port-unreachable
 3404  582K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
  349 20900 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
   12   720 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    2    80 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
    2    80 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 3331 4393K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-apache-xmlrpc (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       80.82.70.239         0.0.0.0/0           
  244 39277 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       223.4.147.8          0.0.0.0/0           
  101  7716 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0  

fail2banログが示すように、ルールセットは正しく構成されているように見えます。問題のあるIPアドレスがすぐに検出されて禁止されていることがわかります。iptablesの出力は、実際に削除されていることを示しています。

ただし、fail2ban-apache-xmlrpcチェーンで一致するそのIPアドレスのドロップされたパケットがないことはすでに確認しています。案の定、Apacheログを確認します。

$ tail /var/log/apache2/other_vhosts_access.log
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:53 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:54 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:56 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:57 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:58 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:59 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:44:00 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:44:02 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"

いいえ、ブロックされていません!fail2banログでも確認できます:

$ tail /var/log/fail2ban.log
2013-07-13 02:52:30,757 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:37,767 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:44,783 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:51,814 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:58,830 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:05,842 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:11,858 fail2ban.actions: WARNING [apache-xmlrpc] Unban 80.82.70.239
2013-07-13 02:53:12,910 fail2ban.actions: WARNING [apache-xmlrpc] Ban 80.82.70.239
2013-07-13 02:53:20,118 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:27,129 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned

apacheログに繰り返し表示されるため、fail2banは引き続き禁止しようとしています!

iptablesがこのIPアドレスからのトラフィックをドロップしないのはなぜか、正直に言えば、私の人生を理解することができません。ルールの順序は私には正しいようですが、DROPは何よりも優先されます。

私はGoogleでたくさんの結果を出しましたが、人々が同様の問題を抱えていますが、標準以外のポートにあるSSHトラフィックを禁止する問題に常に戻るようです。私の場合、標準のhttpポート80でIPアドレスを禁止しようとしています。

めちゃくちゃシンプルなものを見落としているといいのですが。これはLinodeでUbuntu 12.04を実行しているVPSです。誰かアイデアがあれば教えてください。どうもありがとう...

編集:これはの出力ですiptables -S

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache-xmlrpc
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-xmlrpc
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
-A fail2ban-apache-xmlrpc -s 80.82.70.239/32 -j DROP
-A fail2ban-apache-xmlrpc -j RETURN
-A fail2ban-ssh -s 223.4.147.8/32 -j DROP
-A fail2ban-ssh -j RETURN

出力は、iptables -s形式よりも、私たちに多くの役に立つかもしれiptables -L
ダニエルWidrick

@ lVlint67-の出力を表示するために質問を編集しましたiptables -S。それでさらに洞察が得られるかどうかをお知らせください。
jsdalton 2013

最後のApacheログエントリは02:44:02にあり、IPが禁止されたことを示す最初のfail2banメッセージは02:52:30にあるため、機能していない証拠はありません。その期間の完全なfail2ban.logを提供してください。
mgorven 2013

fail2banログから最初に確認した禁止は2:43でしたが、時間の不一致にも気付きました。注:禁止はSo now I restart fail2ban and observe the rules taking effect:ブロック内で発生します
Daniel Widrick 2013

回答:


10

iptables -s出力は正しく見えると私は方法がわからない80.82.70.239/32になっているany:80ファイアウォールを介してサーバー上。私の最初の推測では、サーバーの前にプロキシー/ロードバランサーがあり、ApacheがHTTP_X_FORWARDED_FORヘッダーまたは呼び出されたものをログに記録していると思います。その場合は、ファイアウォールロジックをプロキシ/ロードバランサーに移動するか、アプリケーションレベルまで下げる必要があります(ApacheがFORWARDED_FORヘッダーを変更してアクセスを拒否します。


どちらにしても:

私がとるべき行動の次のコースは、iptables -s上に投稿されたあなたの出力をキャプチャすることです。fail2banを無効にし、fail2banチェーンとIPアドレスがブロックされた構成をiptablesにロードします。

ただし、最初の-Aルールとして次のようにします。

-A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP: "

80と443のトラッピングを改善したい場合は、この方法をお勧めします。考えられるのは、疑わしいソースからのパケットに注意を払うと、FIREWALLのログに欠落しているものが表示される可能性があるということです。


3
あなたはそれを釘付けにしました。どうしてこれまで考えなかったのかわかりません。ApacheはCloudflareの背後で実行されおり、HTTP_FORWARDED_FOR IPアドレスをログに記録するようにApacheを構成しています。実際のトラフィックはCloudflareサーバー経由で着信しているため、fail2ban / iptablesを使用してトラフィックをブロックしようとしても機能しません。ありがとうございました!
jsdalton 2013

私たちはキャンパスでhaproxyロードバランサーを使用してLBとHAを処理しているので、セットアップがもたらす小さな「癖」に慣れてきました。Cloudflareが何であるかはわかりませんが、適切なアクセス権があれば、禁止をロードバランサーに移動できる可能性があります。...それが不可能な場合、Apacheはなんらかの方法でブロッキングを処理できる可能性がありますが、頭に浮かんでいます。
Daniel Widrick 2013

@jsdaltonあなたがたどり着いた解決策は何でしたか。今、私と同じようなボートで。
ジェイ

@jay httpヘッダーを調べる必要があるため、「レイヤー7」フィルタリングまたはファイアウォールと呼ばれるものを調べています。それ以外の場合は、ロードバランサー/プロキシが制御下にある場合、その試みをブロックしようとすることができます。
Daniel Widrick 2017年

1

iptablesの出力は実際には、fail2banがフィルターされてドロップされると感じるIPアドレスのルールがある一方で、fail2ban xmlrpcチェーンを通過して実際にそのルールによってドロップされたパケットがないことを示しています。代わりに、そのチェーンを通過した224パケットはすべて受け入れられました。

とはいえ、ルールは確かに正しいです。ただし、fail2banフィルターチェーンを通過したトラフィックよりも、TCPポート80の受け入れルールによってより多くのトラフィックが受け入れられたようです。最も可能性の高い理由は、fail2banチェーンがまだ入力に挿入されていないときにブロックしたいトラフィックが入ったということです(デフォルトのルールにはそれが含まれていないことに気づきますが、これはおそらくOKですが、iptablesをリロードすると、 fail2banチェーンはすぐには有効になりません)。

実行iptables -zしてパケットカウントをゼロにし、iptables -nvL再びの出力を観察します。出力は同じであってはなりません。さらに、iptablesの初期ルール(/etc/iptables.firewall.rules)にfail2banチェーンのルールを保存することを検討してください。次のような委任規則を保存します。

fail2ban-apache-xmlrpc  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443

チェーンの存在(などfail2ban-apache-xmlrpc)も保存しますが、実際に禁止されているIPは保存しません。


ファルコンに感謝します。これは、iptablesルールをフラッシュしてから、fail2banを再起動してfail2ban-apache-xmlrpcルールが追加される少し前だったためと考えられます。それにもかかわらず、パケット数をゼロにして再チェックしてみました。結果はほとんど同じでした。fail2ban-apache-xmlrpcルールに入るすべてのパケットが返され、何もドロップされません。私のApacheログには、ドロップする必要があるそのIPアドレスでまだ着信しているトラフィックが表示されていることを確認しました。
jsdalton 2013

1

私は自分のWebサイトでまったく同じ問題を抱えていました。非常によく似たセットアップ、LAMPスタック、いくつかの機能的なfail2ban刑務所ですが、アクセスログファイルにこれらの禁止されていると思われるIPアドレスが表示されるのをまだ見ています。Apacheの前にプロキシ/ロードバランサーがありません。

私の問題の解決策は驚くほど簡単でした:禁止ステートメントをiptables構成ファイルの真上に移動しました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.