会话劫持(Session Hijacking)是一种常见的安全威胁,攻击者通过窃取用户的会话ID来冒充合法用户。以下是保护Linux服务器上Web接口免受此类攻击的多层次防御策略:
# 在Apache中启用HTTPS
sudo a2enmod ssl
sudo systemctl restart apache2
# 在Nginx中配置HTTPS
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他配置...
}
// PHP示例 - 安全Cookie设置
session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'domain' => 'yourdomain.com',
'secure' => true, // 仅HTTPS
'httponly' => true, // 防止JS访问
'samesite' => 'Strict' // 防止CSRF
]);
// 登录时重新生成会话ID
session_regenerate_id(true);
// 设置会话过期时间(30分钟)
ini_set('session.gc_maxlifetime', 1800);
session_set_cookie_params(1800);
// 绑定会话到IP和User-Agent
$current_fingerprint = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);
if (!isset($_SESSION['fingerprint'])) {
$_SESSION['fingerprint'] = $current_fingerprint;
} elseif ($_SESSION['fingerprint'] != $current_fingerprint) {
session_destroy();
die("Session security violation detected!");
}
# 在Ubuntu上安装ModSecurity
sudo apt-get install libapache2-mod-security2
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo systemctl restart apache2
# 安装Fail2Ban
sudo apt-get install fail2ban
# 创建自定义规则保护登录接口
sudo nano /etc/fail2ban/jail.local
添加内容:
[web-auth]
enabled = true
port = http,https
filter = web-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 3600
# 使用UFW限制访问
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# 设置自动安全更新
sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
# 安装并配置Logwatch
sudo apt-get install logwatch
sudo nano /etc/logwatch/conf/logwatch.conf
# 安装OSSEC HIDS
sudo apt-get install ossec-hids-server
# 将会话存储在Redis而非文件系统中
sudo apt-get install redis-server php-redis
php.ini配置:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
# 使用Google Authenticator模块
sudo apt-get install libpam-google-authenticator
# 使用Lynis进行安全审计
sudo apt-get install lynis
sudo lynis audit system
通过实施这些多层次的安全措施,您可以显著降低Web接口遭受会话劫持攻击的风险。记住,安全是一个持续的过程,需要定期审查和更新防护措施。