我喜欢将所有到达 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
匹配数据包