我怎样才能让詹金斯无法被外界访问?

我怎样才能让詹金斯无法被外界访问?

在开发服务器上,我安装了用于自动化测试的工具 Jenkins。它在端口 8080 上运行。如果我转到,www.mysite.com:8080我可以看到它的命令面板。我想通过使用 Apache 密码保护它,使外界无法访问它。(我的服务器运行的是 Ubuntu 12.04 LTS)。我阅读了以下内容对于一般建议,特别是关于安全方面的建议,他们建议以下设置:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/opt/apache/httpd/htdocs"
    ServerName jenkins.yourdomain.com
    ErrorLog "logs/jenkins-error_log"

    ProxyPass /jenkins/ ajp://127.0.0.1:8102/jenkins/
    ProxyPassReverse /jenkins/ ajp://127.0.0.1:8102/jenkins/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
    <Location /jenkins/>
         AuthType basic
         AuthName "jenkins"
         AuthUserFile "/opt/apache/httpd/conf/.htpasswd"
    </Location>
</VirtualHost> 

我的 Apache 文件当前具有以下设置:

<VirtualHost *:80>
        # Admin email, Server Name (domain name), and any aliases
        ServerAdmin [email protected]
        ServerName www.mysite.com
        ServerAlias mysite.com

        # Index file and Document Root (where the public files are located)
        DirectoryIndex index.html index.php
        DocumentRoot /var/www

        # Log file locations
        LogLevel warn
        ErrorLog /var/log/apache/error.log
        CustomLog /var/log/apache/access.log combined

</VirtualHost>

我无法使建议的方法正常工作而不出现错误(尽管控制台或日志中没有消息),因此我添加了以下几行:

<VirtualHost *:8080>
    ServerName www.mysite.com
    ProxyPass / http://www.dev.mysite.com:8080/
    ProxyPassReverse / www.dev.mysite.com:8080/
    ProxyPreserveHost on
    <Proxy *>
        AuthType Basic
        AuthName "Dev Server"
        AuthUserFile "/home/.htpasswd"
        Require valid-user
    </Proxy>
</VirtualHost>

在我的.htpasswd文件中我输入了以下几行:

john:n5MfE
dave:9fluR

然后我重新启动了 Apache,但8080无需密码仍可访问端口。我是否遵循了正确的步骤?

答案1

您应该使用 htpasswd 程序创建并将用户添加到 .htpasswd 文件,因为 Linux 不支持纯文本密码,例如

htpasswd -c /home/.htpasswd john
New password:
Re-type new password:
Adding password for user john

将创建文件并使用您提供的密码添加用户 john。然后您可以像这样添加其他用户

htpasswd /home/.htpasswd dave
New password:
Re-type new password:
Adding password for user dave

答案2

我不确定<Proxy>指令是否处理 HTTP Basic 身份验证(文档建议仅通过 IP/域进行限制)。我认为您应该只使用一般方法,例如:

<Location />
    AuthType Basic
    AuthName "Dev Server"
    AuthUserFile "/home/.htpasswd"
    Require valid-user
</Location>

相关内容