如何使用文本文件中的 IP 地址列表来提供 iptables 规则

如何使用文本文件中的 IP 地址列表来提供 iptables 规则

是否有一个模块可以让我iptables使用纯文本文件中的 IP 地址提供规则?

示例:我有一个由iptables-restore自定义规则集生成的自定义链,以允许 WhatsApp 相关的 IP 地址:

    :_WHATSAPP_ - [0:0]
    -A _WHATSAPP_ -j ACCEPT
    -A FORWARD -s <src_host> -d 31.13.64.51/32 -j _WHATSAPP_
    -A FORWARD -s <src_host> -d 31.13.65.49/32 -j _WHATSAPP_
    -A FORWARD -s <src_host> -d 31.13.66.49/32 -j _WHATSAPP_
    -A FORWARD -s <src_host> -d 31.13.67.51/32 -j _WHATSAPP_
    -A FORWARD -s <src_host> -d 31.13.68.52/32 -j _WHATSAPP_
    -A FORWARD -s <src_host> -d 31.13.69.240/32 -j _WHATSAPP_
    ----snip-----

WhatsApp 使用的所有 IP 地址可在以下位置找到:这个链接

有时下载此文件、过滤 ipv4 地址并使用可以向 iptables 提供以下信息的开关(如果存在)会更快:

    :_WHATSAPP_ - [0:0]
    -A _WHATSAPP_ -j ACCEPT
    -A FORWARD -s <src_host> --from-file-dst /etc/iptables/whatsapp_cidr.txt -j _WHATSAPP_

这个功能存在吗?在联机帮助页上找不到它。

它需要是一些可以加载和读取文件的模块,因为我们有一个自定义防火墙脚本,它已经使用iptables-restoresintax 规则处理文件。

答案1

我可以建议一种通过使用来提供iptables列表的方法。IPsipset

您可以简单地创建并ipset

ipset -N <ipset name> iphash

然后您可以IP使用以下命令将任何内容添加到集合中:

ipset add <ipset name> IP

之后您可以在以下位置使用该集合iptables

-A FORWARD -d <dst> -m set --match-set <ipset name> src -j _WHATSAPP_

您可以编写一个简单的脚本,可以在运行时向集合提供数据IPs并从中删除,而无需执行iptables-restore

答案2

我认为一个好主意可能是使用这个https://gist.github.com/woods/25ef91a95da85bf10974 然后,您使用 IP 创建一个单独的 .csv 文件并将其提供给 IPTABLES

相关内容