软路由中自建防火墙(防止员工偷看小电影等违规行为)

简介

每一个跨境电商老板,都会面临一个问题。首先我们肯定是要到墙外和老外做生意,其次我们如何保证自己的员工来到海外环境后,只和老外做生意,而不去触碰违法红线呢?(如发表不当言论,或看P站)

今天我们就使用一款工具:OpenGFW 。来在软路由中自己建设一道审查墙,我们自己来控制,哪些网站不能看,哪些网站可以看。哪些设备不能访问,哪些设备可以访问。

本文所需工具下载

下载链接:https://pan.quark.cn/s/18ee63ea02b1

  • rules.yaml:规则文件
  • config.yaml:配置文件
  • OpenGFW-linux-arm64:arm64版
  • OpenGFW-linux-386:x86版
  • OpenGFW-linux-amd64:amd64版
  • finalshell_install.exe:连接工具

使用命令查看自己的路由器系统适用于哪个OpenGFW版本

# 查看系统处理器架构
uname -m

教程

1、将OpenGFW运行文件上传至软路由

我使用的是IIS Web 服务器方法(详细操作见视频),将 OpenGFW 和 config.yaml rules.yaml 上传至路由器

# 在IIS Web服务器的MIME类型中添加
文件扩展名:.
MIME类型:application/octet-stream

文件扩展名:.yaml
MIME类型:application/x-yaml

# 下载到路由器
wget http://192.168.2.247/OpenGFW-linux-arm64
wget http://192.168.2.247/config.yaml
wget http://192.168.2.247/rules.yaml

2、运行

登陆路由器的ssh端口,使用命令将路由器的opkg包进行更新

# 将 opkg 更新到最新
opkg update

# 安装 OpenGFW 所需依赖
opkg install nftables kmod-nft-queue kmod-nf-conntrack-netlink

# 运行 OpenGFW
chmod +x OpenGFW-linux-arm64
./OpenGFW-linux-arm64 -c config.yaml rules.yaml

# 后台运行 OpenGFW
 nohup ./OpenGFW-linux-arm64 -c config.yaml rules.yaml > /tmp/opengfw.log 2>&1 &

3、规则配置

#记录 SNI 中包含特定关键字的连接
- name: log horny people
  log: true
  expr: let sni = string(tls?.req?.sni); sni contains "porn" || sni contains "hentai"

#阻断访问 v2ex.com 的 HTTP/HTTPS/QUIC 连接
- name: block v2ex http
  action: block
  expr: string(http?.req?.headers?.host) endsWith "v2ex.com"

- name: block v2ex https
  action: block
  expr: string(tls?.req?.sni) endsWith "v2ex.com"

- name: block v2ex quic
  action: block
  expr: string(quic?.req?.sni) endsWith "v2ex.com"

#阻断并记录 Shadowsocks, VMess, Trojan 连接
- name: block shadowsocks and vmess
  action: block
  log: true
  expr: fet != nil && fet.yes

- name: block trojan
  action: block
  log: true
  expr: trojan != nil && trojan.yes

#将 v2ex.com 域名 DNS 污染到 0.0.0.0 和 ::
- name: v2ex dns poisoning
  action: modify
  modifier:
    name: dns
    args:
      a: "0.0.0.0"
      aaaa: "::"
  expr: dns != nil && dns.qr && any(dns.questions, {.name endsWith "v2ex.com"})

#阻断 SOCKS 代理访问 google.com:80
- name: block google socks
  action: block
  expr: string(socks?.req?.addr) endsWith "google.com" && socks?.req?.port == 80

#根据握手响应阻断 WireGuard
- name: block wireguard by handshake response
  action: drop
  expr: wireguard?.handshake_response?.receiver_index_matched == true

#根据 GeoSite 数据库阻断 Bilibili 的所有域名
- name: block bilibili geosite
  action: block
  expr: geosite(string(tls?.req?.sni), "bilibili")

#根据 GeoIP 数据库阻断所有目标 IP 为中国的连接
- name: block CN geoip
  action: block
  expr: geoip(string(ip.dst), "cn")

#根据 CIDR 阻断特定 IP 段的连接
- name: block cidr
  action: block
  expr: cidr(string(ip.dst), "192.168.0.0/16")