簡単なIPテーブルルールで小さな(D)DoS攻撃を防ぐことができるかどうか疑問に思っていましたか?
ちなみに、1つまたは2つのIPアドレスからの400以上のリクエストがWebサーバーに殺到しているということです。 Webサーバーにアクセスし始めたことに気付いた後、IPアドレスを削除できますが、通常、IPテーブルがそのIPに対抗し、完全に削除し始めるため、そのWebサーバーに影響を与えないように数分かかります。 。
次のコマンドでIPを削除します。
iptables -I INPUT -s "IP HERE" -j DROP
そして明らかにそれを保存します:
/etc/init.d/iptables save
私は通常、次のコマンドで攻撃しているIPアドレスを見つけます。
netstat -plan|grep :80|awk '{print $5}'|cut -d: -f 1|sort|uniq -c|sort -n
そのようにすることの問題は、私がそこにいなければならないことであり、それは私が事後に行動することを必要とします。 150接続に達した直後にIPアドレスを削除するために使用できるIPテーブルルールはありますか?そうすれば、Webサーバーに負荷がかかることを心配する必要がありません。また、そのときにWebサーバーをブロックする必要もありません。
ちなみに、CentOSではApacheを使用しています。
お時間をいただきありがとうございます。
柔軟性を提供するものについては、最近の(そして制限された)モジュールを調べてください。 Recentは、特定の時間枠でIPによって行われた接続の数を追跡し、特定のルールをトリガーするために使用できます。最近のモジュールは(比較的)CPUに負荷がかかりますが、動的ページをロードする場合と比較すると、かなり許容範囲です。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -m recent --update --seconds 3600 --name BANNED --rsource -j DROP
-A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ATTK_CHECK
-A ATTACKED -m limit --limit 5/min -j LOG --log-prefix "IPTABLES (Rule ATTACKED): " --log-level 7
-A ATTACKED -m recent --set --name BANNED --rsource -j DROP
-A ATTK_CHECK -m recent --set --name ATTK –-rsource
-A ATTK_CHECK -m recent --update --seconds 600 --hitcount 150 --name ATTK --rsource -j ATTACKED
-A ATTK_CHECK -m recent --update --seconds 60 --hitcount 50 --name ATTK --rsource -j ATTACKED
-A ATTK_CHECK -j ACCEPT
基本的に、上記は次のようになります。
詳細な説明と、私が使用する上記の段階的バージョンについては、 この記事 を参照してください
IpTablesはネットワークの輻輳にまったく役立ちませんし、分散攻撃に対してはまったく効果がないことに注意してください。その利点はセキュリティとサーバーの負荷の軽減にあります。
あなたはこのように虐待者をブロックするためにiptablesを使用してできますが、iptablesは非常にCPUを集中的に使用するので注意する必要があります。すべてのパケットはすべてのルールに対してチェックされるため、ルールを追加すると、サーバーのサイクルがすぐになくなる可能性があります。誰かをブロックしたいときはいつでも新しいルールを追加するクライアントがありました。ある日、彼らは通常のトラフィックよりもわずかに高くなり、システムがダウンしました。テーブルは、見られるルールの数を減らすことができますが、iptablesにたくさんのルールを投げることはできません。
別の代替策は、ブラックホールルーティングです。
ip route add blackhole $IP_HERE
ip route flush cache
ルーティングテーブルはハッシュ化されます( hashtable を使用)。一方、iptablesルールは順次参照する必要があるため、効率が大幅に低下します。このようにすると、何十万ものルートを問題なく作成でき、何千ものiptablesルールがすべてのリクエストに対して実行するのに問題が生じます。
2番目の質問に関しては、hashlimit
モジュールを使用して、乱用者用の自動ブラックリストを作成できます。詳細については、私の投稿 DDoS攻撃の防止について を参照してください。ただし、短い形式は次のとおりです。
iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min \
--hashlimit-burst 500 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP