iptables ルールの説明

iptables ルールの説明

私はDoS攻撃からある程度保護を提供するWebサーバーのiptablesを更新したいと思います。

1)ネットワークトラフィックに関して私が見つけたiptablesルールは次のとおりです。

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

最初の2つのルールを理解できます。誰かが最後の2つのルールを明確にすることができますか?最後の2つのルールを適用すると、ルール1は1分あたり50の新しい接続のみを許可することを意味しますか?極端なバーストの機能は何ですか?私はそれについて読んでみてください。しかし、私が明確に理解しているかどうかはわかりません。これは、毎分200の新しい接続を許可すると、1分あたり50の新しい接続にのみ制限されることを意味しますか?追加の新しい接続要求は削除されます。 200の新しい要求爆症はいつ再び許可されますか?

さて、最後のルールはどういう意味ですか?毎秒50人のユーザーだけが自分のWebサーバーに接続できますか?ここでバースト回数はなぜ再び同じ50ですか?最後の2つのルールに基づいていくつかの正当なトラフィックを破棄することは可能ですか?

2)ポートスキャンをブロックするために、いくつかの場所で参照される以下のルールセットが見つかりました。そうだと思いますか?これが何であるかを説明できる人はいますか?最後の4つのルールのロジックとdportが139の理由についてはわかりません。

# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

ベストアンサー1

このlimit拡張はトークンバケットメカニズムを実装します。通常、netfilterはルールが一致したときに提供されたターゲット(ACCEPTこの場合)にジャンプします。拡張を挿入すると、limitnetfilterはジャンプが許可される前にルールの「バケット」から「トークン」を削除する必要があります。この拡張は、ルールが一致してもバケットにトークンがない場合にnetfilterがジャンプするのを防ぎます。

--limit 50/minute #tells netfilter to add 50 tokens per minute to the bucket
--limit-burst 200 #tells netfilter to use a bucket which holds up to 200 tokens

1分あたり50以上の接続要求がある場合、サーバーは1分あたり50の新しい接続を許可します。 1分あたりの要求が50個未満の場合、バケットはいっぱいになります(実際には最初からいっぱいになります)。つまり、1分に要求がいくつかあっても、次の分にサーバーは50以上の新しい要求を受け入れます。これを制御できなくなるのを防ぐために、バケットが保持できるトークンの数に制限があります。この場合は200です。バケットがいっぱいになると、サーバーは同時にサーバーにアクセスしても次の200個の着信接続を受け入れます。 50個を超えるので、許容される接続数が希望する50個を超えて急増することをバーストと呼びます。平均

2番目の規則は、netfilterが認識するフローに属する限り、システムはさらに調査することなくすぐに50個のIPパケットを受け入れることを意味します。このルールの効果を測定するには、チェーン全体(および参照するすべてのチェーンと参照するすべてのチェーン)を調べる必要があります。しかし、私が言うことができる言葉は次のとおりです。

  1. NetfilterはTCP接続イニシエータのACKをデータパケットとして処理してハンドシェイクを完了しますRELATED。 1分あたり50の正常に確立された接続は、問題の2番目の規則を完全に満たします。

  2. 最も一般的なTCP実装は、放棄する前に4回の接続を試みます。 50の成功した接続が確立された後、最悪の場合は200の接続要求が届きます。

  3. エンドポイントが特定の接続要求をどの程度頻繁に行うかは重要ではなく、合理的な時間内に接続が正常に確立されるだけです。ほとんどの実装では、合理的なデフォルト時間として60秒を使用します。

最後のルールがあれば、50/minuteこれら4つのルールは本当に素晴らしいDoS保護フレームワークの一部になることができます。--dport 80フィルタがないため、50/second次のように推測できます。

a) この文を文脈から完全に抜け出してとられ、最初の3文と直接的な関係はありません。

b) これは、トラフィック速度の低下に対する一般的な上限です。

c) これは間違いです。しかし、そうする必要があります50/minute

d) これは、DoS 攻撃からサーバーを保護することと、DoS 攻撃中および後でサービス アクセスを維持することとのバランスです。

recent2番目のコードスニペットを理解するには、まず拡張機能が送信元IPアドレスに関する知識を使用および維持する方法を確実に理解する必要があります。

拡張recent機能は知識をリストとして管理します。デフォルトのリストは名前が付けられ、DEFAULT他のリストが提供されない場合に使用されます。 1つはを使用して別のリストを提供します--name

portscanしたがって、最初の2つのルールは、「ソースIPが過去86400秒以内にリストに存在していた場合、このパケットを破棄します」を意味します。

最後の2つのルールは、「このIPアドレスをリストから削除portscan」を意味します。このルールは、前のルールが一致しない場合にのみ評価されます。このルールはリストをportscan短くするために存在します。リストが長いほど、検索時間も長くなります。

最後の4つのルールは、ソースIPをportscanリストに入れ、IPとDROPパケットを記録します。--dport 139これはこの場合にのみ必要なためです。私はこれらの規則が文脈上より意味があると確信しています。これは、ポートスキャンを防ぐための完全なルールセットではないからです。

おすすめ記事