全部博文(38)
分类: LINUX
2010-06-05 16:12:53
1、概述
L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的一个外挂模块, 它能使 Linux 的 iptables 支持 Layer 7 (OSI应用层) 过滤功能, 限制封杀 P2P、即时通讯(MSN、QQ、AIM)软件。
官方站点
2、L7filter功能
L7filter是Linux上的一个数据包分类器, 作为iptables的扩展它加强iptables在分析封包的能力,iptables在处理封包时不是简单的基于如网络应用port号,而是用正则表达 式匹配Layer7应用协议(HTTP、FTP)的传输数据,这样更能准确的分析数据包。
1. L7filter由于要处理应用层包信息,对性能有一定影响,它主要用于那些不能基于端口来处理包信息的情况。如下
2) 主要功能
3) L7filter目前有两个版本
3、L7filter安装
L7filter安装包括编译内核(打补丁)、iptables编译(打补丁)、安装L7protocols文件
内核kernel 2.6.21.1
并不是所有kernel都经测试过,下面链接列出了所内核的测试情况,这里我们选择2.6.21.1
Iptables 1.3.8
Kernel 版L7filter 2.17
包里有kernel和iptables补丁
应用层协议定义(11.22)
2) 安装步骤
cd /root/
tar xzf netfilter-layer7-v2.17.tar.gz
里面有kernel和iptables补丁
cd netfilter-layer7-v2.17
cp for_older_kernels/kernel-2.6.20-2.6.21-layer7-2.16.1.patch /usr/src/linux-2.6.21.1/
cd /usr/src/linux-2.6.21.1
patch -p1 < kernel-2.6.20-2.6.21-layer7-2.16.1.patch
"Prompt for development and/or incomplete code/drivers" ("Code maturity level options"下面)
"Network packet filtering framework" (Networking → Networking Options)
"Netfilter Xtables support"(...→Network packet filtering framework(netfilter)→Core Netfilter Configuration)
"Netfilter connection tracking support"(同一屏幕),选择"Layer 3 Independent Connection tracking"
"Connection tracking flow accounting"(同一屏幕)
"Layer 7 match support"(同一屏幕)
"FTP protocol support",“IRC protocol support”
最好把netfilter下的所有选项都选上。
解压iptables1.3.8
cd /usr/local/src/
tar jxf iptables-1.3.8.tar.bz2
复制netfilter-layer的iptables 补丁当前目录
cp /root/netfilter-layer7-v2.17/iptables-1.3-for-kernel-2.6.20forward-layer7-2.17.patch ./
cd iptables-1.3.8
patch –p1 < iptables-1.3-for-kernel-2.6.20forward-layer7-2.17.patch
chmod +x extensions/.layer7-test
make KERNEL_DIR=/usr/src/linux-2.6.21.1
make install KERNEL_DIR=/usr/src/linux-2.6.21.1
链接iptables到新的/usr/local/sbin/iptables
cd /sbin/
mv iptables iptables.old
ln -s /usr/local/sbin/iptables iptables
tar zxf l7-protocols-2007-11-22.tar.gz
cd l7-protocols-2007-11-22
make install
Layer7协议安装后的路径:/etc/l7-protocols/
4、L7filter使用
1) 协议匹配文件
iptables把数据包交由l7filter模块处理,而l7filter是用正则表达式的string-match方式辨别数据包的。L7filter依据/etc/l7-protocols/protocols/下.pat文件所提供的关键字业判断网络数据流。
?/P>
FTP ^220[x09-x0d -~]*ftp|331[x09-x0d -~]*password |
HTTP http/(0.9|1.0|1.1)[1-5][0-9][0-9][x09-x0d-~]* (connection:|content-type:|content-length:|date:)|post [x09-x0d -~]* http/[01].[019] |
^.?x02.+x03$ |
表一 Partten示例
表一是FTP、HTTP、QQ 的.pat文件
FTP:数据包中开头是“220”之后有“ftp”字样,并且之后有“331”和“password”则判断此连接是FTP服务。
HTTP:数据包中包含”http”,“connection:”,“content-type:”,“content-length:”內容时,则判断此连接是HTTP服务。
些.pat文件我们可以修改,或自己编写.pat。L7filter支持大部分的应用协议,在官方测试后的效果如下表所示
Protocol详细说明:
?/P>
分类 |
应用协议 |
Great |
FTP,DNS,HTTP,IMAP,irc,POP3,SMTP,SSH |
Good |
AIM,bittorrent,gopher,jabber,msn-filetransfer,msnmessenger,QQ,NTP,rtsp,SNMP,SOCKS,SSL,telnet,yahoo,xunlei,whois,ident,DHCP,CVS, |
Ok |
H323,http-rtsp,kugoo,SIP,skypeout,skypetoskype,uucp, |
Poor |
mute,netbois,tftp |
表二
L7filter还可以基于filetype限制网络数据包:jpg、exe、gif、htm、flv、tar等
2) 防火墙设定
L7filter有对网络数据包过滤,流量管理等功能,作为iptables的一个扩展,iptables加载l7filter的命令语法为
iptables [specify table & chain] -m layer7 --l7proto [name of protocol] -j [action]
通常是操作iptables的mangle表如
iptables -t mangle -A POSTROUTING -m layer7 --l7proto [etc.]
L7filter可以禁止QQ、HTTP、FTP、MSN、P2P等应用服务,假如我们作如下规则,不允许用户使用MSN,iptables命令规则为
iptables -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
--l7proto后面加/etc/l7-protocols/protocols下面protocol名msnmessenger
限制单一IP
iptables -s 192.168.100.161 -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
限制子网访问
iptables -s 192.168.100.0/24 -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
流量限制也是iptables与TC结合控制应用服务流量的,只有iptables规则不一样。官方有一个shell脚本自动加载iptables策略
。
删除iptables mangle和TC策略
iptables -t mangle –F
tc qdisc del dev eth0 root
#缺省控制
tc qdisc add dev eth0 root handle 1: htb default 10
#设置类1:1总频宽
tc class add dev eth0 parent 1: classid 1:1 htb rate 1200kbps ceil 1200kbps
#设置http流量
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 300kbps ceil 500kbps prio 1
#设置BT
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 20kbps ceil 200kbps prio 3
#设置队列规则
tc qdisc add dev eth0 parent 1:10 handle 11: sfq perturb 10
tc qdisc add dev eth0 parent 1:20 handle 12: sfq perturb 10
#设置过滤规则
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 1:20
#设置iptables
iptables -t mangle -A POSTROUTING -m layer7 --l7proto http -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 2
可以看出主要是在iptables里控制,TC和普通控制相同。
要统计跟踪应用服务的流量,如http、pop3等可用下面的命令得到
iptables -t mangle -A POSTROUTING -m layer7 --l7proto http
iptables -t mangle -A POSTROUTING -m layer7 --l7proto pop3
#查看流量
iptables -L -t mangle –nv
5、参考信息