私はゲームサーバーを持っていて、誰かがそれをボットでスパムしています。 SpamBotクライアントは、UDP接続を使用してサーバーとハンドシェイクを行います。これは、プロキシのリストを介して行われます。基本的に、Spambotクライアントは大量のUDPパケットをサーバーに送信し、ボットでスパムします。
これで、私がスパムボットを使用している人が知っているプロキシの6つの大きなリストがあります。すべてのリストからすべてのIPをブロックするシェルスクリプトを書くことができます。すべてのIPは新しい行にあるため、forループを使用すると非常に簡単に実行できます。
問題は、サーバーのパフォーマンスが心配なことです。 15kのIPアドレスをブロックする場合、それはサーバーのパフォーマンスに影響しますか?
現時点では、CentOS 7を実行しています。IPTablesが適切な方法であるかどうか、または他にどのような方法を試す必要があるかを教えてください。コマンドも書いてください。サーバーがこれらのIPアドレスに応答するのを停止し、それらとの接続を確立しないようにしたいだけです。
このような大量の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
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
することができます。