# SSH连接保护指南 ## 🛡️ 保护措施总览 本指南提供了多层保护措施,确保恶意程序无法修改或阻止SSH连接。 ## 📋 已实施的保护措施 ### 1. 文件系统级保护 #### SSH配置文件不可变标志(immutable) - **文件**: `/etc/ssh/sshd_config` - **保护**: 使用 `chattr +i` 设置不可变标志 - **效果**: 即使root用户也无法直接修改文件 - **验证**: `lsattr /etc/ssh/sshd_config` 应显示 `i` 标志 #### 文件权限保护 - **目录权限**: `/etc/ssh` - 755 (root:root) - **配置文件权限**: `/etc/ssh/sshd_config` - 600 (root:root) - **效果**: 只有root用户可以读取和修改 ### 2. 配置监控 #### SSH配置监控脚本 - **脚本**: `/usr/local/bin/monitor-ssh-config.sh` - **功能**: - 每5分钟检查SSH配置文件是否被修改 - 通过MD5校验检测文件变化 - 自动恢复被修改的配置文件 - 记录所有修改事件到日志 - **日志**: `/var/log/ssh-config-monitor.log` #### 配置备份 - **备份目录**: `/root/ssh_backups/` - **备份策略**: 每次修改前自动备份 - **保留数量**: 最近10个备份 ### 3. 服务保护 #### SSH服务保护脚本 - **脚本**: `/usr/local/bin/protect-ssh-service.sh` - **功能**: - 每2分钟检查SSH服务是否运行 - 如果服务停止,自动重启 - 记录所有服务状态变化 - **日志**: `/var/log/ssh-service-protect.log` #### 服务自动启动 - **配置**: `systemctl enable sshd` - **效果**: 系统启动时自动启动SSH服务 ### 4. 定时任务 #### 监控任务 ```cron */5 * * * * /usr/local/bin/monitor-ssh-config.sh ``` - **频率**: 每5分钟 - **功能**: 监控SSH配置文件 #### 服务保护任务 ```cron */2 * * * * /usr/local/bin/protect-ssh-service.sh ``` - **频率**: 每2分钟 - **功能**: 确保SSH服务运行 ## 🔧 使用方法 ### 安装保护措施 ```bash # 上传脚本到服务器 scp scripts/protect-ssh.sh root@your-server:/root/ # 在服务器上执行 ssh root@your-server chmod +x /root/protect-ssh.sh /root/protect-ssh.sh ``` ### 修改SSH配置(需要时) 如果需要修改SSH配置,请按以下步骤操作: ```bash # 1. 临时移除不可变标志 chattr -i /etc/ssh/sshd_config # 2. 修改配置文件 nano /etc/ssh/sshd_config # 或 vi /etc/ssh/sshd_config # 3. 验证配置语法 sshd -t # 4. 重新设置不可变标志 chattr +i /etc/ssh/sshd_config # 5. 重启SSH服务 systemctl restart sshd ``` ### 查看监控日志 ```bash # SSH配置监控日志 tail -f /var/log/ssh-config-monitor.log # SSH服务保护日志 tail -f /var/log/ssh-service-protect.log # 查看所有SSH相关日志 journalctl -u sshd -f ``` ### 验证保护状态 ```bash # 检查不可变标志 lsattr /etc/ssh/sshd_config # 检查SSH服务状态 systemctl status sshd # 检查定时任务 crontab -l | grep ssh # 检查监控脚本 ls -la /usr/local/bin/*ssh*.sh ``` ## 🚨 应急处理 ### SSH服务无法启动 如果SSH服务无法启动,请检查: ```bash # 1. 检查SSH配置语法 sshd -t # 2. 查看SSH服务日志 journalctl -u sshd -n 50 # 3. 检查端口是否被占用 ss -tlnp | grep 22 # 4. 检查防火墙规则 iptables -L -n | grep 22 ``` ### 配置文件被修改 如果检测到配置文件被修改: ```bash # 1. 查看监控日志 cat /var/log/ssh-config-monitor.log # 2. 手动恢复配置 cp /root/ssh_backups/sshd_config.* /etc/ssh/sshd_config # 3. 重新设置保护 chattr +i /etc/ssh/sshd_config systemctl restart sshd ``` ### 无法通过SSH连接 如果无法通过SSH连接: 1. **检查网络连接** ```bash ping your-server-ip ``` 2. **检查SSH服务状态**(通过其他方式,如控制台) ```bash systemctl status sshd ``` 3. **检查防火墙** ```bash iptables -L -n | grep 22 firewall-cmd --list-all # 如果使用firewalld ``` 4. **检查SSH配置** ```bash sshd -t cat /etc/ssh/sshd_config | grep -E 'Port|PermitRootLogin|PasswordAuthentication' ``` ## 📊 监控和告警 ### CrowdSec监控 CrowdSec已配置监控SSH相关活动: - SSH暴力破解检测 - 异常登录尝试 - 可疑SSH活动 查看CrowdSec警报: ```bash cscli alerts list | grep ssh ``` ### 系统日志 SSH相关系统日志位置: - `/var/log/auth.log` (Ubuntu/Debian) - `/var/log/secure` (CentOS/RHEL) - `journalctl -u sshd` (systemd) ## ⚠️ 注意事项 1. **不可变标志的限制** - 设置不可变标志后,即使是root用户也无法直接修改文件 - 必须先移除标志才能修改配置 2. **备份的重要性** - 定期检查备份目录 - 确保备份文件完整 3. **监控脚本的维护** - 定期检查监控日志 - 确保定时任务正常运行 4. **服务重启的影响** - SSH服务重启会断开现有连接 - 建议在维护窗口进行配置修改 ## 🔒 安全建议 1. **使用SSH密钥认证** - 禁用密码认证(如果可能) - 使用强密码(如果必须使用密码) 2. **限制SSH访问** - 使用防火墙限制SSH访问IP - 使用fail2ban防止暴力破解 3. **定期审计** - 定期检查SSH配置 - 审查SSH访问日志 - 检查异常登录 4. **保持更新** - 定期更新SSH软件包 - 应用安全补丁 ## 📝 检查清单 - [x] SSH配置文件已设置不可变标志 - [x] SSH目录和文件权限已正确设置 - [x] SSH配置已备份 - [x] SSH配置监控脚本已安装并运行 - [x] SSH服务保护脚本已安装并运行 - [x] 定时任务已设置 - [x] SSH服务已设置为开机自启 - [x] CrowdSec SSH监控已启用 - [x] fail2ban SSH保护已启用 ## 🎯 总结 通过多层保护措施,SSH连接现在受到以下保护: 1. **文件系统级保护**: 配置文件不可变,防止直接修改 2. **配置监控**: 自动检测和恢复配置修改 3. **服务保护**: 自动确保SSH服务运行 4. **日志记录**: 完整记录所有安全事件 5. **外部监控**: CrowdSec和fail2ban提供额外保护 这些措施协同工作,确保恶意程序无法修改或阻止SSH连接。