因此,我的 Glassfish 服务器正在监听端口 8080。
但是,我希望我的请求在端口 80 上隐藏 8080,
这样人们就认为我的服务器确实以 80 的速度运行。
我该如何使用 来做这件事iptables
?我尝试过以下规则:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
但这不是我想要的,因为我必须打开 80和8080 才能工作。
有任何想法吗?
更新:我已将规则文件更改为如下形式:
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP
#REDIRECTION RULES
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT \
--to-destination 127.0.0.1:8080
但还是不行。我已/proc/sys/net/ipv4/ip_forward
设置为1
。
还是http://myserver:8080
不行http://myserver:80
。数据包被丢弃了。
答案1
使用基因转移酶。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination your.ip.address:8080
类似的东西应该可行。:)
按照您自己的编辑进行编辑:我认为您的规则集中的这一行太早了:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
由于这个原因,您的服务器不接受任何新连接,对吗?尝试将其移到您的iptables -A INPUT -j DROP
行之前。
答案2
我有完全相同的问题,并在此社区的帮助下找到了答案。以下是链接:
使用 iptables 将端口重定向到本地主机/阻止目标端口
我通过标记 8080 传入的数据包并随后过滤它们来解决这个问题:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP
丢弃标记数据包的最后一条规则可能是 INPUT 链中的第一条规则。
对于 localhost,DNAT 对我来说不起作用。我认为这是因为 localhost 在内核中被特殊处理。
答案3
您是否尝试过改变:
iptables -P FORWARD DROP
到
iptables -P FORWARD ACCEPT
?
答案4
虽然这个问题已经很老了,但我只是想提出自己的答案,因为我遇到过类似的问题,这是谷歌搜索到的第一个结果之一,这里的技巧是只打开端口 80,但添加一条规则来接受任何已经在输入接口上进行 DNAT 的数据包,请注意不要使用 127.0.0.1,因为它在内核中默认被阻止(参见 net.ipv4.conf.all.route_localnet)
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --cstate DNAT -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination myserver:8080