家里 NAS 上跑了不少服务,开了公网之后反代日志每天刷得飞快,大部分是各种扫描器在探 /.env、wp-login 之类的路径。之前用 CrowdSec 加 RouterOS 的 bouncer 做封禁,效果是有的,但日常用起来挺别扭:想看看最近谁在访问得去翻日志,看到可疑 IP 想封一下还得 ssh 上去敲 cscli。
后来干脆自己写了个面板,叫 ipguard ,现在开源了:
https://github.com/duskedge/ipguard
其实就是把看日志和封 IP 放到了一个页面里。
日志能按 IP 、域名、状态码、路径筛,图片请求点一下就能预览。每个 IP 后面会显示城市,国内的还带运营商,刚开始只用 dbip ,好多国内 IP 城市都是错的,后来加了 ip2region 才算准了。扫描的、可疑的 IP 会单独标颜色,一眼就能看出来。
看到不对劲的 IP 直接点封禁,过几秒路由器地址表里就有了,在 WAN 口就被丢掉。懒得一个个点的话可以开自动封禁,反复扫的自己就进黑名单了,自己的 IP 、公司出口加个白名单就不会误伤。
另外顺手做了个按域名限制访问,比如有些服务只想让国内 IP 打开,或者干脆只给自己几个 IP 用。
截图(界面是中文的):
部署方面,需要的就两样:一台 RouterOS 路由器,一台能跑 Docker 的机器。仓库里有个一键脚本,CrowdSec 、bouncer 、Nginx Proxy Manager 会一起装好,路由器那边的 API 账号和端口转发也会自动配,有 Cloudflare 的话证书也能顺手申请了。已经有 CrowdSec 和反代的,单独起个 ipguard 容器接进去也行。
没有 RouterOS 的话,看日志和统计还是能用的,只是封禁不会真正生效。
可能有人会问和雷池这类 WAF 有什么区别。其实不是一类东西:雷池要挡在服务前面,每个请求都过一遍,拦 SQL 注入、XSS 这些,功能很强,但部署起来也重一些。ipguard 不碰请求本身,只是读反代已经写好的日志,按 IP 判断谁在扫,然后让路由器在 WAN 口直接把它丢掉,连服务器都到不了。它不在请求链路上,就算挂了也不影响正常访问,整个就一个容器,很轻。家里 NAS 、小主机这种资源不多的场景用着刚好。两个也不冲突,想要更严的话可以一起用。
自己家里用了一阵子,挺省心的。有 RouterOS 的朋友感兴趣可以试试,有问题直接回帖或者去 GitHub 提 issue 都行。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.