Linux Apache2安全设置关键步骤
定期更新系统和Apache2至最新版本,安装安全补丁以修复已知漏洞。
sudo apt update && sudo apt upgrade -ysudo yum update -ysudo systemctl restart apache2(Ubuntu/Debian)或sudo systemctl restart httpd(CentOS/RHEL)。使用防火墙(UFW或firewalld)仅允许必要端口(HTTP 80、HTTPS 443),阻断非法访问。
sudo apt install ufw -y
sudo ufw allow 'Apache Full' # 允许HTTP/HTTPS
sudo ufw enable # 启用防火墙
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
禁用未使用的模块(如autoindex、cgi、status),减少攻击面。
# 查看已启用模块:sudo a2enmod -l
# 禁用模块(以autoindex为例):
sudo a2dismod autoindex
# 重启Apache生效:
sudo systemctl restart apache2
常见需禁用的模块:autoindex(目录列表)、cgi(CGI脚本执行)、status(服务器状态显示)。
修改配置文件隐藏服务器版本、操作系统信息及错误详情,降低针对性攻击风险。
/etc/apache2/apache2.conf(Ubuntu/Debian)或/etc/httpd/conf/httpd.conf(CentOS/RHEL):ServerTokens Prod # 仅显示"Apache",隐藏版本号
ServerSignature Off # 关闭错误页面的服务器版本信息
使用Let’s Encrypt免费证书加密HTTP流量,防止数据窃听或篡改。
sudo apt install certbot python3-certbot-apache -y # Ubuntu/Debian
sudo yum install certbot python3-certbot-apache -y # CentOS/RHEL
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
通过.htaccess或主配置文件限制目录访问权限,防止未授权访问。
Options -Indexes(如/var/www/html)。/admin):<Directory "/var/www/html/admin">
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
创建密码文件:sudo htpasswd -c /etc/apache2/.htpasswd username(替换username为实际用户名)。<Directory "/var/www/html/confidential">
Require ip 192.168.1.100 192.168.1.101
</Directory>
通过mod_headers模块添加安全头,防范XSS、点击劫持等攻击。
/etc/apache2/conf-available/security.conf(Ubuntu/Debian)或/etc/httpd/conf/httpd.conf(CentOS/RHEL):<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff" # 防止MIME类型嗅探
Header always set X-Frame-Options "SAMEORIGIN" # 防止点击劫持
Header always set X-XSS-Protection "1; mode=block" # 启用XSS防护
Header always set Referrer-Policy "no-referrer-when-downgrade" # 控制Referer信息
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'" # 内容安全策略
</IfModule>
sudo a2enconf security(Ubuntu/Debian),重启Apache。确保日志记录详细,便于追踪异常行为。
/etc/apache2/apache2.conf中设置:LogLevel warn # 日志级别(warn及以上)
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
tail命令查看实时日志:tail -f /var/log/apache2/error.log(Ubuntu/Debian)或tail -f /var/log/httpd/error_log(CentOS/RHEL)。sudo apt install fail2ban -y # Ubuntu/Debian
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
启用mod_security(Web应用防火墙)拦截恶意请求。
sudo apt install libapache2-mod-security2 -y # Ubuntu/Debian
sudo yum install mod_security -y # CentOS/RHEL
/etc/modsecurity/modsecurity.conf,启用规则集(如OWASP Core Rule Set),重启Apache。严格限制网站目录权限,避免敏感信息泄露。
sudo chown -R www-data:www-data /var/www/html # Ubuntu/Debian(Apache用户为www-data)
sudo chown -R apache:apache /var/www/html # CentOS/RHEL(Apache用户为apache)
sudo chmod -R 755 /var/www/html # 目录权限755(所有者可读写执行,其他用户可读执行)
wp-config.php、config.php),设置权限为600:sudo chmod 600 /var/www/html/wp-config.php