软件环境: Red Hat Enterprise Linux Server release 5.8
内核 :2.6.28.10
目标功能:
为iptables增加layer7补丁,实现应用层过滤。通过独立的l7-protocols协议包提供对各种应用层数据的特征识别定义,来完成整体实现过程
目的:
练习给内核打补丁,练习给软件打补丁
过程:
1、给内核打补丁,并重新编译
2、给iptables源码打补丁,并重新编译iptables
3、安装l7proto协议定义包
4、用iptables命令设置应用层过滤规则
准备工作 :
linux内核源码包: linux-2.6.28.10.tar.gz
layer补丁源码包:netfilter-layer7-v2.22.tar.gz
iptables源码包: iptables-1.4.6.tar.bz2
协议定义包: l7-protocols-2009-05-28.tar.gz
步骤:
1、合并kernel+layer7 补丁
- # tar xf linux-2.6.28.10.tar.gz -C /usr/src/
- # tar xf netfilter-layer7-v2.22.tar.gz -C /usr/src/
- # cd /usr/src/
- # ln -sv linux-2.6.28.10 linux
- #cd linux
- # patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch 把补丁融合到内核
2、配置新内核
- # cp /boot/config-2.6.18-308.el5 .config 使用当前系统内核配置文件 修改一下
- #make menuconfig
- 配置内核参数
- 使用↑↓ → ← 方向键 来选择
- 菜单项 <Select>、<Exit>、<Help>
- 空格键用于选择配置类型
- 对不同功能的配置选择
- [ ]:空选时表示不需要在新内核中使用该功能
- [ M ]:表示将此项功能编译为模块,以便在需要时加载 Module
- [ * ]:将此项功能直接编入新内核,作为新内核的一部分需要配置哪些内核编译参数
- Networking support → Networking Options →Network packet filtering framework →Core Netfilter Configuration
- <M> Netfilter connection tracking support
- <M> “layer7” match support
- <M> “string” match support
- <M> “time” match support
- <M> “iprange” match support
- <M> “connlimit” match support
- <M> “state” match support
- <M> “conntrack” connection match support
- <M> “mac” address match support
- <M> "multiport" Multiple port match support
- Networking support → Networking Options →Network packet filtering framework → IP: Netfilter Configuration
- <M> IPv4 connection tracking support (required for NAT) IP包过滤功能
- <M> Full NAT
- <M> MASQUERADE target support
- <M> NETMAP target support
- <M> REDIRECT target support
还有一些内核参数我们用不到的也可以去掉(例如ipv6的 打印机的) ,编译就会稍微快一点 ,但是如果我们还不熟悉 ,最好就都编译上。这个根据个人情况而定。
3、编译及安装模块,新内核
#make && make modules_install && make install
4、重启选择新的内核引导
- # vim /etc/grub.conf
- default=0 这里改为 0 从新内核引导
- timeout=5
- splashimage=(hd0,0)/grub/splash.xpm.gz
- hiddenmenu
- title Red Hat Enterprise Linux Server (2.6.28.10lay7) 新内核
- root (hd0,0)
- kernel /vmlinuz-2.6.28.10lay7 ro root=/dev/vol0/root rhgb quiet
- initrd /initrd-2.6.28.10lay7.img
1、卸载现有的iptables
- # cp /etc/rc.d/init.d/iptables /tmp
- # cp /etc/sysconfig/iptables-config /tmp
- #rpm -e --nodeps iptables iptables-ipv6 iptstate
- ^忽略依赖关系 ^卸载原来的iptables
2、合订补丁,并重新安装iptables
- # tar jxvf iptables-1.4.6.tar.bz2 –C /usr/src
- # cd /usr/src/iptables-1.4.6
- # cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/
- 整合补丁
- # ./configure --prefix=/ --with-ksource=/usr/src/linux
- ^安装位置 linux的源码包的位置
- # make
- # make instal
- #mv /tmp/iptables /etc/rc.d/init.d
- #mv /tmp/iptables-config /etc/sysconfig/iptables-config
- #chkconfig --add iptables 开机自动启动
- # tar zxvf l7-protocols-2009-05-28.tar.gz
- # cd l7-protocols-2009-05-28
- # make install
匹配格式:-m layer7 --l7proto 协议名
协议定义文件位于: /etc/l7-protocols/protocols
支持以下常见应用层协议的过滤:
- qq:腾讯公司QQ程序的通讯协议
- msnmessenger:微软公司MSN程序的通讯协议
- msn-filetransfer:MSN程序的文件传输协议
- bittorrent:BT下载类软件使用的通讯协议
- xunlei:迅雷下载工具使用的通讯协议
- edonkey:电驴下载工具使用的通讯协议
规则实例 :
1、layer7匹配
限制QQ
#iptbles -A FORWARD -m layer7 --l7proto qq -j drop
限制 xunlei
#iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
2、时间匹配
匹配格式:-m time --timestart 起始时间 --timestop 结束时间 --wekdays 每周的哪些天
时间: 18:00
每周的哪些天: Mon、Tue、Wed、Thu、Fri、Sat、Sun
#iptables -A FORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
3、并发连接数匹配
匹配格式:-m connlimit --connlimit-above 上限数
#iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 --connlimit-mask 24 -j DROP
4、字符串匹配
匹配格式:-m string --string “字串” --algo 算法
算法指的是用于比对数据包中字符串的特定方法,可以为 bm 或 kmp ,其中任一种均可
#iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP