我希望将所有到达80的stream量redirect到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。
没有其他规则configuration。
请帮我:)
–
编辑 :
在回答下面的问题:这是exaclty,我想要实现的:
我有一个运行在8000端口的服务,可以看作是一个networking服务器。 它应该可以通过端口80从外部访问,但不能通过端口8000访问。内部networking无关紧要:可能会受到限制。
我明白,REDIRECT不会丢弃直接写入端口8000的数据包,但是如果我将INPUT链中的所有数据包都丢弃到8000,那么redirect的数据包也会被丢弃。
iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP
不能为我工作。
有没有办法丢弃数据包的目的地端口8000,还没有通过我的PREROUTING链redirect?
通过-s添加一个源IP没有帮助,对吧? 因为源IP在redirect时不会改变。
回答
基于接受的答案,我可以这样解决:
iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1 iptables -A INPUT -m mark --mark 1 -j DROP
在您redirect的数据包中设置标记。 然后在被封装的包之前放置标记的包。 请参阅iptables -j MARK -h标记数据包和iptables -m mark -h以匹配一个包