我在 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
(恢复命令)。
希望这可以帮助。