Debian 上 Apache2 的访问控制策略
一 核心机制与模块
二 常见策略与示例
<Directory "/var/www/html/restricted">
Require ip 203.0.113.10 203.0.113.0/24
Require all denied
</Directory>
# 创建用户文件(首次加 -c)
sudo htpasswd -c /etc/apache2/.htpasswd alice
# 配置
<Directory "/var/www/html/restricted">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
# 捕获 IP 访问并返回 403
<VirtualHost *:80>
ServerName 203.0.113.5
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^ - [F]
</VirtualHost>
<VirtualHost *:443>
ServerName 203.0.113.5
SSLEngine On
SSLCertificateFile /path/to/cert.crt
SSLCertificateKeyFile /path/to/privkey.key
RewriteEngine On
RewriteCond %{HTTP_HOST} ^203\.0\.113\.5$ [NC]
RewriteRule ^ - [F]
</VirtualHost>
<Directory "/var/www/html/media">
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteRule \.(mp4|avi|mov)$ - [F]
</Directory>
# /etc/apache2/conf-available/security.conf
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "no-referrer-when-downgrade"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
</IfModule>
sudo a2enconf security
以上示例覆盖了 IP 限制、基本认证、域名访问限制、防盗链与安全头等常见场景。
三 策略组合与生效范围
<Directory "/var/www/html/restricted">
Require ip 203.0.113.0/24
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
四 运维与安全建议
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com