1. 系统与软件更新
定期更新Ubuntu系统和Apache2及相关软件包,及时修补已知安全漏洞。执行以下命令:
sudo apt update && sudo apt upgrade -y
2. 配置防火墙(UFW)
使用UFW限制访问,仅允许HTTP(80/tcp)、HTTPS(443/tcp)及SSH(默认22/tcp,建议修改为非标准端口)流量:
sudo ufw allow 'Apache Full' # 允许HTTP/HTTPS
sudo ufw allow ssh # 允许SSH(若修改端口需替换为实际端口)
sudo ufw enable # 启用防火墙
sudo ufw status # 验证规则
3. 禁用不必要的Apache模块
通过apache2ctl -M查看已启用模块,禁用无用模块(如autoindex防止目录列表、php7.x若无需PHP),减少攻击面:
sudo a2dismod autoindex # 禁用目录自动列表
sudo a2dismod php7.4 # 示例:禁用PHP7.4模块(根据实际安装版本调整)
sudo systemctl restart apache2
4. 启用SSL/TLS加密
使用Let’s Encrypt获取免费证书,配置HTTPS加密通信。安装Certbot并自动配置:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com # 替换为实际域名
证书自动续期(Certbot默认配置),无需手动操作。
5. 配置HTTP安全头
通过mod_headers模块添加安全头,防范XSS、点击劫持等攻击。编辑/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>
sudo a2enconf security # 启用配置
sudo systemctl restart apache2
6. 隐藏Apache版本与敏感信息
修改Apache配置文件,隐藏版本号和操作系统信息,降低针对性攻击风险:
sudo sed -i 's/ServerTokens OS/ServerTokens Prod/g' /etc/apache2/apache2.conf
sudo sed -i 's/ServerSignature On/ServerSignature Off/g' /etc/apache2/apache2.conf
sudo systemctl restart apache2
7. 限制目录访问权限
禁用目录自动列表,设置严格的访问控制,仅允许授权用户访问敏感目录(如/admin):
<Directory /var/www/html>
Options -Indexes FollowSymLinks # 禁止目录列表
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html/admin>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
创建.htpasswd文件并添加用户:
sudo htpasswd -c /etc/apache2/.htpasswd admin # 替换为实际用户名
8. 启用安全模块
mod_evasive:防范DDoS、Slowloris攻击,安装并配置:
sudo apt install libapache2-mod-evasive -y
sudo mkdir -p /var/log/apache2/evasive
sudo chown -R www-data:root /var/log/apache2/evasive
编辑/etc/apache2/mods-enabled/evasive.conf,添加以下参数:
DOSHashTableSize 2048
DOSPageCount 20 # 1秒内同一IP访问同一页面超过20次拦截
DOSPageInterval 1.0
DOSSiteCount 300 # 1秒内同一IP访问整个站点超过300次拦截
DOSSiteInterval 1.0
DOSBlockingPeriod 10 # 拦截10秒
mod_security:实时检测并阻止SQL注入、XSS等攻击,安装配置:
sudo apt install libapache2-mod-security2
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/g' /etc/modsecurity/modsecurity.conf
sudo systemctl restart apache2
9. 使用Fail2Ban防范暴力破解
安装Fail2Ban监控日志,自动封禁频繁尝试登录的IP地址:
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak # 备份默认配置
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
编辑/etc/fail2ban/jail.local,启用Apache相关规则:
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 600
10. 定期备份与监控
tar命令示例:sudo tar -czvf /backup/apache2_backup_$(date +%Y%m%d).tar.gz /etc/apache2 /var/www/html
logwatch或tail命令实时查看日志,及时发现异常:sudo apt install logwatch -y
sudo logwatch --service apache2 --output mail # 通过邮件发送日志摘要
sudo tail -f /var/log/apache2/access.log /var/log/apache2/error.log
通过以上步骤,可显著提升Ubuntu上Apache2服务器的安全性,防范常见攻击(如DDoS、SQL注入、目录遍历等)。需定期检查和更新配置,适应新的安全威胁。