Linux VPS/云服务器安全第二课:3次敲错门,永久拉黑

Linux VPS/云服务器安全第二课:3次敲错门,永久拉黑

上期回顾:你的门锁升级了,但还不够

还记得上期我们做了什么吗?

  • 用SSH密钥替代密码登录(换了把"指纹锁")
  • 修改了SSH默认端口(换了个"门牌号")

这两招已经能挡住99%的自动化扫描机器人。但问题是,还有那1%怎么办?

小王按照上期教程配置好服务器后,过了一周又看了看日志,发现虽然攻击尝试少多了,但还是有:

Failed password from 45.x.x.x port 23456
Failed password from 103.x.x.x port 23456
Failed password from 185.x.x.x port 23456

有些"聪明"的攻击者会扫描全端口,有些针对性的攻击会直接找到你的新端口号。

你需要的,是一个24小时不睡觉的"自动门卫"。

什么是fail2ban?

一个永不休息的智能保安

想象一下:

传统方式:你每天盯着监控录像,发现有人鬼鬼祟祟试了5次密码,你赶紧手动报警把他拉黑。

fail2ban:雇了个AI保安,自动监控、自动识别、自动拉黑,24小时不眨眼。

工作原理很简单

fail2ban就像一个尽职的门卫,它的工作流程是:

  1. 实时监控日志 - 盯着SSH、Web等服务的登录记录
  2. 识别异常行为 - 发现有人短时间内多次失败登录
  3. 自动采取行动 - 立即把攻击者的IP加入防火墙黑名单
  4. 定时解除封禁 - 过一段时间自动解封(或者永久拉黑)

用一张流程图说明:

攻击者连续失败5次 → fail2ban检测到 → 自动添加防火墙规则 
→ IP被封禁 → 攻击者彻底连不上服务器

为什么你需要fail2ban?

场景1:防止万一

即使你用了SSH密钥,可能还有其他账户用密码登录,或者哪天你临时开启了密码认证调试问题。多一层防护,多一份安心。

场景2:减少资源消耗

大量的登录尝试会消耗服务器CPU和内存。有了fail2ban,攻击者的请求直接被防火墙挡在门外,根本到不了SSH服务。

场景3:日志清爽

不用再看密密麻麻的失败登录记录,出问题时更容易找到真正的异常。

场景4:抵御分布式攻击

攻击者可能用多个IP轮流尝试。fail2ban能持续识别和封禁新出现的攻击IP,让他们无处遁形。

5分钟安装配置fail2ban

第一步:安装fail2ban

Ubuntu/Debian系统:

sudo apt update
sudo apt install fail2ban -y

CentOS/RHEL系统:

sudo yum install epel-release -y
sudo yum install fail2ban -y

启动并设置开机自启:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

看到 Created symlink... 之类的提示就说明成功了。

第二步:配置fail2ban(重点)

理解配置文件

fail2ban有两个配置文件:

  • /etc/fail2ban/jail.conf - 默认配置(不要动它)
  • /etc/fail2ban/jail.local - 你的自定义配置(在这里改)

为什么要分两个文件?因为软件升级时会覆盖 jail.conf,但不会动 jail.local

创建自定义配置

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

核心配置项(用人话解释)

找到 [DEFAULT] 部分,修改这几个参数:

[DEFAULT]
# 封禁时长(秒):这里设10分钟
bantime = 600

# 检测时间窗口:10分钟内的失败尝试会被统计
findtime = 600

# 失败次数阈值:10分钟内失败5次就封
maxretry = 5

# 白名单IP:这些IP永远不会被封
ignoreip = 127.0.0.1/8 ::1

小贴士:把你自己的家庭IP或办公室IP加到 ignoreip 里,避免误伤自己。

配置SSH保护

找到 [sshd] 部分,修改成:

[sshd]
enabled = true
port = 23456  # 改成你实际的SSH端口
filter = sshd
logpath = /var/log/auth.log  # Debian/Ubuntu用这个
# logpath = /var/log/secure   # CentOS/RHEL用这个
maxretry = 3  # 改成3次,更严格
bantime = 3600  # 封禁1小时

