服务器被暴力SSH爆破,如何防护与封禁IP
前言
公网服务器的22端口每天都会被机器人字典爆破,日志里满是 Failed password。口令弱就容易被撞库拿到root。本篇从"先排查→临时封禁→加固配置→自动防护"给出一套可落地的做法。
一、先确认是不是被爆破
# 统计失败次数最多的IP
lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head
# 或看secure日志里的失败记录
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head
出现大量同一IP的失败尝试,就是爆破。
二、手动封禁恶意IP(应急)
firewalld 临时/永久拉黑:
# 临时封禁
firewall-cmd --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
# 永久封禁
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
firewall-cmd --reload
# 查看已加规则
firewall-cmd --list-rich-rules
# 解除封禁
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
也可用 iptables -A INPUT -s 1.2.3.4 -j DROP。
三、加固sshd配置(根本)
编辑 /etc/ssh/sshd_config:
# 修改默认端口,别再用22
Port 2222
# 禁止root直接密码登录
PermitRootLogin no
# 禁用空密码
PermitEmptyPasswords no
# 建议改用密钥登录后关闭密码
PasswordAuthentication no
# 最大尝试次数
MaxAuthTries 3
# 10分钟无活动断开
ClientAliveInterval 600
改完 systemctl restart sshd,先保留当前会话再重启,防止把自己锁外面;新端口记得在防火墙放行。
四、自动防爆:fail2ban
自动统计失败次数并封IP,最省事:
yum install -y fail2ban fail2ban-firewalld
新建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 86400
启动并自启:
systemctl enable --now fail2ban
# 查看封禁名单
fail2ban-client status sshd
五、常见坑
- 改端口只改sshd忘了防火墙放行:自己也连不上,务必先
firewall-cmd --permanent --add-port=2222/tcp; - 关密码登录前没配好密钥:直接被锁门外;
- 只封一次IP:机器人换段继续扫,要用fail2ban自动封;
- 云安全组没限制:在安全组只放行你常用IP访问SSH端口,比本机防护更前置;
- 弱密码root:PermitRootLogin no + 密钥才是正解,改端口只是提高门槛。
总结
应急用firewalld拉黑,长期靠改端口、禁root密码、上密钥,再用fail2ban自动封高频失败IP,云安全组白名单兜底。层层叠加,爆破就很难成功。
遇到问题加QQ23979811 协助处理
服务器SSH连接慢,DNS反向解析问题解决办法
前言
用 ssh 登录服务器,输入密码前要等好几秒甚至十几秒才出现密码提示,连上之后命令回显也卡。很多人以为是网络差,其实最常见原因是 sshd 在做 DNS 反向解析,解析超时才放行。本篇给出关闭反向解析的标准做法。
一、为什么会慢:DNS反向解析
客户端连上后,sshd 默认会把客户端 IP 反查成主机名(UseDNS yes)。如果服务器配的 DNS 解析不了这个公网 IP,就一直等到超时,表现为卡在登录前。
二、关闭sshd反向解析(核心)
编辑配置文件:
vi /etc/ssh/sshd_config
找到或新增两行:
UseDNS no
GSSAPIAuthentication no
UseDNS no:关闭IP反查;GSSAPIAuthentication no:关闭GSSAPI认证,这也会触发额外DNS查询导致卡顿。
三、重启sshd生效
systemctl restart sshd
# CentOS7 服务名是 sshd,部分发行版是 ssh
systemctl status sshd
注意:重启前保留一个已登录的会话,避免配置写错把自己锁在外面。
四、其他导致SSH慢的因素
- DNS配置本身慢:检查
/etc/resolv.conf,解析超时的nameserver会拖慢所有服务,可临时改成公共DNS测试; - 反向解析写进hosts:不想关UseDNS也可在
/etc/hosts里把常用客户端IP和主机名写死,跳过查询; - GSSAPI:客户端侧也可加
-o GSSAPIAuthentication=no临时绕过; - 登录banner/反向PTR:某些版本还会尝试获取PTR记录,关UseDNS一并解决。
五、验证是否改善
# 客户端用详细模式看卡在哪一步
ssh -v root@服务器IP
观察卡在 Trying reverse mapping / GSSAPI 字样的位置,关掉对应项后应秒出密码提示。
常见坑
- 改完不重启sshd:配置不生效;
- 改错文件:是
sshd_config(服务端),不是ssh_config(客户端); - 重启时断开当前连接:保留旧会话再操作,防止锁死;
- 公司内网IP也被反查:UseDNS no 对所有连接生效,不影响安全登录。
总结
SSH登录慢九成是 UseDNS yes 反向解析超时,改 /etc/ssh/sshd_config 为 UseDNS no、GSSAPIAuthentication no,重启sshd即可秒连。
遇到问题加QQ23979811 协助处理
服务器SSH安全加固,改端口和密钥登录
前言
服务器刚买,SSH一直被暴力破解?默认22端口全是黑客在扫。本文讲怎么SSH安全加固:改端口、禁用密码登录、用密钥登录。
一、为什么要加固SSH
默认SSH配置太危险:
- 端口22是公开的,黑客都扫
- root密码登录容易被暴力破解
- 密码可能被盗
二、第一步:改SSH端口
编辑SSH配置
vi /etc/ssh/sshd_config
找到:
#Port 22
改成:
Port 22222
(随便选个1024-65535之间的端口)
防火墙开放新端口
firewalld:
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --reload
iptables:
iptables -I INPUT -p tcp --dport 22222 -j ACCEPT
重启SSH
systemctl restart sshd
注意: 改完端口后,连接SSH要用新端口:
ssh -p 22222 root@服务器IP
三、第二步:生成密钥对
在你自己电脑上生成
ssh-keygen -t rsa -b 4096
一路回车,生成两个文件:
~/.ssh/id_rsa(私钥,自己留着)~/.ssh/id_rsa.pub(公钥,传到服务器)
把公钥传到服务器
ssh-copy-id -p 22222 root@服务器IP
或者手动传:
# 服务器上创建.ssh目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 把公钥内容追加到authorized_keys
vi ~/.ssh/authorized_keys
# 把id_rsa.pub的内容粘进去
chmod 600 ~/.ssh/authorized_keys
测试密钥登录
ssh -p 22222 root@服务器IP
不用输密码就能登录就对了。
四、第三步:禁用密码登录
编辑SSH配置
vi /etc/ssh/sshd_config
找到:
#PasswordAuthentication yes
改成:
PasswordAuthentication no
找到:
#PermitRootLogin yes
改成:
PermitRootLogin prohibit-password
(允许root用密钥登录,但不允许密码登录)
重启SSH
systemctl restart sshd
五、第四步:其他安全设置
限制登录尝试次数
防止暴力破解:
MaxAuthTries 3
登录超时时间
ClientAliveInterval 300
ClientAliveCountMax 2
禁止空密码登录
PermitEmptyPasswords no
只允许特定用户登录
AllowUsers root
六、安装fail2ban
自动封禁暴力破解的IP。
安装
yum install -y epel-release
yum install -y fail2ban
配置
vi /etc/fail2ban/jail.local
加内容:
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 86400
启动
systemctl start fail2ban
systemctl enable fail2ban
七、完整配置文件参考
vi /etc/ssh/sshd_config
Port 22222
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
PermitEmptyPasswords no
改完重启:
systemctl restart sshd
八、常见坑
坑1:改完端口连不上了
原因: 防火墙没开放新端口。
解决:
- 云服务器还要在控制台安全组里开放端口
- 先开新窗口测试,别关旧窗口
坑2:密钥登录失败
原因: 权限不对。
检查:
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
正确权限:
- .ssh目录:700
- authorized_keys:600
坑3:禁用密码后进不去了
原因: 密钥没配好就禁用密码了。
解决: 一定先测试密钥登录成功,再禁用密码。
坑4:云服务器安全组没开
改了端口,防火墙也开了,但还是连不上。
原因: 云服务商的安全组没开。
解决: 去云控制台(阿里云/腾讯云)安全组里开放端口。
总结
记住:
- 改SSH默认端口(22改成别的)
- 生成密钥对,传公钥到服务器
- 测试密钥登录成功
- 禁用密码登录
- 安装fail2ban自动封IP
- 云服务器记得开安全组
安全加固顺序:
改端口 → 配密钥 → 测试登录 → 禁密码 → 装fail2ban
遇到问题加QQ23979811 协助处理
Linux 服务器安全加固:10个必须做的基础配置
前言
刚装完的 Linux 服务器就像没锁门的房子,任何人都能进来。本文整理了 10 个最基础但最重要的安全加固配置,帮你把门锁上。
1. 修改 SSH 端口,禁止 root 登录
默认 22 端口是黑客扫描的首选目标,改个端口能挡掉 90% 的自动扫描。
# 编辑 sshd 配置
vi /etc/ssh/sshd_config
# 修改端口
Port 22222
# 禁止 root 登录
PermitRootLogin no
# 重启 sshd
systemctl restart sshd
注意:改完端口后,记得在防火墙和安全组里放行新端口,否则你自己也进不去了。
2. 使用 SSH 密钥登录,禁用密码登录
密码再复杂也扛不住暴力破解,密钥登录才是正道。
# 本地生成密钥对(在你自己的电脑上执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 把公钥传到服务器
ssh-copy-id -p 22222 user@your_server_ip
# 服务器上禁用密码登录
vi /etc/ssh/sshd_config
PasswordAuthentication no
3. 配置防火墙,只开必要端口
# 只开 SSH、HTTP、HTTPS
ufw default deny incoming
ufw default allow outgoing
ufw allow 22222/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
4. 自动安全更新
# Ubuntu/Debian
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
# CentOS/RHEL
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
5. 创建普通用户,配置 sudo
永远不要用 root 跑日常操作,创建一个普通用户,需要时用 sudo 提权。
# 创建用户
adduser deploy
# 加入 sudo 组
usermod -aG sudo deploy
6. 禁用不必要的服务
# 查看正在运行的服务
systemctl list-unit-files --type=service --state=enabled
# 禁用不需要的服务
systemctl disable --now avahi-daemon
systemctl disable --now cups
7. 配置 fail2ban 防暴力破解
apt install fail2ban
# 配置 sshd 防护
vi /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22222
maxretry = 3
bantime = 3600
systemctl restart fail2ban
8. 设置密码策略
# 编辑 pwquality 配置
vi /etc/security/pwquality.conf
minlen = 12 # 最小长度
dcredit = -1 # 至少1个数字
ucredit = -1 # 至少1个大写字母
lcredit = -1 # 至少1个小写字母
ocredit = -1 # 至少1个特殊字符
9. 监控日志,定期检查
# 查看登录失败记录
grep "Failed password" /var/log/auth.log
# 查看当前登录用户
w
# 查看最近登录记录
last -n 20
10. 定期备份,备份再备份
安全加固做得再好,也不如有一份能快速恢复的备份。
# 简单的文件备份脚本
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/
把备份文件同步到异地存储,别只放在同一台服务器上。
总结
这 10 条配置不需要高深的技术,但每一条都能实实在在地降低服务器被攻破的风险。建议新服务器装好后,第一件事就是把这 10 条全部过一遍。
安全不是一次性的工作,而是一个持续的过程。定期更新系统、监控日志、检查异常,才能真正把服务器守好。