
私の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 アドレスを自動的に追加 (およびしばらくすると削除) してそれをブロックします。