解释一下

  • enabled = true - 启用SSH保护
  • port - 你的SSH端口(如果改过默认端口,这里要写对)
  • maxretry = 3 - 3次机会,比默认的5次更严格
  • bantime = 3600 - 封禁1小时(3600秒)

第三步:重启fail2ban

sudo systemctl restart fail2ban

第四步:验证是否生效

# 查看fail2ban运行状态
sudo systemctl status fail2ban

# 查看SSH监狱状态
sudo fail2ban-client status sshd

如果看到类似这样的输出,就说明成功了:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

进阶配置:让fail2ban更强大

配置1:永久封禁重复犯罪者

有些攻击者被封后会换个IP继续攻击。我们可以设置"累犯"规则:被抓3次,直接永久拉黑。

jail.local 里找到或添加:

[recidive]
enabled = true
bantime = -1  # -1表示永久封禁
findtime = 86400  # 24小时内
maxretry = 3  # 被封3次就永久拉黑

解释:如果一个IP在24小时内被封禁3次,第三次就是永久封禁,再也别想连上你的服务器。

配置2:保护其他服务

fail2ban不仅能保护SSH,还能保护Web服务器、数据库等。

比如保护Nginx:

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600

配置3:白名单设置

如果你有固定的办公室IP或家庭IP,强烈建议加到白名单:

ignoreip = 127.0.0.1/8 ::1 你的家庭IP 你公司的IP段

比如:

ignoreip = 127.0.0.1/8 ::1 123.45.67.89 192.168.1.0/24

查看fail2ban的工作成果

查看当前封禁了多少IP

sudo fail2ban-client status sshd

输出示例:

