有一个脚本来填充 ipset,然后我这样做:
/sbin/iptables -I INPUT -m 设置 --match-set ipsum src -j DROP
现在不确定这对其他端口如何起作用,但我知道如果我想让“ipsum”中包含的地址不访问 80 和 443,我必须添加最后 2 个命令。
/sbin/iptables -A FORWARD -p tcp --dport 443 -m set --match-set ipsum dst -j DROP
/sbin/iptables -A FORWARD -p tcp --dport 80 -m set --match-set ipsum dst -j DROP
我测试时确认最后两个命令有效。
不确定为什么第一个命令不足以做到这一点。
我应该说明一下我也有 ufw,并且第一行之一是:
443 允许任意位置
在 iptables 中翻译为:
Chain ufw-user-input (1 个引用)
目标 保护 优化 源 目标
接受 tcp -- 任何地方 任何地方 tcp dpt:http
接受 udp -- 任何地方 udp dpt:80
接受 tcp -- 任何地方 任何地方 tcp dpt:https
接受 udp -- 任何地方 udp dpt:443
所以我猜想这里有一个顺序偏好。
但是我不明白的是:如果 ufw 规则优先,那么我添加 /sbin/iptables -A FORWARD -p tcp --dport 443 -m set --match-set ipsum dst -j DROP
不会改变任何事情。但事实确实如此。
所以不确定发生了什么...
欢迎任何想法。
但我想我的问题是:有没有办法用 1 个命令实现相同的结果?
我可以更换吗
/sbin/iptables -I INPUT -m 设置 --match-set ipsum src -j DROP
用另一行来达到这个目的,并阻止到该集合中的地址的所有端口。
通过阻止 FORWARD 语句中的所有端口来管理解决方法:
/sbin/iptables -A FORWARD -p tcp --dport 0:65535 -m 设置 --match-set ipsum dst -j DROP
但这不是一个非常优雅的解决方案,所以不满意。
@AB 谢谢你的回答。
我列出了FORWARD链,结果如下:
(抱歉,这篇文章太长了)
iptables -L 转发
链转发(策略丢弃)
目标 保护 优化 源 目标
DOCKER-USER 全部 -- 任何地方 任何地方
DOCKER-ISOLATION-STAGE-1 全部 -- 任何地方 任何地方
接受所有 -- 任何地方 任何地方 ctstate 相关,已建立
DOCKER all--任何地方
接受所有 -- 任何地方 任何地方
接受所有 -- 任何地方 任何地方
接受所有 -- 任何地方 任何地方 ctstate 相关,已建立
DOCKER all--任何地方
接受所有 -- 任何地方 任何地方
接受所有 -- 任何地方 任何地方
ufw-before-logging-forward all -- 任何地方 任何地方
ufw-before-forward all -- 任何地方
ufw-after-forward all -- 任何地方
ufw-after-logging-forward all -- 任何地方
ufw-reject-forward all -- 任何地方
ufw-track-forward all -- 任何地方 任何地方
DROP tcp -- 任何地方 tcp dpt:https match-set ipsum ds
t DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set fireh dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set blockde dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set tornodes dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set fireh dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set blockde dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set tornodes dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:http match-set ipsum dst
DROP tcp -- 任何地方 tcp dpt:https match-set fireh dst
DROP tcp -- 任何地方 tcp dpt:http match-set fireh dst
DROP tcp -- 任何地方 tcp dpt:https match-set blockde dst
DROP tcp -- 任意位置 任意位置 tcp dpt:http match-set blockde dst
DROP tcp -- 任何地方 tcp dpt:https match-set tornodes dst
DROP tcp -- 任何地方 tcp dpt:http 匹配集 tornodes dst
DROP tcp -- 任何地方 任何地方 tcp dpt:https match-set 俄罗斯 dst
DROP tcp -- 任何地方 任何地方 tcp dpt:http match-set 俄罗斯 dst
DROP tcp -- 任何地方 tcp 匹配集 ipsum dst
DROP tcp -- 任何地方 tcp 匹配集 ipsum dst
DROP tcp -- 任何地方 tcp match-set fireh dst
DROP tcp -- 任意位置 任意位置 tcp 匹配集 blockde dst
DROP tcp -- 任何地方 tcp 匹配集 tornodes dst
DROP tcp -- 任何地方 任何地方 tcp 匹配集 俄罗斯 dst
DROP tcp -- 任何地方 tcp 匹配集 ipsum dst
DROP tcp -- 任何地方 tcp match-set fireh dst
DROP tcp -- 任意位置 任意位置 tcp 匹配集 blockde dst
DROP tcp -- 任何地方 tcp 匹配集 tornodes dst
DROP tcp -- 任何地方 tcp 匹配集 ipsum dst
DROP tcp -- 任何地方 tcp match-set fireh dst
DROP tcp -- 任意位置 任意位置 tcp 匹配集 blockde dst
DROP tcp -- 任何地方 tcp 匹配集 tornodes dst
DROP all -- 任何地方 任何地方 match-set ipsum src
DROP tcp -- 任何地方 tcp 匹配集 ipsum dst
DROP tcp -- 任何地方 tcp match-set fireh dst
DROP tcp -- 任意位置 任意位置 tcp 匹配集 blockde dst
DROP tcp -- 任何地方 tcp 匹配集 tornodes dst
DROP all -- 任何地方任何地方匹配集 tornodes src
第一条评论显然是我尝试做的
iptables -A FORWARD -p tcp --dport 0:65535 -m set --match-set ipsum dst -j DROP
没有起作用,因为列表中没有它的踪迹。
现在我不是 iptables 专家,所以我似乎对 src 和 dst 感到困惑。
对我来说,src 适用于传入请求,dst 适用于传出请求。
但这里的情况似乎并非如此。因为
ptables -A FORWARD -p tcp --dport 80 -m set --match-set ipsum dst -j DROP
确实阻止了来自外部到端口 80 的连接。
您还会注意到列表中的这一行:
DROP all -- 任何地方 任何地方 match-set ipsum src
我尝试了一个命令:
iptables -A FORWARD -m 设置 --match-set ipsum src -j DROP
按照端口逻辑(如果我想阻止传入请求,我应该使用 dst)。这是否意味着我指定 dst 而不是 src 才能使其正常工作???
再次抱歉写了这么多文字...
答案1
在添加两个 FORWARD 规则来阻止到端口 80 和 443 的流量时,尝试使用
-I
标志而不是标志。-A
这会将规则插入链的开头并赋予它们更高的优先级。修改
UFW
规则以阻止来自集合中特定 IP 地址的到端口 80 和 443 的流量"ipsum"
。这可能是一个更干净的解决方案,避免了需要额外的iptables
规则。iptables
检查和规则的应用顺序UFW
,看是否存在冲突或重叠。