有没有一个好的方法可以确保对整个登台服务器的安全访问?

有没有一个好的方法可以确保对整个登台服务器的安全访问?

我有一个临时服务器和生产服务器,它们托管多个站点(使用 Apache2.2)。目前,我的 DNS 指向stage.domainX.com临时服务器和*.domainX.com生产服务器。

一切似乎都运行良好,但我希望能够确保对临时服务器的访问安全。因此,除非是合适的人,否则stage.domainX.com应禁止试图进入的人(如果可能的话,进入生产服务器)。

而且,我想使用域名而不是 IP,因为我希望客户端能够更友好地查看暂存站点(而不是记住 IP 地址)。

有没有什么好办法可以解决这个问题?或者,我处理暂存域名流程的方式是否不寻常?

PS 我其实一直想通过端口来管理它,但我还没找到办法。例如,domainX.com:80(标准)用于生产,domainX.com:9000 用于准备。不过还没找到在 DNS 中执行此操作的方法(使用 GoDaddy 的名称服务器/区域)。

答案1

使用 Apache,您可以简单地设置临时服务器AllowDeny指令以限制对授权 IP 地址的访问。或者,您可以将整个过程置于 HTTP 身份验证之后(用户名/密码,或者如果您想要真正花哨的话,可以使用客户端证书)。
使用自定义“未授权”错误页面将人们重定向到生产站点可获得加分。

配置 Apache 在不同的端口上为暂存站点提供服务也是一个选择,但这只是像使用域一样的“通过隐蔽性实现安全性” stage.domainX.com——它不会阻止任何人找到暂存站点。

<rant>
请注意,更改端口不是DNS 是 Web 服务器配置的一部分(有关详细信息,请参阅 Apache 手册)。DNS 具有没有概念端口号,它只是一个名称到 IP(或 IP 到名称)的映射*——令人讨厌。
* 有一些有限的例外,如 SRV 记录,但我们谈论的是A地址和别名记录记录

答案2

我过去曾成功使用过类似以下的 Apache 设置;它允许某些列出的 IP 地址自由访问暂存站点,而无需提供基本身份验证凭据(例如,您可以添加您办公室和您客户办公室的 IP 地址),但如果客户不在办公室,仍然允许基于密码的访问。

# Set NOAUTH environment-variable for certain IPs that are allowed without credentials
SetEnvIf Remote_Addr 11.22.33.44 NOAUTH=1

# Staging
<VirtualHost *:80>
    ServerName    stage.domainX.com
    DocumentRoot  /var/www/stage.domainX.com

    # Access restrictions
    <Location />
        Order allow,deny
        # Anyone with the NOAUTH environment variable is allowed
        Allow from env=NOAUTH

        # Anyone that has valid credentials is allowed
        AuthType      Basic
        AuthName      "DomainX Staging"
        AuthUserFile  /etc/apache2/staging.domainX.com.passwd
        Require valid-user

        # Either of the above is fine
        Satisfy Any
    </Location>

    # ... other directives ...
</VirtualHost>

# Production
<VirtualHost *:80>
    ServerName    domainX.com
    DocumentRoot  /var/www/domainX.com

    # ... other directives ...
</VirtualHost>

相关内容