如果某个 IP 在 iptables 中被其“IP”阻止,则可以轻松地使用 grep iptables 进行查找,例如
iptables -L -n | grep "a.b.c.d"
但如果 IP 已被使用如下 IP 范围阻止:
iptables -A INPUT -s "163.172.000.000/16" -j DROP
那么,这个方法就不再起作用了。可以用什么方法呢?
答案1
你可以使用地址使用 python。
首先列出您感兴趣的规则iptables -S
(将单个 IP 列为 /32,非常方便):
然后,将块提供给此 Python 脚本check_ip.py
。它会检查第一个参数(地址)是否属于第二个参数(块),并以代码 0 或 1 退出。
#!/bin/python3
import ipaddress
import sys
sys.exit(ipaddress.ip_address(sys.argv[1]) in ipaddress.ip_network(sys.argv[2],strict=False))
然后您就可以连接这两部分。
以下是快速编写的 bash 命令行,但您也可以将整个代码移动到 python,或者使用xargs
,...
iptables -S | grep DROP | awk'{print $4,$0}'| 读取 ab 时;执行 python3 check_ip.py IP.ADDR.TO.CHECK $a || echo $b;完成
答案2
我的建议是在防火墙规则之前添加另一条专门用于记录此类数据包丢失的规则。而不是:
iptables -A INPUT -s "163.172.000.000/16" -j DROP
拒绝流量的首选方法应该是:
iptables -N logNdrop
iptables -A logNdrop -j LOG --log-level 5 --log-prefix 'Packet dropped: '
iptables -A logNdrop -j DROP
iptables -A INPUT -s "163.172.000.000/16" -j logNdrop
这将允许您在文件中查找 IP 阻止事件,例如/var/log/messages
,具体取决于您的 syslog 守护程序的配置方式:
# egrep 'Packet dropped: .* SRC=163.172.181.190 ' /var/log/messages
# tail -F /var/log/messages | egrep 'Packet dropped: .* SRC=163.172.181.190 '