Apache是世界上使用最广泛的网络服务器之一,为托管网站提供了一个强大而灵活的平台。当然,在网站运营时,你可能需要管理控制谁可以访问某些资源或整个网站。例如,你可能希望阻止特定IP地址或仅允许从特定区域或网络进行访问。
实际上,Apache使用一项名为“访问控制(Access Control)”的功能来实现这一点。在本文中,小编将使用简单、人性化、可读的配置允许或拒绝某用户访问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或vim等文本编辑器来编辑这些文件。
步骤2、使用Require指令设置访问控制
Require
指令指定允许或拒绝谁访问,现在让我们看一下允许和拒绝访问的典型示例。
示例1:拒绝来自特定IP地址的访问
要拒绝来自特定IP地址的访问,请使用Require not
指令,例如要阻止192.168.1.114 IP地址:
<Directory /var/www/html> Require all granted Require not ip 192.168.1.114 </Directory>
在这种情况下:
Require all granted
:允许访问所有IP地址Require not ip 192.168.1.114
:拒绝访问指定的IP地址
示例2:仅允许访问特定IP/IP范围
如果希望仅允许访问特定IP或IP地址范围,请使用以下命令:
<Directory /var/www/html> Require ip 192.168.1.0/24 </Directory>
这里Require ip 192.168.1.0/24
只允许访问192.168.1.0至192.168.1.255范围内的IP (常见的本地网络范围)。
示例3:拒绝除特定IP之外的所有人访问
您可能希望拒绝除特定IP或IP组之外的所有人访问,命令如下:
<Directory /var/www/html> Require all denied Require ip 192.168.1.114 </Directory>
在这种情况下:
Require all denied
:阻止所有人访问Require ip 192.168.1.114
:仅允许访问IP地址192.168.1.114
示例4:通过主机名限制访问
你还可以根据主机名限制访问,例如,如果希望仅允许来自特定域(如ecscoupon.com
)的用户访问,则可以使用:
<Directory /var/www/html> Require host ecscoupon.com </Directory>
这将只允许来自的访问者ecscoupon.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 # Ubuntu/Debian系统 sudo nano /etc/httpd/conf/httpd.conf # 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>
添加基于国家/地区的访问控制
现在模块已设置完毕,这样可以使用它根据网站访问用户的国家/地区阻止或允许访问。例如,要阻止来自日本(JP)和俄罗斯(RU)用户的访问,请在Apache虚拟主机文件中使用此配置:
<Directory /var/www/html> SetEnvIf MM_COUNTRY_CODE JP 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
要确认模块是否正确安装,可以检查Apache中是否加载mod_maxminddb
:
apachectl -M | grep maxminddb
如果加载正确,应该会看到类似以下内容的输出:
maxminddb_module (shared)
小结
控制对网站访问是管理Web服务器安全性和功能的重要方面,Apache的访问控制功能允许你根据IP地址、主机名甚至地理位置来允许或拒绝用户访问。
所以,无论你是阻止机器人、限制内部资源,还是保护网站免受未经授权的用户访问,Apache都使得实施这些控制变得简单有效。