ubuntu

如何在Ubuntu上强化Apache配置

小樊
46
2025-09-25 20:19:22
栏目: 智能运维

如何在Ubuntu上强化Apache配置

1. 基础安全配置

隐藏敏感信息

修改Apache主配置文件(/etc/apache2/apache2.conf),添加或修改以下指令,隐藏服务器版本、操作系统等敏感信息,降低被针对性攻击的风险:

ServerTokens Prod  # 仅显示“Apache”而非详细版本
ServerSignature Off  # 关闭错误页面中的服务器信息

禁用目录列表

防止未配置索引文件的目录被直接浏览,避免泄露网站文件结构。在配置文件或虚拟主机文件中添加:

<Directory /var/www/html>
    Options -Indexes  # 禁用目录列表
</Directory>

禁用不必要的模块

通过apache2ctl -M查看已启用的模块,禁用不需要的模块(如php7.x_modulestatus_module等),减少攻击面:

sudo a2dismod php7.x_module status_module  # 替换为实际模块名
sudo systemctl restart apache2

2. 强化访问控制

配置防火墙

使用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

IP白名单/黑名单

通过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>

3. 加密通信(SSL/TLS)

安装SSL模块与证书

启用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虚拟主机中,无需手动修改配置文件。

配置安全HTTP头

通过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

4. 安装安全模块

mod_security(Web应用防火墙)

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/暴力破解)

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

5. 性能与稳定性优化

调整MPM模块参数

根据服务器硬件资源(内存、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"

6. 日志与监控

配置详细日志

确保Apache日志记录足够的信息,便于排查问题和检测攻击:

ErrorLog ${APACHE_LOG_DIR}/error.log  # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/access.log combined  # 访问日志格式(combined包含IP、URL、状态码等)
LogLevel warn  # 日志级别(warn及以上级别记录关键信息)

定期审计与监控

使用logwatch工具定期分析日志,监控异常请求;通过tophtop等工具监控服务器资源使用情况:

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

7. 定期维护

更新系统与软件包

定期更新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服务器的安全性、性能和稳定性。需根据实际业务需求调整配置参数(如MaxRequestWorkersDOSBlockingPeriod等),并定期复查配置的有效性。

0
看了该问题的人还看了