IPの接続をブロックする

IPの接続をブロックする

私のApacheウェブサーバーに問題があります。サーバーに接続するIPが多すぎて、接続が大量に消費され、最終的にウェブサーバーがタイムアウトになります。接続はSYN_SENT状態のままです。

netstat -netapu

iptablesをフラッシュして基本ルールを使用してもまだ機能しません。Apacheを起動するとIPが接続されます。

私が使用する基本的なルール:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

iptables -A INPUT -s 89.149.244.117 -j REJECT

iptables -A OUTPUT -s 89.149.244.117 -j REJECT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

太字部分が問題となっているルールです。

関連があるかどうかはわかりませんが、tcp_syncookies の値は 1 です。

誰か私の間違いを指摘してもらえますか? 永久にブロックする方法はありますか?

答え1

出力を見せてもらえますか?

iptables-save

? ルールの順序があなたが思っているものと違うかもしれません。

iptables -A OUTPUT -s 89.149.244.117 -j REJECT

おそらく次のように読むべきでしょう:

iptables -A OUTPUT -**d** 89.149.244.117 -j REJECT

ところで、なぜ DROP ではなく REJECT なのでしょうか? state モジュールを使用している場合は、次のように記述する必要があります。

iptables -A INPUT  -m state --state NEW -p tcp --dport 80 -j ACCEPT

また、サーバーが DSR モードのロードバランサーの背後にある場合、状態モジュールは正しく動作しないことに注意してください。

答え2

SYN_SENT状態のままになっている接続は、胚のつながりこれは、IPアドレスに接続しようとしたが、何らかの理由でそのIPがあなたに連絡できない場合に発生します。これは、あなた彼とつながろうとしているのではなく、彼が彼とつながろうとしているのです。

これら 2 つのルールを追加する前はどのような状態だったかはわかりませんが、現在の状態では、3 ウェイ ハンドシェイクの最初の部分 (SYN) は送信できますが、2 番目の部分 (SYN/ACK) は受信できず、試行ごとに接続が SEN_SENT 状態のままになります。

最初のルールをコピー/貼り付けして 2 番目のルールを作成し、 INPUT を OUTPUT に変更しましたが、-sに変更するのを忘れたのではないかと思い-dます。私自身、何度か同じことをしたことがあるのでわかります。

答え3

このようなブルー​​ト フォース攻撃の大部分をブロックする Linux ユーティリティ「FAIL2BAN」を試す必要があります。Fail2Ban は、SSH、Apache、その他多くのサービスに対するブルート フォース攻撃の保護をサポートします。たとえば、IP アドレスが大量の同時接続を行おうとすると、fail2ban は iptables によってその IP アドレスを自動的に追加 (およびしばらくすると削除) してそれをブロックします。

関連情報