UFWによるレート制限:制限の設定


22

UFWのマニュアルページには、iptablesのレート制限を設定できることが記載されています。

ufwは、接続レート制限をサポートしています。これは、総当たりログイン攻撃から保護するのに役立ちます。IPアドレスが過去30秒間に6つ以上の接続を開始しようとした場合、ufwは接続を拒否します。詳細については、 http://www.debian-administration.org/articles/187 を参照してください。典型的な使用法は次のとおりです。

     ufw limit ssh/tcp

残念ながら、これは私が見つけることができるすべてのドキュメントです。私はUFWに固執し、より複雑なiptablesコマンドを使用したくない(物事を「複雑でない」状態に保つため)。

ufwを使用して、ポート80のすべての着信(発信ではない)トラフィックを30秒あたり20接続に制限するにはどうすればよいですか?ポート30000〜30005のレート制限を無効にするにはどうすればよいですか?レート制限はすべてのポートでデフォルトで有効になっていますか?

回答:


21

UFWは「複雑でない」ように設計されています。この場合、接続が制限される速度の詳細を制御することはできません。UFWのPythonソースを掘り下げたい場合は、それを調整する方法を見つけることができます。適切な情報は(私のUbuntu 10.04システム上)にあります/usr/share/pyshared/ufw/backend_iptables.py

したがって、タイミングの問題は別にして、最後に連射に関する質問に対するいくつかの回答を示します。

  1. 10.10.10.0/24がローカルネットワークであると仮定すると、これはデフォルトの制限ルールをポート80 / tcp着信に適用します。

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. および3.デフォルトでは、レート制限はオンになっていません。必要な範囲を除くすべての(宛先)ポートに追加するには、このルールを使用します。ルールは(範囲があっても)原子単位であり、分割できないことに注意してください。たとえば、ポートのルールを追加してdeleteから、特定の範囲の(存在しない)ルールを追加して削除することはできません。limitにも受け入れ可能な引数ではありませんufw default

    ufw limit from any to any port 0:29999,30006:65535
    

これは、レートを設定できないことを意味しますか?
トム

2
ソースをハッキングせずに、少なくともUbuntu 10.04で最新のUFW 0.30pre1-0ubuntu2をハッキングしないでください。現在のソースの物事の外観から、それは変更されていません。ただし、iptablesルールを/etc/ufw/after.rules(または/etc/ufw/before.rules)に入れることができ、それらも同様に使用されます。詳細については、man ufw-frameworkを参照してください。
盆栽バイキング

@bonsaivikingこれは可能ですiptableか?yesの場合、iptableはufwのバックエンドです。
ヌルポインター

6

前の投稿で述べたように、user.rulesをカスタマイズできます。6秒で最大12接続のsmtp接続レート制限が必要です。最初に以下に示すようなルールを追加しました。注:これにより、デフォルトで30秒で6を許可する制限ルールが追加されます

ufw limit smtp

そして、以下に示すように/lib/ufw/user.rulesを編集しました(このファイルのカスタムコピーを他の多くの調整とともに保持しています)...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept

/ etc / ufwでuser.rulesを見つけました
Otto Kanellis

5

レート制限は、/ lib / ufw / user.rulesにあるufwルールファイルで変更できます。デフォルトでは、すべてのポートに対して有効な制限はありません。すべてのポートを手動で追加するか、user.rulesファイルを編集して追加する必要があります。


1

ufwのLIMIT機能を使用すると、意図しない結果が生じる可能性があることを指摘する価値があります。

最初のufwルールとして、ポート22 / tcpに包括的な制限を設定したとします。

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

制限の下で動作している接続は、ufwルールに従って最終的に「deny(incoming)」のデフォルトポリシーによってフィルタリングされる可能性があるという前提で。

少なくともufw 0.35では、その仮定は間違っています。実際、LIMIT INロジックは、制限基準によって拒否されない入力をすぐに受け入れます。

擬似コードでは、LIMITロジックは

if CONDITION then DENY else ACCEPT

一方、他のufwルールにはロジックがあるようです:

if CONDITION then (DENY|ACCEPT) else continue to next rule

私は個人的にufw LIMITの予期しない動作であることを発見しました。これは、システムログファイルで他のufwルールによってフィルタリングされたために発生することのなかった多くのポート22ログイン試行を予期せず発見したことによってのみ発見されました。

動作確認の詳細

ufwによって挿入されたiptablesコードの関連する行は次のとおりです。

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

上記のリストは以下で作成できます

iptables -S | grep ufw-user-limit

最初の2行は連続してufw-user-inputいます。

iptables -S | grep ufw-user-input
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.