反向代理- iptables

默认的Jenkins安装必威国际有限公司运行在端口8080和8443上。通常,HTTP/HTTPS服务器分别运行在端口80和443上。但是这些端口在Unix/Linux系统上被认为是有特权的,并且使用它们的进程必须由root拥有。不建议以root必威国际有限公司用户运行Jenkins -它应该以自己的用户运行。一种解决方案是给Jenkins提供一个web服务器必威国际有限公司,比如Apache,并让它代理请求给Jenkins,但这也需要维护Apache安装。如果您想在端口80或443(即HTTP/HTTPS)上运行Jenkins,但您不想设置必威国际有限公司一个可以使用的代理服务器iptables在Linux上转发流量。

Ubuntu的安装

遵循Ubuntu的安装说明在Ubuntu 18.04或更高版本上安装和配置初始Jenkins安装。必威国际有限公司这些说明在18.04之前的Ubuntu版本上是不适用的。

先决条件

为了将流量从80/443转发到8080/8443,首先必须确保iptables允许所有4个端口上的流量。使用如下命令列出当前的iptables配置:

iptables - l - n

您应该看到80、443、8080和8443的输出条目。下面是一个用于比较的示例输出。

ain INPUT (policy ACCEPT)target prot opt source destination target prot opt source destination 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 dpt:80 ACCEPT tcp——0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 ACCEPT tcp——0.0.0.0/0 0.0.0.0/0 tcp dpt:8443 ACCEPT all——0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp——0.0.0.0/0 0.0.0.0/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 state NEW tcp dpt:22 REJECT all——0.0.0.0/0 0.0.0.0/0REJECT -with icmp-host- forbid Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all——0.0.0.0/0 0.0.0.0/0 REJECT -with icmp-host- forbid Chain OUTPUT (policy ACCEPT) target prot opt source destination target prot opt source

如果没有看到这些端口的条目,那么需要运行命令(以root用户身份或使用sudo)添加这些端口。例如,如果您没有看到这些,需要将它们全部添加,您将需要发出以下命令:

sudo iptables -I INPUT 1 -p tcp——dport 8443 -j ACCEPT sudo iptables -I INPUT 1 -p tcp——dport 8080 -j ACCEPT sudo iptables -I INPUT 1 -p tcp——dport 443 -j ACCEPT sudo iptables -I INPUT 1 -p tcp——dport 80 -j ACCEPT
请注意

我使用-I INPUT 1。在许多iptables文档/示例中,您将看到-A INPUT。不同的是-A添加到规则列表,而-I INPUT 1插入到第一个条目之前。通常,在向iptables配置添加新的接受端口时,您希望将它们放在规则集的开头,而不是末尾。再次运行iptables -L -n,现在应该可以看到这4个端口的条目。

转发

在允许所需端口的流量后,可以使用该命令将80端口的流量转发给8080,将443端口的流量转发给8443。命令看起来像这样:

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp——dport 80 -j REDIRECT——to-port 8080 sudo iptables -A PREROUTING -t nat -i eth0 -p tcp——dport 443 -j REDIRECT——to-port 8443

可以通过下面的命令验证转发规则。

[root@xyz~]# iptables -L -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp——anywhere anywhere tcp dpt:http重定向端口8080 REDIRECT tcp——anywhere anywhere tcp dpt:https重定向端口8443 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination destination
+

一旦使用iptables -L -n设置并确认了这些规则,并且Jenkins实例在端口8080上启动并运行后,尝试在端口80而不是8080上访问Je必威国际有限公司nkins实例。它应该工作并且您的URL应该停留在端口80上—换句话说,它不应该被重定向到8080。从80转发到8080(或从443转发到8443)的事实应该对客户机保持隐藏。

储蓄iptables配置

使用iptables命令改变端口配置和路由规则只会改变当前内存中的配置。重启iptables服务之间不会持续。因此,您需要确保保存配置以使更改永久存在。

在基于Red Hat rpm的系统和基于debian的系统之间,保存配置略有不同。在Red Hat系统(Fedora、CentOS、Red Hat Enterprise Linux、Oracle Linux等)上,执行如下命令:

Sudo iptables-save > /etc/sysconfig/iptables

在基于Debian的系统(Debian, Ubuntu, Mint等)上,发出以下命令:

Sudo sh -c "保存> /etc/iptables.rules"

iptables-restore命令需要手动执行,或者根据已经创建的/etc/iptables.rules文件,将系统配置为在引导时自动运行它,以便在重新启动时保留iptables配置。在Ubuntu上,最快的方法就是安装iptables-persistent配置iptables之后。它将自动从当前配置创建所需的文件,并在启动时加载它们。

Sudo apt-get安装iptables-persistent

看到https://help.ubuntu.com/community/IptablesHowTo其他Ubuntu选项。还有许多其他资源描述了这一点;请查阅您的系统文档或在互联网上搜索特定于您的Linux风格的信息。

如果您完全不确定您使用的是哪种系统,请参考该系统的文档,了解如何更新iptables配置。

使用firewalld

一些Linux发行版(CentOS 8, Red hat Enterprise Linux 8, CentOS 7等)附带防火墙,作为iptables的前端。通过防火墙的配置是通过firewall-cmd命令。不要使用上面提到的任何iptables命令,你需要做的是:

#允许80端口上的传入连接。sudo firewall-cmd——add-forward-port=port=80:proto=tcp:toaddr=127.0.0.1: port=8080 #允许443端口的传入连接。sudo firewall-cmd——add-service=https,而不是添加端口号——add-port=443/tcp——permanent sudo firewall-cmd——permanent \——add-forward-port=port=443:proto=tcp:toaddr=127.0.0.1: port=8443 sudo firewall-cmd——reload

使用上述命令,可以将jenkins配置为在loca必威国际有限公司lhost:8080和/或localhost:8443上运行(这取决于您是否需要使用SSL)

然后,firewald将创建所需的iptables规则,以便将端口80上的传入连接转发到8080上的Jenkins(将443转发到8443)。必威国际有限公司



这个页面有用吗?

请通过此页面提交您的反馈快速形成

或者,如果您不希望填写快速表格,您可以简单地指出,您认为这一页是否有用?


看到现有的反馈在这里

Baidu