一、使 l7过滤应用层协议
1. L7概念:是一个 linux内核包分类器,和其他的分类器不同, L7不仅仅是对协议的端口定义,它的表达式和应用层协议匹配,以此来检验使用的是那种协议?
2. L7对处理器和内存敏感,使用 L7情况:
i.需要匹配一些使用未定义的协议端口( P2P文件应用共享)
ii. 有意义的通讯使用非标准端口(如: http使用了 8080端口)
3. L7的组成:三部分组成:一个是内核补丁,一个是 iptables补丁,一个是协议定义文本。
4. 使用 netfilter/iptables封锁企业 QQ,msn, xulei
i. 需要的软件包: linux-2.6.-28.tar.bz2, netfilter-layer7-v2.21.tar.gz, iptables-1.4.8.tar.bz2.l7-protocols.tar.gz
ii. 把上面的软件包解压到 /usr/src (个人习惯 )
a) Tar –jxvf linux-2.6.-28.tar.bz2 –C /usr/src
b) Tar –jxvf iptables-1.4.8.tar.bz2 –C /usr/src
c) Tar –zxvf netfilter-layer7-v2.21.tar.gz –C /usr/src
d) Tar –zxvf ll7-protocols.tar.gz –C /usr/src
iii. 卸载 系统自带的 iptables
a) 先用 rpm –qa | grep iptables
b) Rpm –e iptables iptables-ipv6 –nodeps (yum remove iptable)
iv. 安装 l7
a) 给新内核打上 l7补丁
Ø Cd /usr/src/linux-2.6.28.8
Ø Patch –p1 < /usr/src/net/netfilter-layer7-v2.21/keer-2.6*.patch
v. 编译内核
a) 编译环境: GCC yum –y install gcc* rpm –import /etc/pki/rpm-gpg/RPM*
b) 修改内核配置项
Ø Make mrproper(清除已编译的内核 )
Ø Make oldconfig 全部保持默认 mv /boot/config-2.6.18-186.el5 /usr/src/linux-2.6.28.8/.config
Ø Make menuconfig (需要安装 ncurses-devel,可以编译成模块,再模块安装 )
General setup --->
Prompt for development and/or incomplete code/drivers 必选
Networking --->
Networking options --->
Network packet filtering framework (Netfilter) --->
Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration ---> 该项下的所有项目建议都选上
<M> Netfilter connection tracking support 这个项目必需选上,下面才会出现 layer7的选项
<M> "layer7" match support 必选
Layer 7 debugging output 必选
IP: Netfilter Configuration ---> 该项下的所有项目必需都选上
u 编译并安装新内核 make && make modules_install && make install
u 设置新内核为默认启动,如果远程连接服务器则必须要设置,在 /etc/gurb.conf 中将 default=1改成 default=0
vi. 编译安装 iptables并支持 layer7
a) 编译安装 iptables并支持 layer7
Ø Cp –R
/usr/src/netfilter-layer7-v2.22/iptables-1.4.1forward-for-kernel-2.6.20forward/libxt_layer7.* /usr/src/iptables-1.4.8/extensions/
Ø [root@l1 iptables-1.4.8]#./configure –with-ksource=/usr/src/linux-2.6.28
Ø Make && make install
b) 安装 l7协议
Ø Mkdir /etc/l7-protocols
Ø Mv /usr/src/ l7-protocols-2009-5-10 /usr/src/l7-protocols
Ø Cp –R /usr/src/ l7-protocols /usr/src/iptables-1.4.8/
Ø Make && make install
二、layer7规则示例
1. layer7 match
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto qq -j DROP
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto msnmessenger -j DROP
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto msn-filetransfer -j DROP
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto xunlei -j DROP
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto edonkey -j DROP
[root@l1 /]# iptables -A FORWARD -m layer7 –l7proto bittorrent -j DROP
2. string match
[root@l1 /]# iptables -A FORWARD -p udp –dport 53 -m string –string "tencent" –algo bm -j DROP
[root@l1 /]# iptables -A FORWARD -p udp –dport 53 -m string –string "verycd" –algo bm -j DROP
[root@l1 /]# iptables -A FORWARD -p tcp –dport 80 -m string –string "sex" –algo bm -j DROP
3. state match
[root@l1 /]# iptables -A FORWARD -m state –state NEW -p tcp ! –syn -j DROP
[root@l1 /]# iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
4. connlimit match
[root@l1 /]# iptables -A FORWARD -p tcp –syn -m connlimit –connlimit-above 100 –connlimit-mask 24 -j DROP
5. time match
[root@l1 /]# iptables -A FORWARD -p tcp –dport 80 -m time –timestart 8:00 –timestop 17:00 –weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT |