我尝试过这个,但它只是一个部分答案或者不适合 CentOS7。 https://serverfault.com/a/320624/439512
我完全按照它说的做了但这是不对的。
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
$ curl localhost
curl: (7) Failed connect to localhost:80; Connection refused
$ curl localhost:8080
<html>...</html>
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:webcache
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这两个命令暂时有效,但重启后无效:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
如果你尝试保存它这那人说它会彻底坏掉,甚至暂时无法工作:
$ sudo systemctl enable iptables
$ sudo service iptables save
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
$ sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
$ sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
有人有关于如何做到这一点的实用示例吗?
答案1
使用以下命令,如果遇到任何问题,请发布错误。
确保该帖子被 iptables 允许并打开,然后:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
答案2
它无法识别 --permanent。如果没有它,命令可以完成但不起作用。
“--permanent” 用于firewalld,而不是用于iptables。这是打字错误。
请在执行以下命令后列出错误。它对我有用
打开文件:vim /etc/sysconfig/iptables
添加以下行
-A 输入 -m 状态 --状态新 -m tcp -p tcp --dport 8080 -j 接受
-A 输入!-i lo -p tcp -m conntrack --ctstate 新-m tcp --dport 8080 -j 接受
犯罪
*自然
-A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
犯罪
添加行后保存并重新启动服务
iptables-保存
systemctl 重新启动 iptables->REHL 7
服务重启 iptables->RHEL 6
使用以下 cmd 检查流量
iptables -t nat -L -n
ss-tulnp
注:场景如下 1.(网络 A 或机器 A )--8080-->内部-80->(网络 B 或机器 B)
2.(网络 B 或机器 B) <--8080-- 内部 <-80- (网络 A 或机器 A)
尝试使用 url 从外部进行故障排除,因为您已经添加的 iptables 中的规则可能会发生冲突,而且与现代防火墙应用程序相比,它是一个非常复杂的程序。
答案3
在 CentOS 7 上使用以下命令:
# firewall-cmd --permanent --zone=<zone-name> --add-forward-port=port=80:proto=tcp:toport=443:toaddr=<ip-address>
# firewall-cmd --reload
相应地更改您的区域、端口和 IP 地址。