如何将多个IP导入到Ipset?

如何将多个IP导入到Ipset?

我在 Ubuntu 服务器防火墙上使用 iptables 和 ipset。我想知道是否有一个命令可以将包含 ip 列表的文件导入到 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 运行整个 oneliner 周期会很好:

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

然后你的其他服务可以从 bash 升级,并且你不会遇到任何网络或 mysql 或 apache 或其他服务滞后,因为 bash 正在使用所有资源。

答案4

我知道这已经有几年了,但为什么不直接使用所有 IP 地址制作一个简单的 shell 脚本,然后运行该 shell 脚本。我通过这种方式添加了数百个 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 地址列表,然后将其导出为文本文件,然后复制并粘贴到我的 shell 脚本文件中。

保存文件。按ESC键,然后:wq!按 Enter 键保存文件。

然后使用以下命令运行它:

./manual-blacklist.sh

您的所有 IP 地址都将添加到您的手动黑名单 ipset 文件中。如果它发现任何重复项,它将忽略它们,因为它们之前已经添加了。

然后保存这个文件:(我保存到我的home目录和etc目录下)

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

并恢复:

ipset restore -f /etc/ipset.conf

-f开关指定要打印到的文件名,而不是stdout(列表或保存命令)或从中读取的文件名,而不是stdin(恢复命令)。

希望这可以帮助。

相关内容