Linux Apache2 安全设置步骤
一 基础加固
二 网络与访问控制
sudo ufw allow 'Apache Full' && sudo ufw enablesudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload<Directory "/var/www/html/admin">
Require all denied
Require ip 203.0.113.0/24 198.51.100.10
</Directory>
<Directory "/var/www/html">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
三 加密与认证
sudo apt install certbot python3-certbot-apachesudo yum install certbot python2-certbot-apache(或 python3 版本)sudo certbot --apache -d yourdomain.com -d www.yourdomain.comsudo a2enmod ssl
sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
在虚拟主机 VirtualHost 段启用:SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<Directory "/var/www/html/secret">
AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
四 安全头与请求限制
<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 Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';"
</IfModule>
sudo apt install libapache2-mod-evasive
sudo mkdir -p /var/log/apache2/evasive
sudo chown www-data:root /var/log/apache2/evasive
示例参数(/etc/apache2/mods-available/evasive.conf 或相应加载配置):DOSHashTableSize 2048
DOSPageCount 20
DOSPageInterval 1.0
DOSSiteCount 300
DOSSiteInterval 1.0
DOSBlockingPeriod 10.0
DOSLogDir "/var/log/apache2/evasive"
五 运行时防护与审计
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
sudo tar -czvf /backup/apache2-backup_$(date +%F).tar.gz /etc/apache2 /var/www/html
sudo systemctl reload apache2(或 restart),并使用 apache2ctl configtest 检查语法;通过浏览器或命令行工具验证 HTTP/HTTPS 访问、响应头与安全策略是否生效。