重新编译内核以支持 iptables支持7层过滤
获取内核源码
1.下载内科源码包
wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-431.5.1.el6.src.rpm
创建用户mockbuild
# useradd mockbuild
生成内核源码包
# rpm -ivh kernel-2.6.32-431.5.1.el6.src.rpm
# cd rpmbuild/SOURCES/
# tar xf linux-2.6.32-431.5.1.el6.tar.bz2 -C /usr/src/
# ln -sv /usr/src/linux-2.6.32-431.5.1.el6 /usr/src/linux
`/usr/src/linux' -> `/usr/src/linux-2.6.32-431.5.1.el6'
2.给内核打补丁
# tar xf netfilter-layer7-v2.23.tar.bz2
# cd /usr/src/linux
# cp /boot/config-2.6.32-358.el6.i686 .config
# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
3.生成编译内核所需的配置文件.config
# make menuconfig
选择-*- Networking support --->
选择 Networking options --->
选择[*] Network packet filtering framework (Netfilter) --->
选择 Core Netfilter Configuration --->
将"layer7" match support 编译为内核模块
确保启用以下功能
取消红帽内核的模块签名认证
选择[*] Enable loadable module support --->
取消Module signature verification (EXPERIMENTAL)
选择 -*- Cryptographic API ---> 取消In-kernel signature checker (EXPERIMENTAL)
为新编译的内核添加新的版本号
保存退出
4.编译安装内核
# make -j 4
# make moudles_install
#make install
5.为新编译的iptables提供服务脚本
# cp /etc/rc.d/init.d/iptables /root/
6.为新编译的iptables提供服务配置文件
# cp /etc/sysconfig/iptables-config /root
7.卸载系统中原来的iptables
关闭iptables
# service iptables stop
卸载iptables
# rpm -e iptables iptables-ipv6 --nodeps
8.重启系统启用新内核
内核编译成功
9.编译安装iptables
# tar xf iptables-1.4.20.tar.bz2
为iptables打补丁
# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-
kernel2.6.20forward/* /root/iptables-1.4.20/extensions/
查看为iptables打的补丁
# cd iptables-1.4.20
# ./configure --prefix=/usr --with-ksource=/usr/src/linux
# make
# make install
10.配置iptables
为iptables提供服务脚本
# cp /root/iptables /etc/rc.d/init.d/
为iptables提供配置文件
# cp /root/iptables-config /etc/sysconfig/
11.为layer7模块提供所识别的协议的特征码
# tar xf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
查看能够识别的协议的特征码
# ls /etc/l7-protocols/protocols/ 100bao.pat dazhihui.pat hotline.pat ncp.pat shoutcast.pat tesla.pat aim.pat dhcp.pat http.pat netbios.pat sip.pat tftp.pat aimwebcontent.pat directconnect.pat http-rtsp.pat nntp.pat skypeout.pat thecircle.pat applejuice.pat dns.pat ident.pat ntp.pat skypetoskype.pat tonghuashun.pat ares.pat doom3.pat imap.pat openft.pat smb.pat tor.pat armagetron.pat edonkey.pat imesh.pat pcanywhere.pat smtp.pat tsp.pat battlefield1942.pat fasttrack.pat ipp.pat poco.pat snmp.pat unknown.pat battlefield2142.pat finger.pat irc.pat pop3.pat socks.pat unset.pat battlefield2.pat freenet.pat jabber.pat pplive.pat soribada.pat uucp.pat bgp.pat ftp.pat kugoo.pat qq.pat soulseek.pat validcertssl.pat biff.pat gkrellm.pat live365.pat quake1.pat ssdp.pat ventrilo.pat bittorrent.pat gnucleuslan.pat liveforspeed.pat quake-halflife.pat ssh.pat vnc.pat chikka.pat gnutella.pat lpd.pat radmin.pat ssl.pat whois.pat cimd.pat goboogy.pat mohaa.pat rdp.pat stun.pat worldofwarcraft.pat cisco***.pat gopher.pat msn-filetransfer.pat replaytv-ivs.pat subspace.pat x11.pat citrix.pat guildwars.pat msnmessenger.pat rlogin.pat subversion.pat xboxlive.pat counterstrike-source.pat h323.pat mute.pat rtp.pat teamfortress2.pat xunlei.pat cvs.pat halflife2-deathmatch.pat napster.pat rtsp.pat teamspeak.pat yahoo.pat dayofdefeat-source.pat hddtemp.pat nbns.pat runesofmagic.pat telnet.pat zmaap.pat
12.layer7模块的使用
修改服务脚本将/usr/sbin/$IPTABLES改为/usr/sbin/$IPTABLES 如下所示:
# vim /etc/rc.d/init.d/iptables
if [ ! -x /usr/sbin/$IPTABLES ]; then
echo -n $"${IPTABLES}: /usr/sbin/$IPTABLES does not exist."; warning; echo
exit 5
fi
编辑配置文件:/etc/sysctl.conf此参数需要装载ip_conntrack_ftp模,同时也装载ip_nat_ftp模块实现nat功能
# vim /etc/sysctl.conf 在配置文件中添加如下一行
net.netfilter.nf_conntrack_acct = 1
启动iptables
7层过滤使用的语法:
iptables -A [ specify table ] chain -m layer7 --l7proto [ protocol_name ] -j [action]
例:限制172.16.0.0/16网络qq的登录
# iptables -A FORWARD -s 172.16.0.0/16 -m layer7 --l7proto qq -j REJECT