系统更新与补丁管理
定期更新系统和Apache2软件包是安全基础,可及时修复已知漏洞。执行以下命令更新包列表并升级所有可更新软件:
sudo apt update && sudo apt upgrade -y
防火墙配置(UFW)
使用UFW(Uncomplicated Firewall)限制对Apache2的访问,仅允许必要的HTTP(80/tcp)和HTTPS(443/tcp)流量。若配置了自定义端口(如8080),需同步允许:
sudo apt install ufw -y
sudo ufw allow ssh # 允许SSH远程管理(默认端口22,建议修改为非标准端口)
sudo ufw allow http
sudo ufw allow https
# 若使用自定义端口(如8080)
# sudo ufw allow 8080/tcp
sudo ufw enable # 启用防火墙
sudo ufw status # 验证规则(应显示ALLOW规则)
禁用不必要的Apache模块
Apache2默认加载多个模块,禁用未使用的模块可减少攻击面。常见需禁用的模块包括autoindex(目录列表)、cgi(CGI脚本支持)、phpX.X(若未使用PHP)等。执行以下命令禁用模块:
sudo a2dismod autoindex cgi php7.4 # 替换php7.4为实际使用的PHP版本(若未使用则禁用)
sudo systemctl restart apache2 # 重启Apache使更改生效
配置SSL/TLS加密(HTTPS)
使用Let’s Encrypt免费获取SSL证书,启用HTTPS加密传输数据。安装Certbot工具并自动配置证书:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com # 替换为你的域名
# 按提示选择“Redirect”选项(将HTTP重定向至HTTPS,提升安全性)
证书有效期为90天,可通过以下命令自动续期:
sudo certbot renew --dry-run # 测试续期(无实际操作)
隐藏Apache版本信息与禁用目录列表
修改Apache配置文件,隐藏版本信息和服务器签名,防止攻击者利用已知版本漏洞攻击;同时禁用目录列表,避免敏感文件/目录暴露。
sudo nano /etc/apache2/apache2.conf
ServerTokens Prod # 仅显示“Apache”,隐藏版本号
ServerSignature Off # 禁用错误页面中的服务器签名
sudo nano /etc/apache2/sites-available/yourdomain.conf # 替换为你的虚拟主机配置文件
在<Directory>块中添加Options -Indexes:
<Directory /var/www/html>
Options -Indexes +FollowSymLinks # 禁止目录列表,允许符号链接跟随
AllowOverride All
Require all granted
</Directory>
sudo systemctl restart apache2
配置访问控制与身份验证
/admin目录:sudo nano /etc/apache2/sites-available/yourdomain.conf
添加以下内容:
<Directory /var/www/html/admin>
Require ip 192.168.1.100 # 仅允许指定IP
# Require not ip 10.0.0.0/8 # 示例:禁止某个IP段(黑名单)
</Directory>
sudo htpasswd -c /etc/apache2/.htpasswd admin # 创建文件并添加用户admin
# 再次运行(不带-c)可添加更多用户:sudo htpasswd /etc/apache2/.htpasswd user2
然后配置目录访问控制:
<Directory /var/www/html/secure>
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user # 允许密码文件中的所有用户
</Directory>
sudo systemctl restart apache2
启用安全HTTP头
通过mod_headers模块添加安全HTTP头,防范XSS、点击劫持、 MIME类型嗅探等攻击。编辑安全配置文件:
sudo nano /etc/apache2/conf-available/security.conf
添加以下内容:
<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信息泄露
</IfModule>
启用配置并重启Apache:
sudo a2enconf security
sudo systemctl restart apache2
使用Fail2Ban防范暴力破解
Fail2Ban可监控日志文件,自动封禁多次尝试登录失败的IP地址(如SSH、Apache)。安装并配置Fail2Ban:
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak # 备份默认配置
sudo nano /etc/fail2ban/jail.local
修改以下内容(启用Apache和SSH防护):
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3 # 3次失败后封禁
bantime = 600 # 封禁10分钟
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
启动Fail2Ban并设置开机自启:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status # 查看状态(确认Apache和SSH jail已启用)
定期备份配置与日志
定期备份Apache2配置文件和网站数据,防止数据丢失或配置损坏。创建备份脚本(如/usr/local/bin/backup_apache.sh):
#!/bin/bash
BACKUP_DIR="/backup/apache2"
DATE=$(date +%Y%m%d_%H%M%S)
sudo tar -czvf "$BACKUP_DIR/apache2_config_$DATE.tar.gz" /etc/apache2
sudo tar -czvf "$BACKUP_DIR/apache2_logs_$DATE.tar.gz" /var/log/apache2
赋予执行权限并测试:
sudo chmod +x /usr/local/bin/backup_apache.sh
sudo /usr/local/bin/backup_apache.sh # 执行备份
可将脚本添加到cron任务中,实现每日自动备份(如每天凌晨2点):
sudo crontab -e
添加以下内容:
0 2 * * * /usr/local/bin/backup_apache.sh