当前位置: 首页 > news >正文

服务器ssh连接防护指南

文章目录

      • **一、核心策略:减少公网暴露面**
        • 1. **强制使用非标准端口**
        • 2. **配置服务器防火墙(ufw)**
      • **二、增强防护:服务器端深度防御**
        • 1. **配置fail2ban自动封禁攻击源**
        • 2. **使用TCP wrapper限制访问**
      • **三、优化SSH配置:降低被扫描风险**
        • 1. **禁用不必要的认证方式**
        • 2. **使用强加密算法**
      • **四、监控与响应:实时感知威胁**
        • 1. **配置实时日志监控**
        • 2. **设置异常流量告警**
      • **五、高级防护:在服务器端模拟网关过滤**
        • 1. **使用nftables配置连接速率限制**
        • 2. **部署轻量级IPS(入侵防御系统)**
      • **六、实施步骤建议**
      • **效果验证**

在仅能操作服务器端的情况下,虽然无法直接修改网关配置,但仍可通过以下策略缓解外网攻击导致的网关限流问题:

一、核心策略:减少公网暴露面

1. 强制使用非标准端口

修改SSH配置文件,彻底关闭22端口,改用高位随机端口(如58222):

# 修改配置文件
sudo sed -i 's/^Port 22/Port 58222/' /etc/ssh/sshd_config# 重启服务
sudo systemctl restart sshd
2. 配置服务器防火墙(ufw)

限制SSH端口的访问源,仅允许信任IP连接:

# 允许特定IP访问新端口
sudo ufw allow from 192.168.1.0/24 to any port 58222# 禁止其他IP访问所有SSH相关端口(包括22)
sudo ufw deny 22/tcp
sudo ufw deny 58222/tcp comment "仅允许信任IP"# 启用防火墙
sudo ufw enable

二、增强防护:服务器端深度防御

1. 配置fail2ban自动封禁攻击源

安装并配置fail2ban监控SSH登录尝试,自动封禁恶意IP:

# 安装fail2ban
sudo apt-get install fail2ban# 创建自定义配置
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local# 编辑jail.local,添加/修改以下内容:
[sshd]
enabled = true
port = 58222  # 使用新端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3  # 3次失败后封禁
bantime = 86400  # 封禁24小时
findtime = 3600  # 1小时内计算失败次数# 重启服务
sudo systemctl restart fail2ban
2. 使用TCP wrapper限制访问

通过hosts.allowhosts.deny进一步限制SSH服务:

# 编辑/etc/hosts.allow,仅允许信任IP
sshd: 192.168.1.0/24 10.0.0.0/8 : ALLOW# 编辑/etc/hosts.deny,拒绝其他所有IP
sshd: ALL : DENY

三、优化SSH配置:降低被扫描风险

1. 禁用不必要的认证方式
# 编辑/etc/ssh/sshd_config
PasswordAuthentication no  # 禁用密码登录
PermitRootLogin no  # 禁止root直接登录
MaxAuthTries 2  # 最多2次认证尝试
ClientAliveInterval 300  # 5分钟无活动则断开
ClientAliveCountMax 0  # 不允许无活动连接
2. 使用强加密算法
# 在sshd_config中添加
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

四、监控与响应:实时感知威胁

1. 配置实时日志监控

使用journalctl监控SSH登录尝试:

# 实时监控SSH登录日志
journalctl -fu sshd# 创建快捷脚本(例如~/check_ssh_attacks.sh)
#!/bin/bash
echo "最近10次登录尝试:"
journalctl -u sshd -n 10echo "尝试次数最多的IP:"
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
2. 设置异常流量告警

安装vnstat监控网络流量,发现异常时通知管理员:

# 安装vnstat
sudo apt-get install vnstat# 查看实时流量
vnstat -l -i eth0# 设置告警阈值(示例:超过100Mbps发送邮件)
if [ $(vnstat -i eth0 -tr 1 | grep "current rate" | awk '{print $4}') -gt 100 ]; thenecho "流量异常!" | mail -s "SSH端口流量告警" admin@example.com
fi

五、高级防护:在服务器端模拟网关过滤

1. 使用nftables配置连接速率限制
# 添加规则限制新连接速率(每秒不超过1个)
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
sudo nft add rule inet filter input tcp dport 58222 counter limit rate 1/second accept
sudo nft add rule inet filter input tcp dport 58222 counter drop
2. 部署轻量级IPS(入侵防御系统)

使用snort监控SSH流量,检测暴力破解:

# 安装snort
sudo apt-get install snort# 配置规则(/etc/snort/rules/local.rules)
alert tcp any any -> $HOME_NET 58222 (msg:"SSH暴力破解"; flow:to_server,established; content:"SSH-2.0-"; depth:10; threshold: type limit, track by_src, count 5, seconds 60; sid:1000001; rev:1;)# 启动snort监控模式
sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

六、实施步骤建议

  1. 紧急处理(1小时内):

    • 修改SSH端口为58222并重启服务
    • 配置ufw仅允许信任IP访问新端口
  2. 基础防护(4小时内):

    • 安装并配置fail2ban
    • 优化SSH配置(禁用密码登录、限制认证尝试)
  3. 深度防御(24小时内):

    • 配置nftables速率限制
    • 部署snort轻量级IPS
  4. 监控响应(48小时内):

    • 设置流量告警脚本
    • 建立定期审计日志的流程

效果验证

修改端口并配置防护后,使用以下方法验证:

  1. 从信任IP连接
    ssh -p 58222 user@server_ip
    
  2. 从非信任IP测试
    # 应被拒绝连接
    ssh -p 58222 user@server_ip
    
  3. 检查防火墙状态
    sudo ufw status verbose
    
  4. 查看fail2ban封禁记录
    sudo fail2ban-client status sshd
    

通过这些措施,即使无法控制网关,也能显著减少SSH服务的暴露风险,降低被网关限流的概率。

http://www.dtcms.com/a/276321.html

相关文章:

  • 软件测试基础1-软件测试需求分析
  • Python技巧记录
  • 详细理解向量叉积
  • CVPR2025 Mamba系列
  • 内容总结I
  • 我的LeetCode刷题笔记——树(2)
  • 带货视频评论洞察 Baseline 学习笔记 (Datawhale Al夏令营)
  • [动态规划]1900. 最佳运动员的比拼回合
  • Matplotlib 模块入门
  • 非欧几里得空间图卷积算子设计:突破几何限制的图神经网络新范式
  • Linux系统中部署Redis详解
  • python作业2
  • 【时间之外】AI在农机配件设计场景的应用
  • 【详解ProTable源码】高级筛选栏如何实现一行五列
  • Elasticsearch 的 `modules` 目录
  • AMD 锐龙 AI MAX+ 395 处理器与端侧 AI 部署的行业实践
  • 【华为OD】MVP争夺战2(C++、Java、Python)
  • 拼多多电商运营技巧---价格体系设置
  • 数据的计算与格式化
  • [Python] Flask 多线程绘图时报错“main thread is not in main loop”的解决方案
  • SuperClaude命令参考手册:AI编程革命中的20个核心指令详解
  • JavaEE多线程——锁策略 CAS synchronized优化
  • UI前端大数据可视化新探索:如何利用色彩心理学提升数据传达效果?
  • [vroom] 启发式算法(路径评估) | 局部搜索优化引擎 | 解决方案输出解析
  • 单向链表反转 如何实现
  • 蓝牙BT UUID的含义以及使用方法案例说明
  • 第十八天,7月12日,八股
  • 【MySQL笔记】事务的ACID特性与隔离级别
  • 动态规划基本操作
  • AutoGen框架官方文档梳理-完整学习指南