新服务器刚上线,SSH端口22对公网开放,没过半小时日志里就全是暴力破解记录。这不是个例,是常态。攻击者每天扫描全网的22端口,批量尝试弱密码。你的服务器SSH配置,经得起这种自动化攻击吗?
一、为什么SSH需要加固
SSH是远程管理服务器的唯一通道。一旦SSH被攻破,攻击者拿到root权限,你的服务器就彻底失控了——数据被窃取、被当肉鸡、被勒索,都是接下来会发生的事。默认的SSH配置是为了方便使用,不是为安全设计的,所以上线前必须手动加固。
二、7个必做的SSH加固操作
操作1:修改默认端口
把22改成高位端口,比如50022。编辑/etc/ssh/sshd_config,把Port 22改为Port 50022,重启sshd服务。这一步能过滤掉99%的自动化扫描,因为扫描脚本默认只扫22。改完记得防火墙放行新端口。
操作2:禁用密码登录,只用密钥认证
先生成密钥对:ssh-keygen -t rsa -b 4096。把公钥写入服务器的~/.ssh/authorized_keys。然后在sshd_config中设置PasswordAuthentication no。从此登录不再需要输入密码,攻击者暴力破解彻底失效。注意:禁用密码前先测试密钥登录是否成功,否则会把自己锁在外面。
操作3:禁止root直接登录
设置PermitRootLogin no。用普通用户登录后通过sudo提权。这样即使密钥泄露,攻击者也需要知道你的普通用户名才能操作。
操作4:限制允许登录的用户
在sshd_config中添加AllowUsers yourname,只允许指定用户SSH登录。其他系统账号即使存在,也无法通过SSH进入。
操作5:设置登录超时自动断开
ClientAliveInterval 300和ClientAliveCountMax 0,表示300秒无操作自动断开连接。防止你离开电脑后SSH会话一直挂着被人利用。
操作6:配置失败锁定
用fail2ban监控SSH登录日志,同一IP失败5次自动封禁。安装:yum install fail2ban或apt install fail2ban,默认配置就能用。
操作7:关闭空密码和X11转发
设置PermitEmptyPasswords no和X11Forwarding no。空密码账号是巨大安全隐患,X11转发在服务器上没有实际用途反而增加攻击面。
三、加固完成后的自检清单
改完端口能否用新端口连接?密钥登录是否正常?密码登录是否已被拒绝?root直接登录是否失败?fail2ban是否在日志中显示了封禁记录?每一项都确认通过,SSH加固才算到位。