使用 iptables 将端口重定向到本地主机/阻止目标端口

使用 iptables 将端口重定向到本地主机/阻止目标端口

我喜欢将所有到达 80 的流量转发到 8000。

我用了

iptables -tnat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8000

但 8000 端口仍然向公众开放。

我尝试过-DNAT:

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8000

但这根本不起作用。/proc/sys/net/ipv4/ip_forward 设置为 1。

没有配置其他规则。

请帮帮我:)

--

编辑

回答以下问题:这正是我想要实现的:

我在端口 8000 上运行了一个服务,可以将其视为 Web 服务器。它应该可以通过端口 80 从外部访问,但不能通过端口 8000 访问。内部网络无关紧要:可能受限制,也可能不受限制。

我理解,REDIRECT 不会丢弃直接发送到端口 8000 的数据包,但如果我丢弃 INPUT 链中所有发送到 8000 的数据包,那么重定向的数据包也会被丢弃。

iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP 

对我来说没法工作。

有没有办法丢弃尚未通过我的 PREROUTING 链重定向的目标端口为 8000 的数据包?

通过 -s 添加源 IP 没有帮助,对吗?因为源 IP 在重定向时不会改变。

回答

根据接受的答案,我可以通过这种方式解决:

iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP

答案1

在重定向的数据包中设置标记。然后允许标记的数据包先于阻止的数据包通过。请参阅iptables -j MARK -h标记数据包和iptables -m mark -h匹配数据包

相关内容