服务器被暴力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

五、常见坑

  1. 改端口只改sshd忘了防火墙放行:自己也连不上,务必先 firewall-cmd --permanent --add-port=2222/tcp;
  2. 关密码登录前没配好密钥:直接被锁门外;
  3. 只封一次IP:机器人换段继续扫,要用fail2ban自动封;
  4. 云安全组没限制:在安全组只放行你常用IP访问SSH端口,比本机防护更前置;
  5. 弱密码root:PermitRootLogin no + 密钥才是正解,改端口只是提高门槛。

总结

应急用firewalld拉黑,长期靠改端口、禁root密码、上密钥,再用fail2ban自动封高频失败IP,云安全组白名单兜底。层层叠加,爆破就很难成功。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:29 

服务器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慢的因素

  1. DNS配置本身慢:检查 /etc/resolv.conf,解析超时的nameserver会拖慢所有服务,可临时改成公共DNS测试;
  2. 反向解析写进hosts:不想关UseDNS也可在 /etc/hosts 里把常用客户端IP和主机名写死,跳过查询;
  3. GSSAPI:客户端侧也可加 -o GSSAPIAuthentication=no 临时绕过;
  4. 登录banner/反向PTR:某些版本还会尝试获取PTR记录,关UseDNS一并解决。

五、验证是否改善

# 客户端用详细模式看卡在哪一步
ssh -v root@服务器IP

观察卡在 Trying reverse mapping / GSSAPI 字样的位置,关掉对应项后应秒出密码提示。

常见坑

  1. 改完不重启sshd:配置不生效;
  2. 改错文件:是 sshd_config(服务端),不是 ssh_config(客户端);
  3. 重启时断开当前连接:保留旧会话再操作,防止锁死;
  4. 公司内网IP也被反查:UseDNS no 对所有连接生效,不影响安全登录。

总结

SSH登录慢九成是 UseDNS yes 反向解析超时,改 /etc/ssh/sshd_config 为 UseDNS no、GSSAPIAuthentication no,重启sshd即可秒连。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:27 

服务器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:云服务器安全组没开

改了端口,防火墙也开了,但还是连不上。

原因: 云服务商的安全组没开。

解决: 去云控制台(阿里云/腾讯云)安全组里开放端口。

总结

记住:

  1. 改SSH默认端口(22改成别的)
  2. 生成密钥对,传公钥到服务器
  3. 测试密钥登录成功
  4. 禁用密码登录
  5. 安装fail2ban自动封IP
  6. 云服务器记得开安全组

安全加固顺序:

改端口 → 配密钥 → 测试登录 → 禁密码 → 装fail2ban

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:46 

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 条全部过一遍。

安全不是一次性的工作,而是一个持续的过程。定期更新系统、监控日志、检查异常,才能真正把服务器守好。


emer 发布于  2026-10-4 09:53 
'); })();