我的同事在我们的一台测试服务器上安装了 Jenkins。当我访问服务器 ip 和端口 8080 时,Jenkins 正在运行 ie 99.999.999.999:8080
我想将 Jenkins 应用程序锁定到外部世界,并且只能从内部 IP 地址访问它。
因此我在 apache 中设置了一个 VirtualHost,如下所示:
<VirtualHost *:80>
ServerName jenkins.mytestserver.com
ErrorLog logs/jenkins.mytestserver.com-error_log
CustomLog logs/jenkins.mytestserver.com-access_log common
#ProxyPass /usr/share/tomcat6/webapps/ ajp://127.0.0.1:8080/usr/share/tomcat6/webapps/
#ProxyPassReverse /usr/share/tomcat6/webapps/ ajp://127.0.0.1:8080/usr/share/tomcat6/webapps/
#ProxyRequests Off
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyRequests Off
ProxyPreserveHost On
<Location />
order deny,allow
deny from all
Allow from 11.111.111.111
</Location>
</VirtualHost>
Vhost 工作正常,我可以通过 jenkins.mytestserver.com 访问 jenkins,并且它被外界屏蔽了。
如何阻止外界通过 99.999.999.999:8080 访问它?
我感觉上面执行 ReverseProxy 的方式不正确,因为它只是将请求传递给http://本地主机:8080/这与http://99.999.999.999:8080
我一直参考以下文档:
https://wiki.jenkins-ci.org/display/JENKINS/Apache+frontend+for+security
https://www.mulesoft.com/tcat/tomcat-connectors(我认为我的问题的答案就在这个文档中,但我无法弄清楚)。
任何帮助均感激不尽。
问候,斯蒂芬
答案1
使用 iptables 阻止流量的简单方法
IPTables 如何操作是一个很好的方法
阻止的基本思路是
sudo iptables -A INPUT -s 192.168.x.x -p tcp --dport 8080 -j ACCEPT
到您的所有网络
sudo iptables -A INPUT -p tcp --dport 8080 -j REJECT
以拒绝所有其他网络
答案2
由于您将流量从 apache web 服务器代理到http://localhost:8080/
,因此您可以在 tomcat 中进行配置连接器它应该绑定到address=127.0.0.1
而不是绑定到所有接口的默认行为。
这样,进入你的 jenkins 服务的唯一方式是通过你的代理(当然,除非你从运行 jenkins 的同一台机器连接)
如果您也想在配置中包含 SSL,那么您也可以使用 proxyPass,但对于在 443 上监听的端口,并将您的 SSL 配置也放入 apache httpd 中(并从端口 80 重定向到 443)。