绕过特定 IP 的 Apache 身份验证

绕过特定 IP 的 Apache 身份验证

我们使用 Apache 作为反向代理,因此我们的一些内部开发/测试服务器可以在开放的 Internet 上访问以用于 UAT/CAT 目的。

我们通过 LDAP 服务器进行了基本的身份验证设置,但我们有一些站点需要将某些特定 IP 列入白名单,以便它们无需经过身份验证即可访问服务器。

我不确定在当前部分之上添加这样的另一部分是否可行:

<proxy *>
 Require all granted
 Require ip x.x.x.x y.y.y.y
</proxy>

该文件当前的样子如下.conf

<VirtualHost *:80>
  ServerName some.server.url

  ## Vhost docroot
  DocumentRoot "/var/www"

  ## Directories, there should at least be a declaration for /var/www

  <Directory "/var/www">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ## Logging
  ErrorLog "/var/log/httpd/some.server.url_error.log"
  ServerSignature Off
  CustomLog "/var/log/httpd/some.server.url_access.log" combined

  ## Proxy rules
  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass /robots.txt !
  ProxyPassReverse /robots.txt !
  ProxyPass / https://some.server.url/ acquire=3000 keepalive=On retry=0 timeout=1800
  ProxyPassReverse / https://some.server.url/

  ## Custom fragment
  <proxy *>
    AuthBasicProvider ldap-client-websites ldap-sidlee-dig
    AuthType Basic
    AuthName "GRM CRHA UAT"
    Require valid-user
  </proxy>

</VirtualHost>

答案1

不,不要添加第二个<proxy *>块,因为它会与第一个块冲突。

相反,将现有<proxy *>块更改为:

## Custom fragment
<proxy *>
    AuthBasicProvider ldap-client-websites ldap-sidlee-dig
    AuthType Basic
    AuthName "GRM CRHA UAT"
    <RequireAny>
        Require ip x.x.x.x y.y.y.y
        Require valid-user
    </RequireAny>
</proxy>

</VirtualHost>

这样,只需满足其中的一个Require指令<RequireAny>就足以允许访问。所以,任何一个具有匹配的 IP 地址或者需要成功的身份验证才能允许访问。

答案2

我从来没有能够在 Apache 中使用代理来完成这样的事情。

我很想设置一个专用于另一个 TCP 端口的附加代理,然后以类似的方式定义第二个端口。然后,您可以禁用第二个端口的身份验证。

然后可以创建第二个端口的 IPTables 规则,该规则将限制对您想要允许进入系统的 IP 的访问。

我会提醒您,这是一个有些复杂的过程,如果您确实想走这条路,我会仔细考虑。

相关内容