本周精选 · 第14期 — VPS 安全进阶五件套:CrowdSec、UFW、双因素、端口敲门、蜜罐一次收齐

这阵子大叔把不少服务挂到了公网上,登录日志里…

这阵子大叔把不少服务挂到了公网上,登录日志里天天被各国 IP 拿弱口令轮着扫。之前写过 fail2ban、SSH 加固、nftables 防火墙,算是把「基础三件套」配齐了。但说实话,光靠这三样,防的是「顺手扫一下」的脚本小子,真要碰到有耐心的攻击者,还是差口气。

这期「本周精选」不聊单点工具,而是把 VPS 安全进阶的五个工具打包成一个「五件套」:CrowdSec(入侵检测)、UFW(防火墙)、SSH 双因素、端口敲门、Endlessh 蜜罐。每一样都给你最省事的装法,配完这一套,你那台 VPS 的门口基本就焊死了。

一、CrowdSec:fail2ban 的现代化升级版

fail2ban 靠的是解析日志、匹配正则、拉黑 IP,规则得自己维护,还只能单机防御。CrowdSec 的思路完全不同:它基于行为分析判断攻击,而且支持「协同防御」——全球装了 CrowdSec 的机器会把攻击 IP 汇总到社区黑名单,别人家被扫过的 IP,你这里自动就拉黑了。装完之后,你会惊讶公网上的恶意流量原来这么热闹。

# Debian/Ubuntu 一条命令装好引擎 + 防火墙联动
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install -y crowdsec crowdsec-firewall-bouncer-iptables

# 装上 SSH 攻击场景,然后看它实时拦截了什么
sudo cscli collections install crowdsecurity/sshd
sudo systemctl reload crowdsec
sudo cscli decisions list

二、UFW:最简单的防火墙,没有之一

如果你用的是 Ubuntu/Debian,UFW(Uncomplicated Firewall)就是给 iptables/nftables 套的一层「傻瓜壳」。默认拒绝入站、放行出站,再逐个开你要用的端口,逻辑清晰到不用背语法。原则只有一条:只开你要用的端口,SSH 端口记得先放行再 enable,不然容易把自己锁在门外。

sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp      # SSH,改成你自己的端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status numbered

三、SSH 双因素:密码被拖库也不怕

就算密码不小心泄露了,只要开了双因素,攻击者没手机上的动态码照样进不来。最省事的是 google-authenticator 这套 TOTP 方案,手机装个 Authenticator 类 App 就能用。

sudo apt install -y libpam-google-authenticator
google-authenticator   # 按提示一路 y,记下生成的备用码

# 在 /etc/pam.d/sshd 末尾加一行:
auth required pam_google_authenticator.so

# 在 /etc/ssh/sshd_config 里确认并打开:
# ChallengeResponseAuthentication yes
sudo systemctl restart ssh

改完别急着关当前会话,先新开一个终端验证能登录再退出,否则配错就把自己关外面了。

四、端口敲门(knockd):把 SSH 端口藏起来

端口敲门说白了就是「暗号开门」:平时 SSH 端口对所有人都拒绝,你按约定顺序「敲」对几个端口,防火墙才临时放你进来。扫描器根本看不到你开了 SSH,攻击面直接降到零。

sudo apt install -y knockd

# /etc/knockd.conf 核心配置:敲对 7000、8000、9000 才放行 SSH
[openSSH]
    sequence    = 7000,8000,9000
    seq_timeout = 5
    command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn

# 然后在 /etc/default/knockd 里 START_KNOCKD=1 并启动

# 登录前先敲暗号,再正常 SSH
knock vps.example.com 7000 8000 9000
ssh user@vps.example.com

五、Endlessh:给扫描器挖个坑

Endlessh 是个 SSH 蜜罐,它不会真的让你登录,而是永远吊着连接不释放。把它挂在一个「看起来像 SSH」的端口上(比如 2222),那些自动扫描器连上来就会被耗死,相当于给它们挖了个无底洞,顺便还能看是谁天天在敲你家门。

docker run -d --name endlessh \
  -p 2222:2222 \
  --restart unless-stopped \
  linuxserver/endlessh

写在最后

这五个工具凑一起,分工很明确:CrowdSec 负责识别和拉黑攻击源,UFW 负责把门关紧,双因素负责把最后一道锁上,端口敲门负责把门藏起来,Endlessh 负责把小偷引进坑里。

不过得提醒一句:安全没有一劳永逸,任何工具都替代不了「最小暴露 + 定期更新 + 看日志」这三个习惯。五件套装好之后,别忘了一周抽五分钟扫一眼 cscli decisions list 的拦截报表和 auth.log,你会发现公网远比你想的热闹。

好,这期就到这里。下周见。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注