GNU/Linux >> Linux の 問題 >  >> Linux

iptables または tc を使用してクライアントごとのパケットを制限する方法。

TC と iptables hashlimit の組み合わせを使用してこれを行いました。 5 メガビット/秒に設定された TC 帯域幅リミッター アウトバウンドを LAN インターフェイスで作成しました (ダウンロード トラフィックをターゲットにするため)。次に、インターフェイスの出力マングル チェーンで iptables hashlimit モジュールを使用して、2 つの異なる送信元 IP アドレスと宛先 IP アドレスの間でパケット レートが特定のしきい値を超えると、それらのパケットを TC 5 Mbit/s トラフィック シェーピング クラスに分類し始めます。 .

ただし、パケットのしきい値を正しく設定する必要があります。私は MTU が 1500 バイトであるという事実に基づいているため、これを使用して、1 秒あたり 1.5 メガビットのしきい値 (1000 パケット/秒) を作成するための 1 秒あたりのパケット数を計算しました。 )。 hashlimit iptables モジュールで可能な限り高いバースト値 (私のセットアップでは 10,000 のように見えます) を設定することと相まって、これらすべての結果として、短いダウンロードは全速力で実行されますが、長いダウンロードは一部のパケットが遅延するにつれて遅くなり始めます。 TC 帯域幅制限クラスに渡され、パケット レートなどが明らかに低下します。これはちょっとしたハックですが、驚くほどうまく機能します。また、TC が使用されるため、パケットがドロップされることはありません。パケット レートに達すると、TC クラスに押し込まれるため、単に遅延して速度が低下します。

これはCentOS 6ボックスにあります。より現代的なものでは、hashlimit モジュールが 1 秒あたりのパケット数だけでなく、1 秒あたりのバイト数をサポートできるようになると思います。これはさらに優れていますが、セットアップでこれを試してみたところ、1 秒あたりのパケット数の使用に戻ってしまいました.

私は今携帯電話を使用しているため、設定を貼り付けることができませんが、例が必要な場合はお知らせください。この回答を編集します。私が行った制限はソース IP と宛先 IP に基づいているため、このソリューションが本当に気に入っています。したがって、システムは、それぞれの個別の src+dst IP の組み合わせを、制限用の独自のパケット ストリームと見なします。 hashlimit モジュールは送信元ポートと宛先ポート (基本的には送信元 IP、送信元ポート、宛先 IP、宛先ポートの任意の組み合わせ) もサポートするため、送信元 IP+ポートと宛先 IP+ポートの間でセッションごとに制限を行うこともできます。 .

更新

以下は、大まかな方法​​です。実験が必要です。

tc:

/sbin/tc qdisc add dev eth0 root handle 1: htb
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 5Mbit

iptables:

#!/bin/bash

[[ "$1" =~ ^[ADI]$ ]] || exit 1

for IPT in /sbin/ip{,6}tables
do
  $IPT -t mangle -$1 POSTROUTING -o eth0 -m hashlimit --hashlimit-above 1000/second --hashlimit-burst 10000 --hashlimit-mode srcip,dstip --hashlimit-name limiter -j CLASSIFY --set-class 1:1
done

この問題は簡単な方法で解決できます。iptables で最近のモジュールを使用してみてください。最近はソース アドレスを追跡します:

iptables -m recent -h
recent match options:
[!] --set                       Add source address to list, always matches.
[!] --rcheck                    Match if source address in list.
[!] --update                    Match if source address in list, also update last-seen time.
[!] --remove                    Match if source address in list, also removes that address from list.
    --seconds seconds           For check and update commands above.
                                Specifies that the match will only occur if source address last seen within
                                the last 'seconds' seconds.
    --reap                      Purge entries older then 'seconds'.
                                Can only be used in conjunction with the seconds option.
    --hitcount hits             For check and update commands above.
                                Specifies that the match will only occur if source address seen hits times.
                                May be used in conjunction with the seconds option.
    --rttl                      For check and update commands above.
                                Specifies that the match will only occur if the source address and the TTL
                                match between this packet and the one which was set.
                                Useful if you have problems with people spoofing their source address in order
                                to DoS you via this module.
    --name name                 Name of the recent list to be used.  DEFAULT used if none given.
    --rsource                   Match/Save the source address of each packet in the recent list table (default).
    --rdest                     Match/Save the destination address of each packet in the recent list table.
    --mask netmask              Netmask that will be applied to this recent list.

ssh ブルート フォースをブロックする例:

iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --set
iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --rcheck --seconds  30 --hitcount 2 -j DROP

Linux
  1. LinuxサーバーでIPアドレスをブロックする方法

  2. cPanelでIPブロッカーを使用する方法

  3. Maestral Dropboxクライアント、インストール方法と使用方法をご覧ください

  1. Jenkins パイプライン スクリプト内で source コマンドを使用する方法

  2. iptables でパケットをレート制限する必要がありますか?

  3. SSH アクセスを IP アドレスで特定のクライアントに制限する

  1. LinuxサーバーでIPアドレスをブロックする方法

  2. プロセスごとのI/Oを最大制限まで調整するにはどうすればよいですか?

  3. Linux IPTables ファイアウォールでドロップされたパケットをログ ファイルに記録する方法