Apache2在Ubuntu上如何安全配置
系统更新与补丁管理
定期更新系统和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>
- 保存文件并重启Apache:
sudo systemctl restart apache2
配置访问控制与身份验证
- IP白名单/黑名单:限制特定IP访问敏感目录(如后台、上传目录)。例如,仅允许公司IP(192.168.1.100)访问
/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>
- 保存文件并重启Apache:
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
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Apache2在Ubuntu上如何安全配置
本文地址: https://pptw.com/jishu/736147.html
