web-dev-qa-db-ja.com

iptablesを使用してデフォルトIPで直接ポート80アクセスをブロックしますか?

私はサイトの前でクラウドフレアを備えたnginxを使用して、レイヤー7攻撃からサイトを保護していますが、一部の攻撃者はこの新しい方法を見つけ、サイトを攻撃する代わりに、レイヤー7攻撃でデフォルトのIPを毎日直接攻撃しています。彼らが直接IPアドレスでデフォルトページを開いたときに444の応答を返しますが、それでも攻撃が大きすぎるため、Nginxをビジーにする攻撃に応じて、すべてのサイト/サーバーを数分間、場合によっては長期間使用できなくなります。

だから私は他のサイトやサービスに影響を与えることなくデフォルトのIPでポート80アクセスを無効にすることが可能かどうか尋ねたかったのですか?これらの攻撃は大きすぎるため、デフォルトの仮想ホストのログファイルは1時間以内に1GBになり、444を返すこともできません。そのため、ファイアウォールレベルでブロックする方がよいと思います。

Iptablesでこれを達成する方法について何か提案はありますか?

Ngiinx1.13でCentOS6.9を使用しています。

もうアイデア?まだ待っている!

1
Surfer

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

CloudFlareRay-IDヘッダーを使用したさらなるNginxトリック

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; }
2
parkamark