小服务器运维实录:给2核小服务器上fail2ban,再开BBR提速
手头有一台 2 核 2G 的小规格云服务器(Flexus / 轻量级同类配置),上面跑着一个个人小站和几个常驻服务。机器本身不贵,但有两个问题反复出现:第一,SSH 日志里每天都有大量陌生 IP 尝试爆破登录;第二,在弱网、跨运营商访问时页面打开明显发闷。本文记录我实际用过的两招:fail2ban 降噪 + 开启 BBR,以及几个顺手做的低成本加固,全部是小服务器上验证过的操作。
一、先看日志,确认问题再动手
动手之前先确认现象,别凭感觉调参数。
# 最近一天 SSH 登录失败有多少次
journalctl -u sshd --since "1 day ago" | grep -c "Failed password"
# 看看都是哪些 IP 在试
journalctl -u sshd --since "1 day ago" | grep "Failed password" | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
# 机器上到底开了哪些端口
ss -tulpn
我的机器上,一天失败登录常常是几百次,来源 IP 分散在不同网段。这类扫描是互联网上的常态,挡不住,但可以大幅降低它带来的日志噪音和风险面。
二、fail2ban:让爆破 IP 自动进黑名单
fail2ban 的思路很简单:盯着 SSH 日志,某个 IP 在一段时间内失败次数超标,就用防火墙封它一段时间。
# Ubuntu / Debian
sudo apt update && sudo apt install -y fail2ban
# 启动并设开机自启
sudo systemctl enable --now fail2ban
不要直接改 jail.conf,在 /etc/fail2ban/jail.local 里写自己的配置(升级不会被覆盖):
[DEFAULT]
# 自己的出口 IP 写进白名单,别把自己锁在门外
ignoreip = 127.0.0.1/8 ::1 1.2.3.4
# 10 分钟内失败 5 次就封 1 小时
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
把 1.2.3.4 换成你自己的固定出口 IP;如果是动态 IP,至少保证有一条可用的云控制台 VNC / 串口登录通道再开封禁。改完重启并检查:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
# 看当前封了谁
sudo fail2ban-client status sshd | grep -A5 "Banned IP list"
效果:第二天再看日志,失败登录从几百次掉到个位数,剩下的大多是刚好卡在阈值下的零星尝试。注意 fail2ban 只能挡“反复试同一个 IP”的行为,换 IP 慢速试探防不住,它也不是密码策略的替代品。
三、开启 BBR:弱网环境下让传输更顺
BBR 是 Google 的拥塞控制算法,对丢包较多的弱网链路效果比较明显。先确认内核版本(一般要求 4.9 以上,现在的主流镜像都满足):
uname -r
# 看当前用的拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
确认可用后写入配置并生效:
# /etc/sysctl.conf 末尾追加
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
sudo sysctl -p
# 验证
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr
返回 bbr 且模块已加载即生效。我的实测感受:同一条跨网访问链路,大文件下载的波动小了,页面首字节时间在晚高峰时段有所改善;但 BBR 不是万能药——如果慢是因为 CPU 跑满或者磁盘 I/O 瓶颈,换拥塞算法没用。改前后可以用 curl -o /dev/null -s -w "%{time_total}\n" https://你的站点/一张图片 多测几次对比,别只凭一次感觉下结论。
四、顺手做的几个低成本加固
- SSH 只用密钥登录:
sshd_config里设PasswordAuthentication no,改前务必确认密钥能登录,并先sshd -t检查配置语法,再重启服务。改配置时保持一个已登录的 SSH 会话别断,万一配错了还能从那个会话恢复。 - 及时打补丁:小服务器最常见的失守原因不是高级攻击,是长期不更新的已知漏洞。Debian/Ubuntu 上开
unattended-upgrades,只自动装安全更新。 - 盯紧磁盘:
df -h每周看一眼,日志是小盘最常见的杀手。给/var/log留出余量,必要时配logrotate压缩旧日志;磁盘用到 80% 就该处理,别等 100% 才发现服务写不进数据。 - 只开必要的端口:安全组 / 防火墙里只放行 22、80、443 和业务必需端口,管理后台不要直接暴露公网。
五、检查清单
- [ ]
fail2ban-client status sshd能看到 jail 正常运行 - [ ]
sysctl net.ipv4.tcp_congestion_control返回bbr - [ ] 用新会话验证密钥登录正常,旧会话不断开
- [ ] 第二天再看一次 SSH 失败日志,确认数量级下降
小结
小服务器运维拼的不是堆配置,而是“先量后改、改完验证、留好退路”。fail2ban 负责把噪音挡在门外,BBR 负责把弱网传输理顺,再加上密钥登录、及时补丁和磁盘巡检这三件小事,一台 2 核小机器也能跑得安稳。成本几乎为零,花的时间不到一小时,值得做一次。
- 点赞
- 收藏
- 关注作者
评论(0)