Apache是世界上使用最广泛的网络服务器之一,为托管网站提供了一个强大而灵活的平台。
您在管理香港服务器上的网站时,您可能需要控制谁可以访问某些资源或整个网站。例如,您可能希望阻止特定 IP 地址或仅允许从特定区域或网络进行访问。Apache 使用一项名为“访问控制”的功能来实现这一点。
在本指南中,我们将介绍使用简单、人性化、可读的配置允许或拒绝访问Apache中的网站的步骤。
Apache 访问控制基础知识
Apache 使用两个主要指令来控制访问:
Require:用于允许特定用户、IP 地址或组访问。
Deny和Allow(在更高版本中已弃用):以前在旧版本的 Apache 中使用,但被Require指令取代。
在较新版本的 Apache(2.4 及更高版本)中,该Require指令是管理访问控制的主要方式。
步骤1:编辑Apache配置文件
根据您的系统,Apache 配置文件可以在不同的位置找到。
例如:
Ubuntu/Debian:/etc/apache2/apache2.conf或在虚拟主机文件内(例如/etc/apache2/sites-available/your-site.conf)。
CentOS/RHEL:/etc/httpd/conf/httpd.conf或虚拟主机文件(例如/etc/httpd/conf.d/your-site.conf)。
使用nano或vi等文本编辑器来编辑这些文件。
步骤2:使用 Require 指令设置访问控制
该Require指令指定允许或拒绝谁访问。让我们看一下允许和拒绝访问的示例。
示例 1:拒绝来自特定 IP 地址的访问
要拒绝来自特定 IP 地址的访问,请使用Require not指令。
例如,要阻止 IP 192.168.1.100:
<Directory /var/www/html>
Require all granted
Require not ip 192.168.1.100
</Directory>
在这种情况下:
Require all granted:允许访问所有 IP 地址。
Require not ip 192.168.1.100:拒绝访问指定的 IP 地址。
示例 2:仅允许访问特定 IP 地址
如果您希望仅允许访问特定 IP 或 IP 范围,请使用以下命令:
<Directory /var/www/html>
Require ip 192.168.1.0/24
</Directory>
这里只允许访问192.168.1.0至192.168.1.255Require ip 192.168.1.0/24范围内的 IP (常见的本地网络范围)。
示例 3:拒绝除特定 IP 之外的所有人访问
您可能希望拒绝除特定 IP 或 IP 组之外的所有人访问。
<Directory /var/www/html>
Require all denied
Require ip 192.168.1.10
</Directory>
在这种情况下:
Require all denied:阻止所有人访问。
Require ip 192.168.1.10:仅允许访问 IP 地址192.168.1.10。
示例 4:通过主机名限制访问
您还可以根据主机名限制访问。例如,如果您希望仅允许特定域(如example.com)的用户访问,则可以使用:
<Directory /var/www/html>
Require host example.com
</Directory>
这将只允许来自的访问者example.com访问该网站。
步骤 3:在 Apache 中屏蔽整个国家
要阻止来自特定国家/地区的流量,您需要安装一个名为的附加模块mod_maxminddb,该模块使用 GeoIP 数据库根据访问者的 IP 地址确定国家/地区。
在 Linux 中安装 mod_maxminddb
要使用mod_maxminddb模块,您需要安装并配置它。
在Ubuntu/Debian上,运行:
sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
在CentOS/RHEL上,运行:
sudo yum install epel-release
sudo yum install libmaxminddb libmaxminddb-devel mmdb-bin httpd-devel
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
下载 MaxMind GeoIP 数据库
MaxMind 提供了一个免费的 GeoLite2 数据库,我们可以使用它根据 IP 地址确定国家。
tar -xvzf GeoLite2-Country.tar.gz
sudo mkdir -p /usr/share/GeoIP
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/
配置 Apache 以使用 mod_maxminddb
现在,我们需要告诉 Apache 使用mod_maxminddb模块和 GeoIP 数据库。
sudo nano /etc/apache2/apache2.conf # On Ubuntu/Debian
sudo nano /etc/httpd/conf/httpd.conf # On CentOS/RHEL
添加以下配置以启用mod_maxminddb并指定 GeoIP 数据库的路径:
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>
添加基于国家/地区的访问控制
现在模块已设置完毕,您可以使用它根据访问者的国家/地区阻止或允许访问。例如,要阻止来自中国 (CN)和俄罗斯 (RU)的用户的访问,请在 Apache 虚拟主机文件中使用此配置:
<Directory /var/www/html>
SetEnvIf MM_COUNTRY_CODE CN BlockCountry
SetEnvIf MM_COUNTRY_CODE RU BlockCountry
Require all granted
Require not env BlockCountry
</Directory>
添加新配置后,重新启动 Apache 以应用更改:
sudo systemctl restart apache2 # 在 Ubuntu/Debian 上
sudo systemctl restart httpd # 在 CentOS/RHEL 上
要确认模块是否正确安装,您可以检查mod_maxminddbApache 中是否加载:
apachectl -M | grep maxminddb
如果加载正确,您应该会看到类似以下内容的输出:
maxminddb_module (shared)
结论
控制对您香港服务器上的网站的访问是管理 Web 服务器安全性和功能的重要方面。Apache 的访问控制功能允许您根据 IP 地址、主机名甚至地理位置允许或拒绝访问。