如何在Ubuntu上强化Apache配置
修改Apache主配置文件(/etc/apache2/apache2.conf
),添加或修改以下指令,隐藏服务器版本、操作系统等敏感信息,降低被针对性攻击的风险:
ServerTokens Prod # 仅显示“Apache”而非详细版本
ServerSignature Off # 关闭错误页面中的服务器信息
防止未配置索引文件的目录被直接浏览,避免泄露网站文件结构。在配置文件或虚拟主机文件中添加:
<Directory /var/www/html>
Options -Indexes # 禁用目录列表
</Directory>
通过apache2ctl -M
查看已启用的模块,禁用不需要的模块(如php7.x_module
、status_module
等),减少攻击面:
sudo a2dismod php7.x_module status_module # 替换为实际模块名
sudo systemctl restart apache2
使用ufw
(Uncomplicated Firewall)限制访问,仅允许HTTP(80端口)、HTTPS(443端口)流量:
sudo ufw allow 'Apache Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙
对/admin
、/config
等敏感目录设置认证,仅允许授权用户访问:
<Directory /var/www/html/admin>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
# 创建密码文件(首次添加用户需用-c参数)
sudo htpasswd -c /etc/apache2/.htpasswd username
通过Require ip
指令限制特定IP段的访问,例如仅允许公司IP访问后台:
<Directory /var/www/html/admin>
Require ip 192.168.1.0/24 # 允许的IP段
Require not ip 10.0.0.1 # 禁止的IP
</Directory>
启用mod_ssl
模块并安装Let’s Encrypt免费证书(替换yourdomain.com
为实际域名):
sudo apt install libapache2-mod-ssl certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
证书会自动配置到Apache虚拟主机中,无需手动修改配置文件。
通过mod_headers
模块添加安全头,防范XSS、点击劫持等攻击:
<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
mod_security是一个实时请求过滤引擎,可防范SQL注入、跨站脚本(XSS)等攻击。安装并配置:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
# 启用OWASP CRS(通用规则集,增强防护)
sudo a2enconf crs-setup
sudo systemctl restart apache2
mod_evasive可检测并阻止高频恶意请求,例如DDoS或暴力破解登录:
sudo apt install libapache2-mod-evasive
sudo nano /etc/apache2/mods-enabled/evasive.conf
# 修改以下参数(根据服务器性能调整)
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2 # 1秒内同一页面超过2次请求视为攻击
DOSSiteCount 50 # 1秒内同一站点超过50次请求视为攻击
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10 # 攻击IP将被封锁10秒
</IfModule>
sudo systemctl restart apache2
根据服务器硬件资源(内存、CPU)调整event
模块(推荐用于生产环境)的参数,避免资源耗尽:
<IfModule mpm_event_module>
StartServers 2 # 启动时的进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 单个进程的最大线程数
ThreadsPerChild 25 # 每个子进程创建的线程数
MaxRequestWorkers 150 # 最大并发请求数(根据内存调整,每进程约消耗10MB内存)
MaxConnectionsPerChild 1000 # 每个子进程处理的最大请求数(防止内存泄漏)
</IfModule>
通过mod_deflate
压缩静态资源(HTML、CSS、JS),减少传输体积;通过mod_cache
缓存内容,提升响应速度:
# 启用压缩
LoadModule deflate_module modules/mod_deflate.so
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript
# 启用缓存
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
CacheEnable disk /
CacheRoot "/var/cache/apache2"
确保Apache日志记录足够的信息,便于排查问题和检测攻击:
ErrorLog ${APACHE_LOG_DIR}/error.log # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/access.log combined # 访问日志格式(combined包含IP、URL、状态码等)
LogLevel warn # 日志级别(warn及以上级别记录关键信息)
使用logwatch
工具定期分析日志,监控异常请求;通过top
、htop
等工具监控服务器资源使用情况:
sudo apt install logwatch
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
# 每天发送日志报告到邮箱(修改MailTo)
sudo logwatch --output mail --mailto your@email.com --detail high
定期更新Ubuntu系统和Apache相关软件包,修补已知安全漏洞:
sudo apt update && sudo apt upgrade -y
定期备份Apache配置文件和网站数据,防止数据丢失:
sudo tar -czvf /backup/apache_backup_$(date +%Y%m%d).tar.gz /etc/apache2 /var/www/html
通过以上步骤,可显著提升Ubuntu上Apache服务器的安全性、性能和稳定性。需根据实际业务需求调整配置参数(如MaxRequestWorkers
、DOSBlockingPeriod
等),并定期复查配置的有效性。