SSH 安全加固清单:改掉这几个默认配置就够了

Cold 发布于 2019-12-08 13 次阅读 582 字 预计阅读时间: 3 分钟 运维笔记


上周看服务器日志,一晚上有两万多次 SSH 爆破尝试,来自全球各地的 IP。虽然密码还算复杂,但天天被人这么扫心里发毛,花了一晚上把 SSH 彻底加固了一遍。下面是可以直接照抄的清单。

1. 密钥登录,禁用密码

# 本地生成密钥对(ed25519 比 rsa 更短更安全)
ssh-keygen -t ed25519 -C "cold@laptop"

# 把公钥传到服务器
ssh-copy-id root@服务器IP

确认密钥能登录、且本地私钥有备份之后,再去改 /etc/ssh/sshd_config:

PermitRootLogin prohibit-key   # root 只允许密钥
PasswordAuthentication no      # 全局禁用密码登录

血泪提醒:改完先别断开当前会话!另开一个终端测试新配置能登录,确认无误再断。sshd 配置改错把自己锁在门外的事故,每年都有。

2. 改端口,禁 ping 不必要

把 22 改成一个五位数端口(比如 50022),爆破流量直接少 99%,因为脚本小子只扫 22。这算不上真正的安全措施(nmap 一扫就出来),但能极大减少日志噪音,让你能从告警里看到真正的威胁。

3. 只放行必要端口

firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=50022/tcp
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload

顺手检查一遍监听端口:ss -tlnp,很多数据库(Redis、MySQL)被入侵都是因为绑了 0.0.0.0 还没密码。内网服务一律 127.0.0.1 或内网 IP。

4. fail2ban 兜底

 yum install -y epel-release && yum install -y fail2ban

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port    = 50022
maxretry = 3
bantime  = 86400

连续错 3 次,封 24 小时。装完可以故意用错密码试三次(用密码登录已禁用的话它会记到别的维度,测起来略绕),再 fail2ban-client status sshd 看封禁列表。

5. 杂项

  • AllowUsers cold 白名单限定可登录用户
  • ClientAliveInterval 300,闲置连接自动断开
  • 每个设备独立密钥对,丢了笔记本只废一把钥匙
  • 定期 lastb | awk '{print $3}' | sort | uniq -c 看看爆破来源,纯属乐趣

做完这些,再看日志,爆破记录归零,世界清净了。安全不是一步到位的事,但这一小时的投入性价比极高。

和喜欢的一切在一起~
最后更新于 2019-12-08