我们希望使用iptables来logging所有的networking连接, 除非连接地址是ABCD或连接地址是EFGH 。 如果没有包括我们想要包含的地址在内的范围,这两个地址不能合并成一个CIDR范围。 我通过添加这个iptables规则来获得部分path:
-I INPUT ! -s ABDE -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
但是,这仍然logging来自EFGH连接。 有没有办法让一切都没有logging?
(这两个地址生成很多连接,我们不需要logging它们。)
在你引用的行上面添加一个或两个规则,允许ABCD或EFGH,然后在下面进行logging。 iptables按照规则的顺序工作,所以允许通过更早的事情是处理的结束。
这也是为什么在大多数防火墙规则集的末尾添加一个通用的“全部拒绝”的原因。 如果上面的规则未涵盖某些内容,则拒绝该内容,因为这是意想不到的,可能不需要。
例子(根据需要调整,不要复制粘贴):
-A INPUT -s ABCD -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT -A INPUT -s EFGH -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection " -A INPUT -j DROP
您可以创build一个名为LOG_UNLESS的自定义链,然后您可以执行以下操作:
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG_UNLESS -A LOG_UNLESS -s 192.0.2.1 -j RETURN -A LOG_UNLESS -s 203.0.113.2 -j RETURN -A LOG_UNLESS -j LOG --log-level 1 --log-prefix "New Connection "
另一种select是使用ipset 。
首先,创build适当的IP集:
ipset create DO_NOT_LOG hash:ip
然后,添加您要排除的地址:
ipset add DO_NOT_LOG ABCD ipset add DO_NOT_LOG EFGH
最后,在iptables日志logging规则中添加一个否定匹配项:
-I INPUT -m set ! --match-set DO_NOT_LOG src -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
那! --match-set DO_NOT_LOG src ! --match-set DO_NOT_LOG src意思是:“匹配在DO_NOT_LOG找不到源( src )地址的DO_NOT_LOG ”