Loading... <p style="text-indent: 2em"><strong>前言</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">做为网络管理员,对P2P、QQ、酷狗等软件是又爱又恨,大多数公司为了提高工作效率,禁止公司员工登陆QQ、看视频等,在市场上买专门的上网行为管理设备,随便一种都是价格不菲,而使用linux来做网关一样可以禁止qq、酷狗等软件,为实现此功能就需要为iptables/netfilter添加layer7模块,而iptables/netfilter是基于内核的,所以需要重新编译内核。</p> <p style="text-indent: 2em"><strong>编译过程</strong></p> <p style="text-indent: 2em"><strong>环境介绍</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">系统环境:CentOS6.6</p> <p style="text-indent: 2em">所需源码包:kernel-2.6.32-504.16.2.el6.src.rpm(红帽ftp站点提供)</p> <p style="text-indent: 2em"> iptables-1.4.20.tar.bz2</p> <p style="text-indent: 2em"> netfilter-layer7-v2.23.tar.bz2</p> <p style="text-indent: 2em"> l7-protocols-2009-05-28.tar.gz</p> <p style="text-indent: 2em"><strong>编译内核</strong></p> <p style="text-indent: 2em">解决依赖关系<strong><br style="text-indent: 2em" /></strong></p> <pre class="brush:bash;toolbar:false">[root@Firewall ~]# yum groupinstall "Development Tools" "Server Platform Development" -y</pre> <p style="text-indent: 2em">创建所需用户并安装<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-66.jpg" title="1429878166100945.jpg" alt="1.jpg" /></p> <p style="text-indent: 2em">将源码解压到指定目录</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-29.jpg" title="1429878185544441.jpg" alt="2.jpg" /></p> <p style="text-indent: 2em">为内核打补丁<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-40.jpg" title="1429878203312204.jpg" alt="3.jpg" /></p> <p style="text-indent: 2em">开始编译<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-28.jpg" title="1429878226126883.jpg" alt="4.jpg" /></p> <p style="text-indent: 2em">首先选择此项<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-94.jpg" title="1429878243432335.jpg" alt="5.jpg" /></p> <p style="text-indent: 2em">进入此项设定参数<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-6.jpg" title="1429878271443639.jpg" alt="6.jpg" /></p> <p style="text-indent: 2em">下拉,选择此项并进入<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-2.jpg" title="1429878289127227.jpg" alt="7.jpg" /></p> <p style="text-indent: 2em">进入核心过滤设置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-78.jpg" title="1429878312119776.jpg" alt="8.jpg" /></p> <p style="text-indent: 2em">启用layer7支持</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-21.jpg" title="1429878332137212.jpg" alt="9.jpg" /></p> <p style="text-indent: 2em">返回第一层,进入此项<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-46.jpg" title="1429878349110933.jpg" alt="10.jpg" /></p> <p style="text-indent: 2em">取消模块签名校验<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160255-8.jpg" title="1429878408950692.jpg" alt="11.jpg" /></p> <p style="text-indent: 2em">返回,进入API加密设置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-24.jpg" title="1429878426134580.jpg" alt="12.jpg" /></p> <p style="text-indent: 2em">取消内核签名校验,否则无法编译安装<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-84.jpg" title="1429878445312673.jpg" alt="13.jpg" /></p> <p style="text-indent: 2em">保存退出<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-90.jpg" title="1429878464112038.jpg" alt="14.jpg" /></p> <p style="text-indent: 2em">编译安装<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">[root@Firewall linux]# yum install screen -y #为了防止意外,我们在screen里编译安装 [root@Firewall linux]# screen [root@Firewall linux]# make [root@Firewall linux]# make modules_install [root@Firewall linux]# make install</pre> <p style="text-indent: 2em">看一下grub.conf文件,新内核的信息已经写入了</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-56.jpg" title="1429878484231396.jpg" alt="15.jpg" /></p> <p style="text-indent: 2em">以新内核启动</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-16.jpg" title="1429878501139546.jpg" alt="16.jpg" /></p> <p style="text-indent: 2em"><strong>编译iptables</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">解压并打补丁<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-3.jpg" title="1429878517417335.jpg" alt="17.jpg" /></p> <p style="text-indent: 2em">备份脚本文件,卸载旧版本</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-48.jpg" title="1429878532151727.jpg" alt="18.jpg" /></p> <p style="text-indent: 2em">编译安装<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">[root@Firewall ~]# cd iptables-1.4.20 [root@Firewall iptables-1.4.20]# ./configure --prefix=/usr --with-ksource=/usr/src/linux [root@Firewall iptables-1.4.20]# make && make install</pre> <p style="text-indent: 2em">还原脚本</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-7.jpg" title="1429878550917528.jpg" alt="19.jpg" /></p> <p style="text-indent: 2em">修改脚本</p> <p style="text-indent: 2em">将所有/sbin/$IPTABLES替换为/usr/sbin/$IPTABLES</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160256-9.jpg" title="1429878571644793.jpg" alt="20.jpg" /></p> <p style="text-indent: 2em">查看iptables版本</p> <p style="text-indent: 2em"><img src="/upload/ou0djavsmny.jpg" title="1429878592590661.jpg" alt="21.jpg" /></p> <p style="text-indent: 2em">为layer7模块提供其所识别的协议的特征码</p> <p style="text-indent: 2em"><img src="/upload/i25p3n0vcp0.jpg" title="1429878606235529.jpg" alt="22.jpg" /></p> <p style="text-indent: 2em">装载模块<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/po1kwyo2m0r.jpg" title="1429878623131346.jpg" alt="23.jpg" /></p> <p style="text-indent: 2em">添加内核参数,使之永久有效<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">[root@Firewall ~]# vim /etc/sysctl.conf net.netfilter.nf_conntrack_acct = 1 [root@Firewall ~]# sysctl -p</pre> <p style="text-indent: 2em"><strong>应用层过滤测试</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">案例要求<br style="text-indent: 2em" /></p> <p style="text-indent: 2em">假设内网主机由服务器代理上网,为提高工作效率,禁止内网用户登录QQ</p> <p style="text-indent: 2em">代理服务器:192.168.1.254(可访问网络),172.16.10.254</p> <p style="text-indent: 2em">内网客户端:172.16.10.12</p> <p style="text-indent: 2em">网络设置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/bg3z2ywhdam.jpg" title="1429878649641009.jpg" alt="24.jpg" /></p> <p style="text-indent: 2em"><img src="/upload/gs4jzzmle0b.jpg" title="1429878667298384.jpg" alt="25.jpg" /></p> <p style="text-indent: 2em">172.16.0.0/16的网段在VMnet1内</p> <p style="text-indent: 2em">开启服务器路由转发功能<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">[root@Firewall ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@Firewall ~]# sysctl -p</pre> <p style="text-indent: 2em">设置防火墙规则,使内网可访问网络<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/4mzf0mpam3j.jpg" title="1429878687974420.jpg" alt="26.jpg" /></p> <p style="text-indent: 2em">查看是否可以访问网络</p> <p style="text-indent: 2em"><img src="/upload/x5501wox4cp.jpg" title="1429878705117810.jpg" alt="27.jpg" /></p> <p style="text-indent: 2em">我们找一个小号登录QQ测试<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/qyhrj3dwmuw.jpg" title="1429878729121635.jpg" alt="28.jpg" /></p> <p style="text-indent: 2em">此时是可以登录的,我们下线,设置防火墙规则,禁用QQ</p> <p style="text-indent: 2em"><img src="/upload/llrauaxlirt.jpg" title="1429878752303646.jpg" alt="29.jpg" /></p> <p style="text-indent: 2em">再次登录试试</p> <p style="text-indent: 2em"><img src="/upload/yhkpkopryaa.jpg" title="1429878772438002.jpg" alt="30.jpg" /></p> <p style="text-indent: 2em">登录失败,我们看一下防火墙,有没有匹配到报文</p> <p style="text-indent: 2em"><img src="/upload/aefxp3tx4vv.jpg" title="1429878789113183.jpg" alt="31.jpg" /></p> <p style="text-indent: 2em">看,已经有报文被拒绝了,至此iptables基于layer7实现应用层过滤以实现,需要禁止其他程序,请自行添加相应规则</p> <p style="text-indent: 2em"><strong>The end </strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">基于layer7的应用层防火墙就说到这里了,除了编译内核时比较费时间外,应该没什么别的麻烦的问题,希望本文可以帮到有需要的小伙伴,配置过程中遇到问题可留言。以上仅为个人学习整理,如有错漏,大神勿喷~~~</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信