|- Number of banned IPs: 15
`- Banned IP list: 103.x.x.x 185.x.x.x 45.x.x.x ...

看到这个数字,你就知道fail2ban帮你挡住了多少攻击。

查看详细日志

sudo tail -f /var/log/fail2ban.log

你会实时看到fail2ban的工作记录:

2024-12-23 10:15:23 [sshd] BAN 103.x.x.x
2024-12-23 11:15:23 [sshd] UNBAN 185.x.x.x

每一条BAN记录,都是一个被拦在门外的攻击者。

手动操作

有时候你可能需要手动封禁或解封某个IP:

# 手动封禁某个IP
sudo fail2ban-client set sshd banip 1.2.3.4

# 手动解封某个IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

常见问题Q&A

Q:我会不会把自己封了?
A:只要把你的IP加到 ignoreip 白名单里就不会。另外,云服务商通常提供VNC控制台,可以绕过网络直接登录。

Q:封禁时间设多久合适?
A:建议先设10分钟到1小时,观察效果后再调整。太短了攻击者会继续尝试,太长了可能误伤正常用户。

Q:如何判断是攻击还是用户忘记密码?
A:看IP来源和频率。正常用户偶尔输错1-2次,攻击者是短时间内大量连续尝试。

Q:fail2ban会影响服务器性能吗?
A:几乎没有影响。它只是读日志和操作防火墙,反而因为拦截了攻击,减轻了SSH服务的压力。

Q:万一fail2ban出问题怎么办?
A:云服务商都有VNC/控制台可以直接登录。或者临时停止fail2ban:sudo systemctl stop fail2ban

安装前后对比

安装前:

  • 每天上千次攻击尝试
  • 日志被刷屏,看不清真实问题
  • 服务器资源被消耗

安装后:

  • 攻击者尝试几次就被拦在门外
  • 日志清爽,只看到被封禁的记录
  • 服务器更稳定,资源占用更低

一个真实案例:某用户配置fail2ban前,每天有1000+次失败登录。配置后,第一天就封禁了50多个IP,现在每天只有零星几次尝试,而且都是新IP,试几次就被封了。

三道防线:你的服务器已经很安全了

回顾一下,现在你有了:

  1. 第一道防线:SSH密钥认证 - 黑客进不来
  2. 第二道防线:修改默认端口 - 黑客找不到
  3. 第三道防线:fail2ban自动封禁 - 黑客试几次就被拉黑

就像给家里装了:

  • 指纹锁(密钥)
  • 隐蔽的门(改端口)
  • 24小时智能保安(fail2ban)

小偷想进你家?难度系数:地狱级。

总结:5分钟,让服务器更安全

fail2ban的核心价值,就是把"被动防御"变成"主动防御":

  • 不用你盯着日志手动拉黑
  • 不用担心忘记封禁某个IP
  • 24小时自动工作,永不疲倦

今天就去配置fail2ban,让那些攻击者撞个头破血流!


下期预告:我们将继续讲解Linux服务器安全的其他重要措施:防火墙精细化配置、禁用root直接登录、定期更新系统等。

你的fail2ban封禁了多少IP?评论区晒晒战果!遇到问题也欢迎留言,我来帮你解决。

Read more

fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

作为一名长期在 Linux 服务器上工作的开发者,我见过不少因权限管理不当导致的问题:有人为了装最新的 Node.js 强行添加了来源不明的 PPA,结果导致 apt 依赖损坏,系统无法正常更新;有人习惯了 sudo pip install,直到某天发现系统自带的工具因为 Python 库版本冲突而无法运行;还有的人在 npm i -g 时遇到 Permission denied,最后执行了 sudo chmod -R 777 /usr/lib。 今天这篇文章,介绍如何用普通用户权限在 Debian/Ubuntu 下配置 Node.js、Python 和 Rust 开发环境,彻底避免上述问题。 为什么要坚持非 root 安装? 保护系统稳定性。

By serverinf
除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

身为开发者,你一定每天都在和 127.0.0.1 打交道。 启动后端服务、连接 Redis、调试 API…… 在我们的潜意识里: 127.0.0.1 = localhost = 本机。 但你有没有想过: 为什么偏偏是 127? 既然 127.0.0.1 代表自己,那 127.0.0.2 又是谁? 甚至,为什么 Linux 里还有一个诡异的 127.0.1.1? 今天,我们拆开这个被用了 40 年的“回环地址”包裹,看看里面藏着哪些你不知道的秘密。 一、

By serverinf
全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

摘要:千兆入户的"网速天堂",为什么连回国内却经常卡顿?KT、SK、LG 怎么选?韩国 VPS 到底适合谁? 在上一篇日本机房的文章里,我们聊了"白天法拉利,晚上拖拉机"的线路选择难题。今天,我们把目光投向一个自带光环的地方——韩国机房。 经常关注科技新闻的朋友都知道,在各类全球网速排行榜上,韩国经常霸占榜首,千兆(1Gbps)甚至万兆网络入户简直是家常便饭。 很多新手就会想:"既然韩国网速全球第一,那我买个韩国 VPS,速度岂不是原地起飞?" 先别急着掏钱! 理想很丰满,现实往往有点骨感。欢迎来到《全球机房探秘》第六站,今天我们来扒一扒"全球最快网速"背后的真相。 01 真相一:内网&

By serverinf
拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

最近 AI 圈最火的开源项目,莫过于被称为“大龙虾”的 OpenClaw 了。 如果你还没听说过它,简单解释一下:它不是那种只能陪你聊天的机器人,而是一个真正的“数字员工”。它能自己查资料、写代码、操作你的服务器终端、甚至在浏览器里帮你下单购物。这种“自主性”让无数开发者直呼:AI 终于从“只会动嘴”进化到“能动手干活”了。目前 OpenClaw 在 GitHub 上已积累超过 68,000 个 Star,是目前增速最快的开源项目。 然而,很多新手兴冲冲地在自己吃灰多年的“1核 1G”入门级 VPS 上部署后,迎来的不是效率的飞跃,而是没完没了的断连、报错、卡死。 今天,我们就来拆解一下:想要稳稳地跑起

By serverinf