我的 IPTABLES 中有这样的规则:
-A 输入 -s 166.100.102.50/32 -j LOG --日志级别 7
我编写了一个脚本,抓取这些规则的输出并将字节从 IP 输出到我的服务器。
我希望得到关于如何创建跟踪来自分散子网的 IP 流量的规则的建议。 IP 地址不固定,甚至子网也不固定。例如:
120.2.33.45 可能是某天设备的 IP 地址,而 204.65.3.88 可能是第二天同一设备的 IP 地址。
我认为如果有一种方法可以编写规则,以便它能给我除固定 IP 地址范围之外的所有 IP 地址,例如 166.100.102.50,那么我就没问题了。
就像是:
-A 输入 -s不相等166.100.102.50/32 -j LOG --日志级别 7
提前致谢
答案1
你想(观看!
):
iptables -A INPUT ! -s 166.100.102.50/32 -j LOG --log-level 7
这将匹配源地址不是 166.100.102.50 的所有内容。
从man iptables
[!] -s, --source address[/mask][,...]
Source specification. Address can be either a network name, a
hostname, a network IP address (with /mask), or a plain IP
address. Hostnames will be resolved once only, before the rule
is submitted to the kernel. Please note that specifying any
name to be resolved with a remote query such as DNS is a really
bad idea. The mask can be either a network mask or a plain num‐
ber, specifying the number of 1's at the left side of the net‐
work mask. Thus, a mask of 24 is equivalent to 255.255.255.0.
相关部分从这里开始:
A "!" argument before the address specification inverts the
sense of the address. The flag --src is an alias for this
option. Multiple addresses can be specified, but this will
expand to multiple rules (when adding with -A), or will cause
multiple rules to be deleted (with -D).
答案2
您可能会发现在这里建立一个链将使事情变得更容易处理。
链基本上就像一个子表。你向它发送内容,然后你可以返回或处理该链中的内容。
-t INPUT -N LOGME
# return stuff, that we don't want to handle
-A LOGME -s 166.100.102.50/32 -j RETURN
-A LOGME -s 192.168.27.0/24 -j RETURN
# log everything that hasn't been returned
-A LOGME -j LOG --log-level 7
另一个选择可能是创建并使用ipset,它基本上可以让您构建一组地址,然后您可以使用选项在规则中引用这些地址--match-set
。