在 CentOS 上通过 Apache(httpd)限制 IP 访问,常见有几种方式,下面按最常用 → 进阶给你说明,并附具体配置示例。
Require(推荐,CentOS 7+)CentOS 7/8 默认使用 Apache 2.4,用 Require 指令。
编辑 Apache 主配置或虚拟主机:
vi /etc/httpd/conf/httpd.conf
或
vi /etc/httpd/conf.d/your-site.conf
示例(只允许 192.168.1.100 访问):
<Directory "/var/www/html">
Require ip 192.168.1.100
</Directory>
❌ 拒绝所有,只允许指定 IP:
<Directory "/var/www/html">
Require all denied
Require ip 192.168.1.0/24
</Directory>
<Directory "/var/www/html/admin">
Require ip 10.0.0.5
</Directory>
或限制单个文件:
<Files "config.php">
Require all denied
</Files>
<Directory "/var/www/html">
Require all granted
Require not ip 203.0.113.50
</Directory>
.htaccess(适合虚拟主机)如果不能用主配置:
vi /var/www/html/.htaccess
Require ip 192.168.1.100
⚠️ 需要 Apache 允许 .htaccess:
<Directory "/var/www/html">
AllowOverride All
</Directory>
如果你是想直接不让某些 IP 访问服务器:
# 只允许某个 IP 访问 80/443
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80,443" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="80,443" reject'
firewall-cmd --reload
mod_evasive(防暴力 / CC 攻击,可选)yum install mod_evasive
适合自动封 IP,不是手动限制。
httpd -t # 检查配置
systemctl restart httpd
| 需求 | 推荐方式 |
|---|---|
| 限制某个 IP 访问网站 | Apache Require |
| 限制后台目录 | <Directory> |
| 防止外部直接访问 | Firewall |
| 防攻击 | mod_evasive |
如果你能说明是 CentOS 几 + Apache 版本 + 限制场景(整站 / 目录 / API),我可以给你更精确的配置。