1. 定期更新系統與Apache2
保持系統和Apache2及其模塊的最新狀態是安全基礎,能及時修復已知漏洞。執行以下命令更新系統及軟件包:
sudo apt update && sudo apt upgrade -y
2. 配置防火墻限制訪問
使用ufw
(Uncomplicated Firewall)僅允許必要的HTTP(80端口)和HTTPS(443端口)流量,阻斷其他非法訪問:
sudo apt install ufw -y
sudo ufw enable
sudo ufw allow 'Apache Full' # 允許HTTP和HTTPS
sudo ufw deny 22/tcp # 示例:若無需SSH可直接禁用(或修改SSH端口)
3. 禁用不必要的Apache模塊
Apache默認加載的模塊可能增加攻擊面,禁用不需要的模塊(如autoindex
、rewrite
、headers
等):
sudo a2dismod autoindex rewrite headers # 禁用目錄列表、URL重寫、頭部注入等風險模塊
sudo systemctl restart apache2
4. 隱藏Apache版本信息與禁用目錄遍歷
修改Apache配置文件,隱藏版本號和服務器信息,防止攻擊者利用版本漏洞針對性攻擊;同時禁用目錄自動列表:
sudo nano /etc/apache2/conf-enabled/security.conf
添加或修改以下內容:
ServerTokens Prod # 僅顯示“Apache”而非版本號
ServerSignature Off # 關閉錯誤頁面中的服務器信息
<Directory /var/www/html>
Options -Indexes # 禁止目錄自動列表
</Directory>
保存后重啟Apache:
sudo systemctl restart apache2
5. 配置SSL/TLS加密(強制HTTPS)
使用Let’s Encrypt獲取免費SSL證書,配置Apache強制HTTP重定向至HTTPS,確保數據傳輸加密:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com # 替換為實際域名
自動配置完成后,驗證/etc/apache2/sites-available/default-ssl.conf
中的證書路徑是否正確(指向Let’s Encrypt的fullchain.pem
和privkey.pem
),并啟用SSL站點:
sudo a2ensite default-ssl
sudo systemctl restart apache2
強制HTTP重定向至HTTPS(編輯000-default.conf
):
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
6. 配置安全頭增強防護
通過mod_headers
模塊添加安全頭,防范XSS、點擊劫持、MIME類型嗅探等攻擊:
sudo nano /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信息
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'none';" # 限制資源加載來源
</IfModule>
啟用配置并重啟Apache:
sudo a2enconf security
sudo systemctl restart apache2
7. 嚴格限制目錄訪問權限
確保網站目錄權限正確,避免敏感文件泄露:
sudo chown -R www-data:www-data /var/www/html # 將所有權賦予Apache用戶
sudo find /var/www/html -type d -exec chmod 755 {} \; # 目錄權限設為755
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件權限設為644
若需更嚴格的訪問控制(如限制特定IP訪問某目錄),可在虛擬主機配置中添加:
<Directory /var/www/html/admin>
Order deny,allow
Deny from all
Allow from 192.168.1.100 # 僅允許指定IP訪問
</Directory>
8. 啟用日志監控與定期審計
確保Apache日志功能開啟,定期檢查訪問日志(access.log
)和錯誤日志(error.log
),及時發現異常請求:
sudo tail -f /var/log/apache2/access.log # 實時查看訪問日志
sudo tail -f /var/log/apache2/error.log # 實時查看錯誤日志
可使用logrotate
工具自動歸檔日志,避免日志文件過大:
sudo nano /etc/logrotate.d/apache2
確保配置中包含以下內容(默認已存在):
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 >/dev/null 2>&1 || true
endscript
}
9. 安裝與配置fail2ban防暴力破解
使用fail2ban
監控Apache日志,自動封禁多次嘗試登錄失敗的IP地址:
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 備份默認配置
sudo nano /etc/fail2ban/jail.local
啟用Apache日志監控(取消注釋或添加以下內容):
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 600 # 封禁10分鐘
重啟fail2ban
服務:
sudo systemctl restart fail2ban
10. 最小化安裝與定期備份
遵循最小化安裝原則,卸載不必要的軟件和服務;定期備份網站數據(如/var/www/html
)和配置文件(如/etc/apache2
),防止數據丟失:
# 備份網站數據
sudo tar -czvf /backup/www_$(date +%F).tar.gz /var/www/html
# 備份Apache配置
sudo tar -czvf /backup/apache2_$(date +%F).tar.gz /etc/apache2