ipset 行为有问题

ipset 行为有问题

有一个脚本来填充 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,看是否存在冲突或重叠。

相关内容