web-dev-qa-db-ja.com

サーバーのパフォーマンスに影響を与える大量のIPブロッキング?

私はゲームサーバーを持っていて、誰かがそれをボットでスパムしています。 SpamBotクライアントは、UDP接続を使用してサーバーとハンドシェイクを行います。これは、プロキシのリストを介して行われます。基本的に、Spambotクライアントは大量のUDPパケットをサーバーに送信し、ボットでスパムします。

これで、私がスパムボットを使用している人が知っているプロキシの6つの大きなリストがあります。すべてのリストからすべてのIPをブロックするシェルスクリプトを書くことができます。すべてのIPは新しい行にあるため、forループを使用すると非常に簡単に実行できます。

問題は、サーバーのパフォーマンスが心配なことです。 15kのIPアドレスをブロックする場合、それはサーバーのパフォーマンスに影響しますか?

現時点では、CentOS 7を実行しています。IPTablesが適切な方法であるかどうか、または他にどのような方法を試す必要があるかを教えてください。コマンドも書いてください。サーバーがこれらのIPアドレスに応答するのを停止し、それらとの接続を確立しないようにしたいだけです。

4
Brian Briu

このような大量のIPの場合は、 ipsetsモジュール を使用する必要があります。 ipsetは、iptablesが反応できるデータセットを作成します 数千のエントリのうち数十を簡単に処理できます

EPEL repo が有効になっていることを確認してから、次の方法でipsetをインストールします。

yum install ipset

例:

ipset -N blockedip iphash

「blockedip」というセットを「iphash」形式で作成します(さまざまな形式があり、これはIP専用です)。

ipset -Aを使用すると、データセット(この場合はIP)をデータセットに追加できます。

ipset -A blockedip 192.168.1.1
ipset -A blockedip 192.168.1.2

等々...

または、IPアドレスごとに1つのipset呼び出しを実行せずにバッチ作成するには、big-file.listは、IPv4アドレスのリストです。1行に1つずつです。

ipset -N blockedip iphash
sed 's/^/add blockedip /' < big-file.list | ipsec restore

次のiptablesコマンドを使用すると、このセット内の任意のソースからのすべてのパケットをドロップするようにカーネルに指示できます。

iptables -A INPUT -m set --set blockedip src -j DROP
10
Thomas

15,000の異なるIPアドレスについて話している場合、実際にはアドレスごとに個別のiptablesルールを使用したくない。これにより、ネットワークスループットが低下します。

代わりに、単一の IP Set を使用し、その中に15000アドレスを入れることを検討する必要があります。

ipset create spambots iphash
iptables -A INPUT -m set --match-set spambots src -j DROP

while read ip; do ipset add spambots "$ip"; done < ip_addresses.txt

IPセットから個々のアドレスをdel(削除)するか、エントリのセット全体をflushするか、IPセットを完全にdestroyすることができます。

1
roaima