7 个版本 (稳定)
2.4.0 | 2023 年 5 月 8 日 |
---|---|
2.3.0 | 2023 年 5 月 8 日 |
2.2.0 | 2020 年 9 月 7 日 |
2.1.0 | 2020 年 6 月 9 日 |
0.1.0 | 2020 年 4 月 10 日 |
#1355 在 网络编程
每月 53 次下载
150KB
4K SLoC
门卫:用 Rust 编写的 SOCKS5 服务器。
功能
认证方法
不支持任何认证方法。
客户端连接到服务器时,需要发送 X'00'
(NO AUTHENTICATION REQUIRED
) 作为方法选择消息。
命令
只支持 CONNECT
命令。
过滤器
门卫允许用户根据以下内容限制连接:
- 目标地址
- IP 地址(子网范围)
- 域名(正则表达式匹配,通配符)
- 端口号
- 协议(目前仅支持 tcp)
用法
此包提供了一个库和一个使用此库的可执行文件。
包
您可以通过将 gatekeeper
添加到项目 Cargo.toml
中的依赖项来使用它。
[dependencies]
gatekeeper = "2.4.0"
可执行文件
您可以使用 cargo install
命令将门卫安装为可执行文件(gatekeeperd
)。
$ cargo install gatekeeper
$ gatekeeperd
gatekeeperd
gatekeeper 2.4.0
如何使用
门卫安装完成后,您将能够运行程序。
$ gatekeeperd
您可以看到命令行选项。
$ gatekeeperd --help
过滤规则
默认情况下,门卫接受所有连接请求。但是,您可以通过提供 yaml 文件(如上所述)来过滤一些请求。此 yaml 文件遵循以下特殊格式。
格式
任何过滤规则 yaml 都由一系列 RuleEntries
组成。每个 RuleEntry
要么是 Allow
,要么是 Deny
。
---
- Allow:
..
- Deny:
..
- Deny:
..
- Allow:
..
..
列表中规则顺序靠后的规则具有更高的优先级。然后,规则列表的开头被视为默认规则,规则应允许或拒绝所有连接。
- Allow:
address: Any
port: Any
protocol: Any
..
或
- Deny:
address: Any
port: Any
protocol: Any
..
所有 RuleEntry
有 3 个字段 address
、port
和 protocol
。这些字段的值可以是 Any
或 Specif
。其中,Any
匹配任何值,而 Specif
匹配指定的值。
-
address
# any address address: Any
address
是IpAddr
或Domain
。
IpAddr
通过addr
和prefix
指定。# 192.168.0.1/24 address: Specif: IpAddr: addr: 192.168.0.1 prefix: 24
Domain
可以指定为pattern
或wildcard
。# {mail.,}google.{com,co.jp} address: Specif: Domain: # regexp pattern pattern: '\A(mail\.)?google.((com|co)\.jp)\z'
# allow any Amazon API Gateway's REST API address: Specif: Domain: # converted to the regex pattern: \A[A-Za-z0-9-]{1,63}\.execute\-api\.[A-Za-z0-9-]{1,63}\.amazonaws\.com\z wildcard: '*.execute-api.*.amazonaws.com'
-
port
# any port number port: Any
# match only 8080 port: Specif: 8080
-
protocol
# any protocol protocol: Any
# match only tcp protocol: Specif: Tcp
示例
-
允许所有连接
--- - Allow: address: Any port: Any protocol: Any
-
只允许本地子网(192.168.0.1/16)的连接
--- .. default deny .. - Allow: address: Specif: IpAddr: addr: 192.168.0.1 prefix: 16 port: Any protocol: Any
-
阻止访问facebook.com和youtube.com
--- .. default allow .. - Deny: address: Specif: Domain: pattern: '\A(www\.)?facebook\.com\z' port: Any protocol: Specif: Tcp - Deny: address: Specif: Domain: pattern: '\A(www\.)?youtube\.com\z' port: Any protocol: Specif: Tcp
集成测试
- 准备socks和http服务器
$ docker-compose build
$ docker-compose up -d
- 运行
ignored
测试
$ cargo test --verbose -- --nocapture --ignored
依赖项
~7–17MB
~220K SLoC