複数のIPをIpsetにインポートする方法は?

複数のIPをIpsetにインポートする方法は?

Ubuntuサーバーファイアウォールでiptablesとipsetを使用しています。 ipsリストを含むファイルをipsetにインポートするコマンドがあるかどうか疑問に思います。 ipsetを埋めるために、以下を使用して各IPを追加します。

ipset add manual-blacklist x.x.x.x

単一のコマンド(ファイルのインポートなど)を使用して複数のIPを追加できる場合は、非常に役立ちます。

命令を受けて

 for ip in `cat /home/paul/ips.txt`; do ipset add manual-blacklist $ip;done

こんな反応が出ますね

resolving to IPv4 address failed to parse 46.225.38.155

ips.txtの各IPについて

どのように適用するのかわかりません。

答え1

ipset 保存/復元コマンドを使用できます。

ipset save manual-blacklist

上記のコマンドを実行し、保存ファイルがどのように生成されるかを確認できます。

出力例:

create manual-blacklist hash:net family inet hashsize 1024 maxelem 65536 
add manual-blacklist 10.0.0.1 
add manual-blacklist 10.0.0.2

復元するには、次のコマンドを使用します。

ipset restore -! < ips.txt

ここでは、主に重複によるエラーを無視するために-!を使用します。

答え2

次のコマンドを試してください。

for ip in $(cat </file.txt>); do ipset -A <set-name> $ip;done

エラーが続く場合は、高度なテキストエディタ(Notepad ++、SublimeText)で、テキストファイルに空白と読めない\奇妙な文字があることを確認してください。空白と読めない\奇妙な文字を削除してもう一度やり直してください。

答え3

リストが200,000行以上に大きくなり、サーバーにそれをサポートするのに十分なメモリがある場合は、Niceを使用して完全なオネライナーサイクルを実行することをお勧めします。

nice -n 5 bash -c "for IP in \$(cat textfile.txt); do ipset add <setname> \$IP -exist timeout <seconds>; done"

その後、他のサービスをbashからアップグレードでき、bashがすべてのリソースを使用するため、ネットワークやmysql、apache、または他のサービス遅延は発生しません。

答え4

私はこれが数年前のことであることを知っていますが、すべてのIPアドレスを使用して単純なシェルスクリプトを作成し、そのシェルスクリプトを実行するのはどうですか?このようにして、何百ものIPアドレスを追加しました。

例:(Centos 8でviエディタを使用して行われます)

vi manual-blacklist.sh

次に、manual-blacklist.sh次のようにファイルにすべてのIPアドレスを追加します。i(行を挿入するには、キーを押します。)

ipset add manual-blacklist 123.45.67.111
ipset add manual-blacklist 123.45.67.112
ipset add manual-blacklist 123.45.67.113

すべてのIPアドレスが追加されるまで続きます。作業を高速化するために、Excelを使用してIPアドレスのリストを作成し、それをテキストファイルにエクスポートしてからコピーしてシェルスクリプトファイルに貼り付けました。

文書を保存します。ESCキーを押してから:wq!Enterを押してファイルを保存します。

次に、次のように実行します。

./manual-blacklist.sh

すべてのIPアドレスが手動ブラックリストのipsetファイルに追加されます。重複したアイテムが見つかった場合は、以前に追加されたアイテムであるため無視されます。

次に、このファイルを保存します。 (私はそれをホームディレクトリと他のディレクトリに保存します。)

ipset save > /etc/ipset.conf
ipset save > /home/username/ipset.conf

復元:

ipset restore -f /etc/ipset.conf

このスイッチは、リストまたは保存コマンドの代わり-fに印刷または復元コマンドから読み取るファイル名を指定します。stdoutstdin

お役に立てば幸いです。

関連情報