Ubuntu Apache安全设置技巧
小樊
33
2025-12-19 00:53:37
Ubuntu 上 Apache 的安全设置要点
一 基础加固
- 保持系统与应用为最新:执行 sudo apt update && sudo apt upgrade,及时修补漏洞。
- 隐藏版本与标识:在 /etc/apache2/apache2.conf 或对应虚拟主机中加入
ServerTokens Prod
ServerSignature Off
减少攻击者获取服务器细节的机会。
- 禁用目录浏览:在站点或全局 中将 Options -Indexes(或移除 Indexes),防止目录结构泄露。
- 以最小权限运行:确认进程以 www-data 运行(查看 ps aux | grep apache2),避免以 root 启动。
- 自定义错误页:使用 ErrorDocument 403/404/500 /custom.html,避免默认错误页泄露路径、框架等信息。
二 传输加密与端口管理
- 全站 HTTPS:优先使用 Let’s Encrypt 自动签发与部署证书
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
自动创建 HTTP→HTTPS 跳转与证书续期。
- 自签名证书(测试/内网):
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 :443> 中启用:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
并启用站点后重启:sudo a2ensite default-ssl.conf && sudo systemctl restart apache2。
- 防火墙放行:
sudo ufw allow 80,443/tcp
sudo ufw enable
- 端口变更(可选):编辑 /etc/apache2/ports.conf 将 Listen 80/443 改为自定义端口(如 5000/4443),并同步在防火墙放行对应端口。
三 访问控制与请求限制
- 基于 IP 的目录限制:在目标 中使用 Require all denied/granted 或旧语法 Order/Allow/Deny(Apache 2.4 推荐前者)。示例:
<Directory “/var/www/secret”>
Require local
# 或仅允许内网段
# Require ip 192.168.1.0/24
- 禁止通过 IP 直接访问:为默认站点或对应 VirtualHost 设置 ServerName <服务器IP> 并加入 Require all denied,避免 IP 直连命中默认站点。
- 基于用户密码的访问控制:
sudo htpasswd -c /etc/apache2/.htpasswd username
在 .htaccess 或 中加入:
AuthType Basic
AuthName “Restricted Area”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
- 限制上传目录执行权限:
<Directory “/var/www/html/upload”>
<FilesMatch “.(php|php3|phtml)$”>
Require all denied
- 仅允许必要 HTTP 方法(如仅 GET/POST):在 中使用 LimitExcept GET POST 限制危险方法(如 PUT/DELETE)。
四 模块与防护
- 精简模块:禁用不需要的模块(如 a2dismod status 等),减少攻击面。
- Web 应用防火墙:启用 mod_security2 进行请求过滤(SQLi、XSS 等),示例:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2
按业务逐步调优规则集。
- 抗 DoS/Slowloris:启用 mod_evasive 与 mod_qos。示例(evasive):
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”
按需启用 mod_qos 并调整并发/速率阈值。
五 日志审计与运维
- 启用与规范日志:确认 ErrorLog ${APACHE_LOG_DIR}/error.log、CustomLog ${APACHE_LOG_DIR}/access.log combined 等配置,日志默认位于 /var/log/apache2/。
- 实时监控与报表:
tail -f /var/log/apache2/access.log
sudo apt install logwatch
配置并按日生成审计报告。
- 变更与重启:每次修改配置后先执行 sudo apache2ctl configtest,确认无语法错误再执行 sudo systemctl restart apache2。
- 持续维护:关注 Apache 安全公告与系统更新,定期备份站点与证书。