为什么要给SSH登录加固?
你有没有碰到过服务器登录被暴力破解的情况?我有一次帮一个做电子产品出口的客户加固服务器,当时他服务器经常被异常登录尝试搞得乱七八糟,导致业务网站频繁宕机,客户投诉不断。SSH作为远程登录的主要入口,安全性不加强,后果很严重。下面我给你讲讲我经常用的几个实操方法,让你的服务器SSH登录稳稳的安全起来。

1. 修改默认SSH端口号
SSH默认端口是22,黑客和自动扫描脚本几乎都会盯着它。把端口改成一个不常见的数字,可以大幅度减少被扫描的概率。比如我给一家玩具制造企业的服务器就改成了22022。
sudo vim /etc/ssh/sshd_config
# 找到Port 22,改成如下:
Port 22022
sudo systemctl restart sshd
改端口后,记得防火墙开放对应端口,比如用firewalld:
sudo firewall-cmd --permanent --add-port=22022/tcp
sudo firewall-cmd --reload
这样,基于端口扫描的攻击就会打个盹。
2. 禁止root账号直接登录
机械行业很多客户一开始习惯用root账号登录,方便又快。但这也是隐患。root一旦被攻破,服务器彻底失守。建议禁用root远程登录,用普通用户登录后再切换。
sudo vim /etc/ssh/sshd_config
# 找到
PermitRootLogin yes
# 改成
PermitRootLogin no
sudo systemctl restart sshd
然后,你给服务器创建一个普通用户,赋予sudo权限即可:
sudo adduser john
sudo passwd john
sudo usermod -aG wheel john # 依系统不同,可能是sudo组或者wheel组
3. 开启公钥认证,关闭密码登录
这一步对化工行业的客户尤为重要,他们服务器经常暴露在公网,密码登录极易被猜测。公钥认证不仅安全,还省心。操作如下:
- 客户端生成密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub john@your_server_ip -p 22022
- 配置服务器sshd_config:
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
sudo systemctl restart sshd
这样就彻底关闭了密码登录,黑客只能通过密钥配对才能进来。
4. 使用Fail2Ban防止暴力破解
针对服装外贸客户的实例,我用Fail2Ban做了抵御登录暴力破解的利器。它能自动监控登录失败记录,封禁多次失败IP。
sudo yum install fail2ban # 或者 apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Fail2Ban默认配置文件在 /etc/fail2ban/jail.conf,建议复制一份 jail.local 来修改:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
确保以下内容开启:
[sshd]
enabled = true
port = 22022
filter = sshd
logpath = /var/log/secure # 依系统日志文件路径调整
maxretry = 5
bantime = 3600
设置完成后,重启Fail2Ban:
sudo systemctl restart fail2ban
这样,一旦某IP失败超过5次,就会被封禁1小时,极大减少暴力破解风险。
5. 限制登录IP地址
家具外贸行业的客户,我帮他们限制SSH只允许办公IP访问,最稳妥。防火墙设置最直接:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22022" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22022" drop'
sudo firewall-cmd --reload
意思是只允许IP 192.168.1.100访问22022端口,其他全部拒绝。务必把自己的IP写进去,否则连自己都进不去了。
6. 设置登录提示语和超时自动断开
电子行业客户的服务器,我帮他们加了登录警告信息,还有闲置断开功能,提醒注意安全。
- 编辑 /etc/issue.net,加入提示:
Unauthorized access is prohibited and monitored.
- 修改sshd_config启用:
Banner /etc/issue.net
ClientAliveInterval 300
ClientAliveCountMax 0
sudo systemctl restart sshd
这样登录时会显示提示信息,5分钟无操作自动断开,提高安全性。
Q&A:服务器SSH加固常见问题
问:改了SSH端口后忘记端口号怎么办?
千万不要慌,先在服务器控制台或者云服务商提供的Web终端登录,查看 /etc/ssh/sshd_config 文件,确认端口号。或者用命令:
grep ^Port /etc/ssh/sshd_config
确认后再从客户端连接正确端口。
问:开启公钥认证,忘记带私钥怎么登录?
没带私钥只能用控制台登录服务器,或者联系管理员恢复密码登录。平时一定把私钥妥善保存,备份一份到安全地方。
问:Fail2Ban误封了自己的IP,怎么办?
可以临时解封:
sudo fail2ban-client set sshd unbanip your_ip_address
然后调整maxretry次数或者优化规则。
问:如何检测SSH登录是否安全?
查看日志是第一步,常用命令:
sudo tail -f /var/log/secure
sudo journalctl -u sshd
发现异常登录尝试立刻处理,比如封IP,改密码。
实践中的小提醒
我帮一个玩具出口客户做加固时,改端口忘了更新防火墙规则,结果SSH连不上,差点客户炸锅。经验告诉我,改配置前,备份文件+确认防火墙放行是必须的。还有,切换到公钥登录前,先用新用户登录测试确保没问题,再禁用密码登录,避免被锁死。
总之,SSH安全不是一蹴而就的,得多角度防护,层层加码。端口修改、禁用root、公钥认证、Fail2Ban动态防护、IP白名单限制、登录提示和超时断开,这几招用得好,服务器的安全就稳了。