私はサイトの前でクラウドフレアを備えたnginxを使用して、レイヤー7攻撃からサイトを保護していますが、一部の攻撃者はこの新しい方法を見つけ、サイトを攻撃する代わりに、レイヤー7攻撃でデフォルトのIPを毎日直接攻撃しています。彼らが直接IPアドレスでデフォルトページを開いたときに444の応答を返しますが、それでも攻撃が大きすぎるため、Nginxをビジーにする攻撃に応じて、すべてのサイト/サーバーを数分間、場合によっては長期間使用できなくなります。
だから私は他のサイトやサービスに影響を与えることなくデフォルトのIPでポート80アクセスを無効にすることが可能かどうか尋ねたかったのですか?これらの攻撃は大きすぎるため、デフォルトの仮想ホストのログファイルは1時間以内に1GBになり、444を返すこともできません。そのため、ファイアウォールレベルでブロックする方がよいと思います。
Iptablesでこれを達成する方法について何か提案はありますか?
Ngiinx1.13でCentOS6.9を使用しています。
もうアイデア?まだ待っている!
CloudFlare IPがポート80などでNginxインスタンスに到達することのみを許可するようにiptablesルールを設定できます。これは、最初にCloudFlareのIPv4範囲のリストを使用してipset
を作成することで実現できます( https: //www.cloudflare.com/ips-v4 )次に、適切なiptablesルールを適用してセットを利用します。
以下のようなものが機能するはずです:
ipset -N cloudflare nethash
ipset -q -A cloudflare A.B.C.D/M
... [ repeat above for each entry in CF ips-v4 file ]
iptables -A INPUT -p tcp --dport 80 -m set --match-set cloudflare src -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
CloudFlareが前にあるサイトごとに、このトリックをNginxに適用することもできます。 CloudFlareの存在を効果的にチェックしますCF-Ray
ヘッダー、予想される形式。これが存在しない場合、444が返されます(要求の即時ドロップ)。
server {
listen A.B.C.D:80;
server_name _;
if ($http_cf_ray !~ '^[0-9a-f]{16}-[A-Z]{3}$') { return 444; }
...
この時点でロギングを無効にして、過度のログノイズ(未テスト)をさらに軽減することもできると思います。
if ($http_cf_ray !~ '^[0-9a-f]{16}-[A-Z]{3}$') { access_log off; error_log off; return 444; }