我正在尝试让 Jenkins 在 RHEL 6 服务器上运行。 Jenkins 已安装,但由于防火墙规则而无法访问。如果我用 停止 iptables service iptables stop
,我可以在浏览器中通过端口 8080 访问 Jenkins。服务重新启动后,我无法访问它。
我尝试了各种方法向 iptables 添加规则以允许端口 8080 上的流量,但无济于事。
iptables -L -n
以下是INPUT 部分第一行 Jenkins/port 8080 规则的当前输出:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5353
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:5353
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:443
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:123
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:161
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:161
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:389
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:389
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:636
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:636
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8140
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:8140
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4046
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4045
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4045
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4047
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4047
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:514
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:514
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:717
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:717
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:6000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2435
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2435
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4526
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4526
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2659
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2659
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1521
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:1521
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:5353
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5353
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:123
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:161
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:161
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:389
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:389
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:636
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:636
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:8140
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8140
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:111
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:111
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2049
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4046
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4046
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:4045
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4045
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:4047
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4047
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:4049
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:514
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:514
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:6000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:717
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:717
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2435
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2435
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4526
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4526
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2659
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2659
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:1521
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1521
答案1
Gazareth,如果您注意到除了 iptables INPUT 队列规则之外,您还配置了 OUTPUT 队列规则,并且 8080/TCP 端口在 OUTPUT 队列中不允许/配置。
正如您所补充的:
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
您还需要添加:
iptables -I OUTPUT -p tcp --sport 8080 -j ACCEPT
iptables 能够维护有状态的防火墙规则,因此,除了维护两个不同的队列之外,还可以执行以下操作:
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
请注意,在手动执行此操作时,您可以使用 -I 将规则放置在队列顶部,而在批处理文件中执行此操作时,通常您会执行 iptables -A。
答案2
默认 Jenkins 安装在端口 8080 和 8443 上运行。通常,HTTP/HTTPS 服务器分别在端口 80 和 443 上运行。但这些端口在 Unix/Linux 系统上被认为是特权端口,并且使用它们的进程必须由 root 拥有。不建议以 root 身份运行 Jenkins - 它应该以自己的用户身份运行。
所以需要将80/443端口的流量转发到8080/8443。您必须确保 iptables 允许所有 4 个端口上的流量。
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
iptables-保存 > /etc/sysconfig/iptables
或者,
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080