Belica 不是那种装完就能高枕无忧的工具。上个月帮朋友处理一台被扫描器盯上的 VPS,日志里密密麻麻的 SSH 爆破记录让我重新翻了遍 Belica 的规则集是默认配置只挡了七成攻击,剩下的三成需要手动补漏。这玩意儿更像一把需要自己磨的刀。出厂刃口能用,切硬骨头还得自己开锋的。安装 Belica 最省事的办法是用官方脚本,别急着敲回车。先看一眼 /etc/os-release的,CentOS 7 和 Ubuntu 22.04 对依赖包的处理差异不小。我习惯跑安装命令前手动装好 jq 和 curl。省得脚本里面途卡在包管理器的交互提示上。

装完第一件事就是把 /etc/belica/belica.conf 里的 log_level info 调还有 debug,跑十分钟看看原始输出。
有些人跳过这步,结果规则误杀正常请求时根本找不到触发点。上周有个做跨境电商的客户,Belica 把 PayPal 的 IPN 回调给拦了。debug 日志里清清楚楚显示匹配到了“可疑 POST 频率”规则是阈值设得太低,改成 30 次/分钟就解决了。规则调优是 Belica 最磨人的部分,也是最能体现功夫的地方。默认规则集里有一条针对 SQL 注入的检测,正则写得相当激进,任何带单引号的参数都会被标记。我一般会把这条规则的动作从 block 改成 log,观察一周再决定是否收紧呢?具体操作是编辑 rules/sqli.rules,找到 id:1002 那条了,把 action 字段的值换掉。
不要嫌麻烦,我见过太多人直接关掉整组规则,结果两周后数据库被拖库。顺带提一句,Belica 的规则文件支持 include 指令。把自己写的自定义规则放在 /etc/belica/rules/local/ 下面,升级时不会被覆盖。性能方面有个坑值得单独说。
Belica 默认用单线程处理流量,小站点无所谓,日 IP 过五千就开始丢包了。改法不难,在 belica.conf 里把 worker_processes 设成 CPU 核心数,把 connection_queue_size 1024 提还有 8192。我自己的博客跑在 2 核 4G 的机器上,调完这两个参数后,压测时 QPS 1200 涨还有 3400。还有个细节是日志轮转别用默认的按天切割。改成按大小切的,单文件 50MB 比较合适。不然遇到 CC 攻击时,一天能写满 20G 硬盘。,最后说个容易被忽略的点,Belica 的告警通知默认发到本地 mail,十有八九进垃圾箱。
接 webhook 更靠谱,钉钉或者 Slack 都行的。在配置文件里找到 alert_webhook 字段,填上地址,顺便把 alert_min_level 设成 warning的。这样规则触发时能第一时间收到消息。不用等第二天翻日志才发现被打了。Belica 用顺手之后。你会发现它最大的价值就是让你对流量模式有了实感是哪些 IP 段在扫、哪个接口被盯得最紧呢?信息比任何报表都直接的。

