Linux之防火墙篇三layer7应用层过滤

本文发布时间: 2019-Mar-21
一、准备工作 1、iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能。难以判断数据包对应于何种应用程序(如:QQ、迅雷等)。 安装netfilter-layer7补丁包的作用是为Linux内核、iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能。通过独立的l7-protocols协议包提供对各种应用层协议的特征识别与定义,便于更新。2、整体实现过程 1、添加内核补丁,重新编译内核,重启系统并以新内核引导系统 2、给下载的iptables打补丁,并重新制作成rpm包安装 3、安装i7-protocols协议包 4、使用iptables命令设置应用层过滤规则3、 需求描述 1、重新编译Linux内核,添加l7-filter应用层过滤补丁 2、重新编译iptables,添加l7-filter应用层过滤补丁 3、设置过滤规则,禁止使用QQ、MSN等聊天工具 4、设置过滤规则,禁止使用迅雷、电驴等下载工具4、下载所需要的包:Linux内核源码包:kernel-2.6.32-431.5.1.el6.src.rpmlftp 172.16.0.1:/pub/Sources/sources/kerneliptables源码包:iptables-1.4.20.tar.bz2lftp 172.16.0.1:/pub/Sources/sources/iptableslayer7补丁包源码包:netfilter-layer7-v2.23.tar.bz2lftp 172.16.0.1:/pub/Sources/sources/iptables协议定义包:l7-protocols-2009-05-28.tar.gzlftp 172.16.0.1:/pub/Sources/sources/iptables5、查看系统和防火墙版本#查看系统版本[root@localhost ~]# uname -srLinux 2.6.32-431.el6.x86_64#查看防火墙版本[root@localhost ~]# rpm -qa | grep iptablesiptables-ipv6-1.4.7-11.el6.x86_64iptables-1.4.7-11.el6.x86_64提示:下载相应补丁包,linux内核补丁版本一定要与所下载内核版本号一致,否则打内核补丁时出现找不到文件提示!二、实战 别忘了包组~yum groupinstall -y "Desktop Platform Development"yum groupinstall -y "Server Platform Development"yum groupinstall -y "Development tools" 1、解压并编译内核useradd mockbuild //添加安装src格式的软件包需要的用户rpm -ivh kernel-2.6.32-431.5.1.el6.src.rpm //安装内核会在当前用户目录下生成一个rpmbuild目录,而目录中有我们需要源码格式的内核文件tar xf rpmbuild/SOURCES/linux-2.6.32-431.5.1.el6.tar.bz2 -C /usr/src/cd /usr/src/ln -sv linux-2.6.32-431.5.1.el6/ linux //切换目录为内核创建软链接,也可以重命名为linux;建议创建链接文件 2、给内核打补丁tar xf netfilter-layer7-v2.23.tar.bz2 -C /usr/src/ //解压缩layer7cd /usr/src/linux //切换到内核目录为内核打补丁patch -p1 < ../netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patchcp /boot/config-2.6.32-431.el6.x86_64 /usr/src/linux/.config //拷贝当前系统的config编译配置文件为模板编译内核make menuconfig //配置内核参数 配置内核参数按方向键"↑ ↓"选择内核参数,以"--->"结尾的表示还有子选项,按回车键进入子选项; "← →"选择菜单项;"Tab"键切换到菜单项空格键选择内核编译类型:[ ]:空选型表示不需要再新内核中使用该功能。[M]:表示将此项功能编译为模块,以便在需要时加载。[*]:将此功能直接编入新内核,作为内核的一部分。执行完"make menuconfig"命令后会进入内核编辑模式,紫色表示选中,按回车进入下一级菜单;如下图【图1】【图2】选中的内核参数,按回车键进入下一级菜单:【图3】选中的内核参数,按回车键进入下一级菜单:【图4】选中的内核参数,按回车键进入下一级菜单:【图5】选中的内核参数,按"空格键"选择为"<M>"表示编译成内核模块,启用这一项表示让内核支持7层过虑功图5选择Exit退出到图1页面选择"【图6】"选中的内核参数,按回车键进入下一级菜单:取消【图7】选中的内核参数,不编译此项功能:选中【图8】内核参数,按回车键进入下一级菜单:取消【图9】选中的内核参数,不编译此项功能:一直选择Exit,直至出现【图10】中提示,选择"Yes"保存并退出:注释:【图6】到【图9】不编译那两项内核参数的原因是因为,我们是从红帽下载的最新的内核文件,虽然版本看着像是有点老,但这是红帽一惯的命名风格,其实内核文件中包含了目前最新内核的新特性;而netfilter-layer7并不支持新的内核,于是就改了netfilter-layer7文件让它支持新的内核;从红帽官方下载的内核文件在编译时需要密钥验证,我们又没有密钥,所以就去掉上面那两项内核参数,在编译时不让检查密钥验证,这样我们就能顺利的编译安装通过了。而netfilter-layer7文件点上面的链接可以直接下载,我已上传到51cto上面,但是在下载前需要登录51cto;当然如果不使用这里的netfilter-layer7,从官方网站下载也可以,但是那就要下载老一点版本的内核了,其他做法都是一样的。 3、编译并安装内核注:执行下面命令编译安装内核,与平时安装源码包的方式不尽相同,编译内核是个漫长的过程,根据电脑性能不同编译的时间也不尽相同,但至少也要30分钟左右makemake modules_installmake install 4、重启系统,启用新内核编译安装完成后重启系统,在grup引导菜单中选择新编译的内核CentOS(2.6.32)启动系统: 5、编译iptablestar xf iptables-1.4.20.tar.bz2cd iptables-1.4.20cp /usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/ //为iptables打补丁service iptables stop //编译之前停止iptables服务cp /etc/rc.d/init.d/iptables /root/ //备份iptables服务脚本cp /etc/sysconfig/iptables-config /root/ //备份iptables-configrpm -e iptables iptables-ipv6 --nodeps //卸载原来的iptables./configure --prefix=/usr --with-ksource=/usr/src/linux make && make install //重新安装编译cp /root/iptables /etc/rc.d/init.d //把备份的服务脚本复制回去cp /root/iptables-config /etc/sysconfig 6、为layer7模块提供其所识别的协议的特征码 tar zxvf l7-protocols-2009-05-28.tar.gz //解压缩l7-protocols协议包cd l7-protocols-2009-05-28make install此时整个内核编译就成功安装升级完成了,现在只需要编写iptables规则就可以对7层协议做相应的限制和过滤了。支持的layer7应用层协议 匹配格式:iptables [-t 表名] -m layer7 --l7proto 协议名 支持以下常见应用层协议: QQ:腾讯公司QQ程序的通讯协议 msnmessenger:微软公司MSN程序的通讯协议 msn-filetransfer:MSN程序的文件传输协议 xunlei:迅雷下载工具使用的协议 其他应用层协议:http、ftp、dns、imap、pop3等示例:过滤使用QQ协议的转发数据iptables -A FORWARD -m layer7 --l7proto qq -j DROP除了针对应用层协议过滤之外,还支持以下过滤方式: 根据时间过滤 匹配格式:-m time --timestart 起始时间 --timestop 结束时间 --weekdays 每周的那些天 时间格式以24小时制表示,如早9:30 晚18:00 每周一至周日对应的英文缩写表示为:Mon、Tue、Wed、Thu、Fri、Sat、Sun 也可以使用数字表示周一至周日,如:1、2、3、4、5、6、7 根据并发连接数过滤 匹配格式:-m connlimit --connlimit-above 上限数 根据字符串过滤 匹配格式:-m string --string “字符串” --algo {bm|kmp} algo是一种算法(算法指的是用于比对数据包字符串的特定方法),可以为bm或kmp,其中任意即可 查看都支持哪些协议:ls l7-protocols-2009-05-28/protocols/下面我们以一个案例来设置iptables的7层过滤规则 Client为虚拟机,系统:Windows XP 网卡:使用网上类型为Vmnet2 IP:192.168.254.60 网关:192.168.254.61 Iptables为虚拟机,系统:Centos6.4_x86_64 网卡:eth3为内网的网关使用网上类型为VMnet2;eth0为外网IP使用网卡类型为桥接.eht1 IP:192.168.254.61 eth0 IP:172.16.12.1 案例描述:在Iptables服务器上面做7层防火墙过虑限制客户端不能上QQ、用迅雷下载数据 1、在Iptables Server上开启路由转发功能:[root@localhost ~]# vim /etc/sysctl.confnet.ipv4.ip_forward = 1[root@localhost ~]# sysctl -p //执行此命令让其生效 2、查看nf_conntrack模块是否加载:[root@localhost ~]# lsmod | grep -w nf_conntrack 如果没有装载: modprobe nf_conntrack //装载nf_conntrack模块 3、查看内核连接追踪功能是否开启:[root@localhost ~]# sysctl -a | grep acctkernel.acct = 4 2 30net.netfilter.nf_conntrack_acct = 1 //如果该值为0,修改为1[root@localhost ~]# vim /etc/sysctl.confnet.netfilter.nf_conntrack_acct = 1[root@localhost ~]# sysctl -p //使之生效 也可使用此项命令修改,但一重启系统便会失效[root@localhost ~]# sysctl -w net.netfilter.nf_conntrack_acct=1 4、添加一条SNAT规则参实现让内网访问外部网络:ptables -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source 172.16.12.1 设置规则:拒绝QQ登录与使用迅雷下载iptables -A FORWARD -s 192.168.254.0/24-m layer7 --l7proto qq -j DROPiptables -A FORWARD -s 192.168.254.0/24-m layer7 --l7proto xunlei -j DROP验证如下图:


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表