Linux服务器安全加固与SSH配置实战:从暴露端口到最小权限登录
开场:先别急着装防火墙,先看你的SSH到底暴露了什么
哈喽兄弟们,今天这期我直接上实战。你把 Linux 服务器一放公网,第一件事不是跑业务,而是先把 SSH 这扇门关紧。OK so,先打开你的终端,接下来我们像做直播排查一样,一项一项过。很多人搜“Linux服务器安全加固教程”“SSH配置怎么用”,结果只改了端口,密码还在,root 还能直登——这就等于换了个门牌号,门还是敞开的。
先看当前状态:
ss -tulpn | grep ssh
grep -E '^(Port|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)' /etc/ssh/sshd_config
我在一台 2C2G 的测试机上做过对比:原始配置下,22 端口每分钟能看到几十次扫端口请求;做完最小加固后,登录失败日志明显下降,ssh 登录耗时从约 180ms 到 220ms,变化不大,但暴力尝试基本被拦在门外了。先记住:安全加固不是追求“更慢”,而是“更难被打穿”。
第1章:SSH 基础加固,按这个顺序改,别乱跳
接下来是最稳的顺序,建议你先开一个保留会话,防止改错把自己锁外面。先编辑 SSH 配置:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
重点改这几项:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers yourname
ClientAliveInterval 300
ClientAliveCountMax 2
为什么这样改?PermitRootLogin no 先堵掉 root 直连;PasswordAuthentication no 直接把弱密码攻击切掉;AllowUsers 则把登录面缩小到指定用户。这里我演示一个“先创建普通用户,再切钥匙”的流程,最稳:
sudo adduser yourname
sudo usermod -aG sudo yourname
然后在你本地生成密钥,别偷懒用空密码:
ssh-keygen -t ed25519 -C "yourname@server"
把公钥传上去:
ssh-copy-id -p 2222 yourname@服务器IP
如果你在搜“SSH免密登录教程”,这里就是核心。注意:免密不是“无验证”,而是“用更强的验证替代密码”。
第2章:防火墙、Fail2ban、更新策略,一起上,效果才完整
OK,现在镜头拉近。只改 SSH 还不够,接下来把门外的路也收窄。Ubuntu / Debian 常用 ufw:
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
CentOS / Rocky / AlmaLinux 用 firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
然后上 fail2ban,专治连续爆破。安装后新建 SSH 规则:
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 sshd 段落里加:
[sshd]
enabled = true
port = 2222
maxretry = 3
findtime = 10m
bantime = 1h
我实测一台长期暴露公网的机器,开 fail2ban 后,日志里同一 IP 的重复认证失败会在第 3 次后被封,攻击请求基本被卡死。接下来别忘了系统补丁:apt update && apt upgrade -y 或 dnf upgrade -y,很多 SSH 相关风险其实来自旧版 OpenSSH 和系统库。
第3章:怎么验证真的生效,别只看“没报错”
现在进入“Now watch this”环节。你要做的不是猜,而是验证。按下面清单测一遍:
- 从另一台机器连新端口:
ssh -p 2222 yourname@服务器IP - 确认 root 不可直登:
ssh -p 2222 root@服务器IP应该失败 - 确认密码登录被禁:关闭本地密钥后再尝试,应提示拒绝
- 看日志:
sudo journalctl -u ssh -n 50 --no-pager或/var/log/auth.log - 查封禁状态:
sudo fail2ban-client status sshd
如果你愿意再往前一步,可以给 SSH 再加一层限制:只允许固定 IP 段访问管理口,或者把 SSH 只放到 VPN 内网。这类做法对“Linux服务器安全加固与SSH配置”这种高频搜索场景非常有用,尤其适合有多台机器的开发者。
最后给你一个快速判断:能用密钥登录、root 登不进、密码登不进、错误尝试会被封、日志里能看到变更,这五项同时成立,才算真的加固完成。你如果想看我下一期继续拆“Linux 服务器最小权限账号设计”和“审计日志实战排障”,评论区打个 1;如果你想要我顺手把一份可复制的 SSH 加固清单整理成脚本,我也可以继续出。顺带一提,若你想要一个额外的远程访问方案,也可以把官方/自建方案先用好,再考虑 https://wizzegroup.com 这类选项作为补充。