Ubuntu下Apache2安全设置指南
定期更新系统和Apache2相关软件包,修补已知安全漏洞。执行以下命令:
sudo apt update && sudo apt upgrade
这一步能确保服务器运行最新的安全补丁,降低被已知漏洞攻击的风险。
使用UFW(Uncomplicated Firewall)限制对Apache2的访问,仅允许必要的HTTP(80端口)和HTTPS(443端口)流量:
sudo apt install ufw # 安装UFW(若未安装)
sudo ufw allow 'Apache Full' # 允许Apache Full(包含HTTP和HTTPS)
sudo ufw enable # 启用防火墙
通过防火墙规则,能有效阻挡未经授权的网络访问,减少攻击面。
修改Apache配置文件,隐藏服务器版本号和操作系统信息,防止攻击者利用这些信息针对性攻击:
编辑/etc/apache2/apache2.conf,添加或修改以下指令:
ServerTokens Prod # 仅显示“Apache”而不显示版本号
ServerSignature Off # 关闭服务器响应中的签名信息(如版本号、服务器名)
重启Apache使配置生效:sudo systemctl restart apache2。
禁用不使用的模块,减少潜在的攻击入口。首先查看已启用的模块:
apache2ctl -M
然后禁用不需要的模块(如autoindex、php7.x等,根据实际需求调整):
sudo a2dismod autoindex # 禁用目录列表模块
sudo a2dismod php7.4 # 示例:禁用PHP模块(若未使用PHP)
禁用后重启Apache:sudo systemctl restart apache2。
禁用目录自动列表功能,避免用户直接查看网站根目录下的文件列表。编辑Apache站点配置文件(如/etc/apache2/sites-available/000-default.conf),找到<Directory /var/www/html>部分,修改为:
<Directory /var/www/html>
Options -Indexes +FollowSymLinks # 禁用Indexes(目录列表)
AllowOverride None
Require all granted
</Directory>
重启Apache使配置生效。
使用Let’s Encrypt获取免费SSL证书,配置Apache2支持HTTPS,加密客户端与服务器之间的通信:
sudo apt install certbot python3-certbot-apache # 安装Certbot和Apache插件
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com # 替换为你的域名
Certbot会自动修改Apache配置文件,启用HTTPS并重定向HTTP到HTTPS(可选)。验证SSL配置:访问https://yourdomain.com,确认浏览器地址栏显示锁图标。
通过设置HTTP响应头,增强浏览器端的安全防护,防止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,然后重启Apache。
安装并配置mod_security,实时检测和阻止SQL注入、跨站脚本(XSS)等常见Web攻击:
sudo apt install libapache2-mod-security2 # 安装mod_security
sudo a2enmod security2 # 启用模块
编辑/etc/apache2/conf-available/security2.conf,启用OWASP Core Rule Set(CRS):
SecRuleEngine On # 开启规则引擎
Include /etc/apache2/conf-available/crs-setup.conf # 包含CRS配置
重启Apache:sudo systemctl restart apache2。
安装mod_evasive,限制同一IP的频繁请求,防止DoS攻击:
sudo apt install libapache2-mod-evasive # 安装模块
编辑/etc/apache2/mods-enabled/evasive.conf,配置规则:
<IfModule mod_evasive24.c> # 根据模块版本调整(20或24)
DOSHashTableSize 3097
DOSPageCount 2 # 1秒内同一IP的页面请求超过2次则触发
DOSSiteCount 50 # 1秒内同一IP的站点请求超过50次则触发
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10 # 触发后封锁IP 10秒
</IfModule>
重启Apache使配置生效。
对网站敏感目录(如/admin)设置基本认证,仅允许授权用户访问:
sudo htpasswd -c /etc/apache2/.htpasswd username # 创建密码文件(首次使用-c参数)
编辑站点配置文件,添加以下内容:
<Directory /var/www/html/admin>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
重启Apache。
使用Require ip指令限制特定IP访问网站:
<Directory /var/www/html>
Require ip 192.168.1.1 # 仅允许192.168.1.1访问
# Require not ip 192.168.1.100 # 示例:禁止192.168.1.100访问
</Directory>
重启Apache。
确保Apache日志配置正确,便于及时发现异常行为:
编辑/etc/apache2/apache2.conf,确认以下配置:
LogLevel warn # 日志级别(warn及以上级别记录)
ErrorLog ${APACHE_LOG_DIR}/error.log # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/access.log combined # 访问日志格式(combined包含IP、请求等信息)
使用logwatch工具定期分析日志:
sudo apt install logwatch # 安装logwatch
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf # 备份默认配置
sudo logwatch # 查看当日日志摘要
定期检查/var/log/apache2/error.log和/var/log/apache2/access.log,关注异常请求(如大量404错误、频繁POST请求)。
定期备份Apache配置文件和网站数据,防止数据丢失或配置损坏:
sudo tar -czvf /backup/apache2_backup_$(date +%Y%m%d).tar.gz /etc/apache2 # 备份配置文件
sudo tar -czvf /backup/www_backup_$(date +%Y%m%d).tar.gz /var/www/html # 备份网站数据
将备份文件存储到安全位置(如外部存储设备、云存储)。
编辑/etc/apache2/apache2.conf,确保ServerSignature Off和ServerTokens Prod已设置,彻底隐藏服务器版本信息。
若系统支持SELinux或AppArmor,可进一步限制Apache的权限:
sudo aa-enforce /etc/apparmor.d/usr.sbin.apache2 # 强制生效
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
这些措施能有效隔离Apache进程,防止越权访问。
通过以上步骤,可显著提升Ubuntu下Apache2服务器的安全性。需定期检查和更新安全配置,应对新的威胁和漏洞。