3.7 KiB
加载模块
因为还没有经过足够的测试,因此模块默认不启动,需要手动加载或者手动设置开机启动。
手动加载、卸载模块的方法是:
# 加载模块,所有参数都使用默认值,重启后不会自动加载
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 中带空格的问题),字符串之间用逗号隔开。例如: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
,它们的意义请看下面的示例: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 为 0x100,mark_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 分钟不活动就可能被清理掉。例如:xmurp-ua time_keepalive=3600
-
len_ua
:为了判断 ua 的情况,最多可以捕获多少个数据包,默认值为2
。这是为了兼容非 HTTP 协议的内容处理。按照一个数据包的应用层长度为 1000B 来估计,如果存在超过 1000 字节的 ua(一般是不会出现这样长的),就可能被认为不是 HTTP 协议而被放行。 -
verbose
和debug
:在内核日志中打印更详细的信息,只是为了调试。默认值为n
。除非是软路由或者虚拟机,否则不要开,很容易卡死。