xmurp-ua/doc/useage.md
2020-01-13 22:44:17 +08:00

74 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 加载模块
因为还没有经过足够的测试,因此模块默认不启动,需要手动加载或者手动设置开机启动。
手动加载、卸载模块的方法是:
```bash
# 加载模块,所有参数都使用默认值,重启后不会自动加载
insmod xmurp-ua
# 使用自定义参数加载模块,没有指定的参数仍然使用默认,支持的参数见下文
insmod xmurp-ua 参数1=值1 参数2=值2
# 卸载模块,不需要指定参数
rmmod xmurp-ua
```
设置开机启动的方法是,将下面的内容放到 `/etc/modules.d/99-xmurp-ua` 中:
```
xmurp-ua 参数1=值1 参数2=值2
```
同样,没有指定的参数会使用默认值。
### 支持的参数
默认的参数已经可以正常工作,只有需要设置例外或者调整什么的时候才需要自己指定参数。
* `str_preserve`:指定需要忽略的字符串,默认为空。推荐使用双引号套单引号的写法(可以兼容 ua 中带空格的问题),字符串之间用逗号隔开。例如:
```bash
xmurp-ua str_preserve='"Windows NT,WeGame"'
```
这样所有包含“Windows NT”或“WeGame”的 ua 都会被放行。
* `autocapture`:是否自动根据端口号和 ip 判定是否捕获和如何处理,默认为 `y`即”yes“。可以设置成 `n`即”no“然后手动编写捕获规则详细见下一条。
* `mark_capture``mark_ack`:用来配合防火墙自定义规则使用,让用户自己编写捕获的规则。只有当 `autocapture``n` 时,这两个参数才有意义。这两个参数的默认值分别为 `0x100`、`0x200`,它们的意义请看下面的示例:
```bash
insmod xmurp-ua autocapture=n # 关闭自动捕获
iptables -t mangle -N ua_mod_req # 标记从客户端发到服务端的包
iptables -t mangle -N ua_mod_ans # 标记从服务端发到客户端的包
# 需要在三个链中都放置规则
iptables -t mangle -A INPUT -p tcp --sport 80 -j ua_mod_ans
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j ua_mod_req
iptables -t mangle -A FORWARD -p tcp --sport 80 -j ua_mod_ans
iptables -t mangle -A FORWARD -p tcp --dport 80 -j ua_mod_req
# 确认 ip 地址符合要求
iptables -t mangle -A ua_mod_req ! -s 192.168.0.0/16 -j RETURN
iptables -t mangle -A ua_mod_req -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A ua_mod_ans -s 192.168.0.0/16 -j RETURN
iptables -t mangle -A ua_mod_ans ! -d 192.168.0.0/16 -j RETURN
# 打上需要的标记,这里假定 mark_capture 为 0x100mark_ack 为 0x200
# 从客户端到服务端的包需要全部打上 mark_capture从客户端到服务端的带 ack 标志的包需要打上 mark_capture 和 mark_ack
iptables -t mangle -A ua_mod_req -j MARK --set-xmark 0x100/0x100
iptables -t mangle -A ua_mod_ans -p tcp --tcp-flags ack -j MARK --set-xmark 0x300/0x300
```
上面的规则实现的效果与 `autocapture` 置为 `y` 时完全一致。
* `time_keepalive`:间隔多长时间检查一次监控的 tcp 流的活动情况,连续两次检查之间没有活动过的流就有可能被释放掉。单位为秒,默认值是 `1200`,意思是一个流超过 20 分钟不活动就可能被清理掉。例如:
```bash
xmurp-ua time_keepalive=3600
```
* `len_ua`:为了判断 ua 的情况,最多可以捕获多少个数据包,默认值为 `2`。这是为了兼容非 HTTP 协议的内容处理。按照一个数据包的应用层长度为 1000B 来估计,如果存在超过 1000 字节的 ua一般是不会出现这样长的就可能被认为不是 HTTP 协议而被放行。
* `verbose``debug`:在内核日志中打印更详细的信息,只是为了调试。默认值为 `n`。除非是软路由或者虚拟机,否则不要开,很容易卡死。