iptables 用于流量监控

iptables 用于流量监控

我的 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

相关内容