SYNwall:给 IoT 设备加一个零配置防火墙

SYNwall 在 GitHub 上已经拿到 263 Star 了。

这是一个 Linux 内核模块,目标是给 IoT 设备提供零配置、免维护的防火墙。它不依赖集中控制,也不需要在每台设备上维护复杂的访问规则。

1、 这玩意儿是干嘛的

SYNwall 把自己注入到网络协议层,用一次性密码来控制设备是否允许外部连接。所有不含合法 OTP 的流量都会被直接丢弃。只有持有相同预共享密钥的通信方,才能基于当前时间和共享密钥生成正确的密码并访问设备。

因为它工作在 TCP 和 UDP 层,所以对应用层完全透明,不需要修改现有程序。时间同步通过 precision 参数做容差处理,避免两端时钟轻微偏差导致连接失败。

正文顶部截图

2、 为什么要用它

IoT 设备通常硬件性能弱、部署环境复杂,运维人员也很难逐个维护安全策略。传统防火墙需要配置 IP 白名单、端口规则,更新一次就要同步到所有设备,工作量很大。

SYNwall 的思路是反向的:不需要预先知道谁能访问,只要所有通信方共享同一个 PSK,就能动态生成 OTP。设备端只验证 OTP 是否有效,规则维护成本几乎为零。

README区域截图

3、 核心参数有哪些

模块通过 insmod 或 modprobe 加载,主要参数包括:

  • psk:预共享密钥,长度 32 到 1024 字节,必填。
  • enable_udp:是否开启 UDP 的 OTP 保护,默认关闭。
  • precision:时间精度,默认 10,对应约 8 秒。
  • disable_out:关闭出站 OTP,只做单向过滤。
  • enable_antidos:限制每秒 OTP 计算次数,防止 DoS。
  • enable_antispoof:把 IP 加入 OTP 计算,防止重放。
  • load_delay:加载后延迟生效时间,默认 10 秒。
  • portk:5 个端口组成的敲击序列,作为应急后门。

4、 怎么用

仓库里就是 Linux 内核模块源码,支持 x86_64、ARM、MIPS 和 AARCH64 架构,内核 3.x、4.x、5.x 都能跑。它选用 Quark 哈希算法,也是为了在低功耗设备上保持极低开销。

编译前先安装当前内核头文件:

sudo apt-get install linux-headers-$(uname -r)

然后直接 make 即可:

make

加载示例:

sudo insmod SYNwall.ko psk=123456789012345678901234567890123 precision=10 portk=12,13,14,15,16 load_delay=5000 enable_udp=1

如果设备时钟完全失控,还可以通过预设的 portk 端口敲击序列临时关闭保护,作为最后的回退手段。

5、 SYNgate 是干嘛的

同仓库还带了一个 SYNgate 模块。它和 SYNwall 逻辑一致,但面向多网络和多 PSK 场景,适合装在 SOCKS 服务器上。多网络场景下,用 dstnet_list、psk_list 等参数为不同网段分别配置策略。编译时加上 SYNGATE=1 即可:

make SYNGATE=1

SYNgate 只处理出站流量,并支持按目标网络匹配不同的密钥和策略。

6、 适合哪些人用

  • 管理大量边缘 IoT 设备,又不想维护复杂防火墙规则的运维。
  • 需要在嵌入式 Linux 上实现轻量访问控制的开发者。
  • 对网络层透明加密和端口敲门机制感兴趣的工程师。

又不想维护复杂防火墙规则的运维。

  • 需要在嵌入式 Linux 上实现轻量访问控制的开发者。
  • 对网络层透明加密和端口敲门机制感兴趣的工程师。

更多推荐