url过滤功能,找到一个基于linux netfilter框架的开源代码,开源代码路径:
git clone https://gitee.com/yuewguo/url_filter.git
致敬作者,对linux内核使用炉火纯青,也学习到了很多。
由于源码对编译和启动环境说明比较少,所以把自己的琢磨的编译和启动过程下载下面。
linux 版本:3.10.0-1160.el7.x86_64 centos7上。
编译步骤:
1. make
//编译中遇到因查找linux头文件的错误,修改为正常的路径
因内核升级函数定义不匹配的修改为与内核匹配的函数
2. 第一次启动url-rule之后发现,textsearch_prepare函数处理错误,搜网上资料也是少之又少,没办法下载了内核15版本的源码,读源码的解释。
感觉代码没有问题,想着是不是因为相关的ko没有加载,所以试了如下的步骤果然这次成功了。
安装urlrule依赖的库 ts_kmp.ko (路径:)
cd /usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/lib
xz -d ts_kmp.ko.xz
insmod ts_kmp.ko
lsmod |grep ts_kmp 查看是否安装成功
3. 进入开源代码kernel目录,查看make后编译出的ko文件。
执行命令 insmod urlrule.ko 安装urlrule模块 ,
lsmod查看安装的模块
rmmod <module-name>卸载驱动模块 /*重新编译升级的时候需要先卸载再执行insmod urlrule.ko*/
4. 在开源代码sbin目录下,执行./url-rule,启动urlrule模块
5. 配置 url https://www.baidu.com drop
action drop
show //查看配置情况是否成功
6. 测试开源代码。
再连接一台虚拟机,经过安装了url-rule的设备,curl https://www.baidu.com 验证结果是curl不通,
或者使用科来给网卡灌http的包,验证代码,验证结果是报文无法通过。
7. 网络拓扑(该拓扑遇到了问题,A始终无法ping通外网,由于时间关系采用了灌包的方式。该问题后续专门出一篇文件总结)