确保系统和Apache2处于最新状态,及时修补已知安全漏洞:
sudo apt update && sudo apt upgrade -y
sudo apt install apache2
使用UFW限制访问,仅允许HTTP(80)和HTTPS(443)流量:
sudo ufw allow 'Apache Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙
减少攻击面,禁用不需要的模块(如mod_php、autoindex):
sudo a2dismod php7.x # 根据实际PHP版本调整(如php8.1)
sudo a2dismod autoindex # 禁用目录自动列表
sudo systemctl restart apache2
修改配置文件,防止攻击者通过版本信息针对性攻击:
# 编辑安全配置文件
sudo nano /etc/apache2/conf-enabled/security.conf
添加/修改以下内容:
ServerTokens Prod # 仅显示"Apache",隐藏版本号
ServerSignature Off # 禁用错误页面中的服务器签名
禁用目录列表(针对/var/www/html):
<Directory /var/www/html>
Options -Indexes # 禁止目录自动列表
AllowOverride None
Require all granted
</Directory>
使用Certbot安装免费SSL证书,强制HTTPS访问:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com # 替换为你的域名
证书自动续期(Certbot会自动配置cron任务)。
通过mod_headers模块添加安全头,防范XSS、点击劫持等攻击:
# 启用headers模块
sudo a2enmod headers
编辑安全配置文件:
sudo nano /etc/apache2/conf-enabled/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>
ModSecurity是一个Web应用防火墙(WAF),可防范SQL注入、XSS等攻击:
sudo apt install libapache2-mod-security2 -y
sudo a2enmod security2
配置ModSecurity(使用OWASP CRS规则集):
# 启用规则集
sudo a2enconf crs-setup
编辑ModSecurity主配置文件:
sudo nano /etc/apache2/conf-available/security2.conf
修改以下参数:
SecRuleEngine On # 开启规则引擎(DetectionOnly为检测模式,不影响业务)
SecRequestBodyAccess On # 允许检查请求体
SecResponseBodyAccess On # 允许检查响应体
SecAuditLog /var/log/modsec_audit.log # 审计日志路径
SecAuditLogParts ABIJDEFHZ # 记录请求/响应的关键部分
SecDataDir /var/lib/modsecurity # 临时数据目录
mod_evasive可检测并限制DDoS攻击(如高频请求):
sudo apt install libapache2-mod-evasive -y
配置防DDoS参数:
sudo nano /etc/apache2/mods-enabled/evasive.conf
修改以下内容(根据服务器性能调整):
<IfModule mod_evasive20.c>
DOSHashTableSize 3097 # 哈希表大小(建议3097-4097)
DOSPageCount 2 # 单IP单页面1秒内超过2次请求则触发
DOSSiteCount 50 # 单IP全站1秒内超过50次请求则触发
DOSPageInterval 1 # 页面请求检测间隔(秒)
DOSSiteInterval 1 # 全站请求检测间隔(秒)
DOSBlockingPeriod 10 # 触发后封锁IP时间(秒)
</IfModule>
限制敏感目录的访问权限(如/admin):
# 编辑虚拟主机配置文件(如000-default.conf)
sudo nano /etc/apache2/sites-available/000-default.conf
添加以下内容(针对/var/www/html/admin目录):
<Directory /var/www/html/admin>
AuthType Basic # 基本认证
AuthName "Restricted Area" # 认证提示信息
AuthUserFile /etc/apache2/.htpasswd # 密码文件路径
Require valid-user # 允许认证用户访问
</Directory>
创建密码文件并添加用户:
sudo htpasswd -c /etc/apache2/.htpasswd admin # 创建用户admin(首次使用-c,后续添加无需-c)
确保日志记录完整,便于排查安全事件:
# 编辑Apache主配置文件
sudo nano /etc/apache2/apache2.conf
确认以下配置(默认已开启):
LogLevel warn # 日志级别(warn及以上记录错误、警告)
ErrorLog ${APACHE_LOG_DIR}/error.log # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/access.log combined # 访问日志(combined格式包含IP、URL、状态码)
备份Apache配置文件和网站数据,防止数据丢失:
# 备份配置文件
sudo tar -czvf /backup/apache2_config_$(date +%F).tar.gz /etc/apache2
# 备份网站数据(假设网站根目录为/var/www/html)
sudo tar -czvf /backup/html_$(date +%F).tar.gz /var/www/html
完成以上配置后,重启Apache使更改生效:
sudo systemctl restart apache2