如何在Apache 2.4上正确实现IP白名单?

如何在Apache 2.4上正确实现IP白名单?

我有一个网站(在 Google Cloud 的 CentOS 上运行,Apache 2.4.37),它的名字是 awesomesite.co.id。

该网站上的某些页面(例如 awesomesite.co.id/dev123/secret.html)不应从任何网络访问,除非从列入白名单的 IP。因此,以下是我已经执行的操作:

  1. 已编辑/etc/httpd/conf.d/awesome-site.conf。我在其中添加了 2 个白名单 IP。
    <VirtualHost *:80>
    ServerName awesomesite.co.id
    DocumentRoot /var/www/html/awesome
    ErrorLog /var/log/httpd/awesome-site-error.log
    CustomLog /var/log/httpd/awesome-site-requests.log combined
    #commented for testing PHP proxy, allow both http and https work
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =awesomesite.co.id
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
    <Directory /dev123/*>
            Order deny,allow
            Deny from all
            Allow from 123.123.100.100
            Allow from 200.200.44.59
    </Directory>
  1. 重新启动Apache:systemctl restart http.service

我尝试在几台移动设备(所有不同的电信运营商)上访问 awesomesite.co.id/dev123/secret.html。结果是所有设备都可以正常访问该页面。

那么正确的方法是什么?

答案1

Allowmod_access_compat 提供的、Deny和指令Order从 2.4 版开始已被弃用,并且不再起作用。

改用Require

Require ip 123.123.100.100
Require ip 200.200.44.59

Require指令由模块提供mod_authz_host

更多详情可参阅Apache HTTP 服务器文档

请注意CIDR 范围Require ip 200.200.44.0/24也是可能的(见这里更多示例):

在第二种形式中,ip.address 是 IP 地址、部分 IP 地址、网络/网络掩码对或网络/nnn CIDR 规范。可以使用 IPv4 或 IPv6 地址。

相关内容