重新编译内核以支持 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

iptables基于应用层协议实现7层访问过滤_第1张图片

3.生成编译内核所需的配置文件.config


# make menuconfig


选择-*- Networking support  --->


iptables基于应用层协议实现7层访问过滤_第2张图片

选择      Networking options  --->

wKioL1M3w6SCSruVAACAMmbTe5Y050.jpg

选择[*] Network packet filtering framework (Netfilter)  --->

iptables基于应用层协议实现7层访问过滤_第3张图片

选择   Core Netfilter Configuration  --->

iptables基于应用层协议实现7层访问过滤_第4张图片

"layer7" match support 编译为内核模块

iptables基于应用层协议实现7层访问过滤_第5张图片

确保启用以下功能

wKioL1M3xPCzXIleAACru6bzQjE606.jpg

iptables基于应用层协议实现7层访问过滤_第6张图片

wKioL1M3xVSg8vk2AABURaX0r-A800.jpg

   取消红帽内核的模块签名认证

   选择[*] Enable loadable module support  --->

iptables基于应用层协议实现7层访问过滤_第7张图片

       取消Module signature verification (EXPERIMENTAL)

iptables基于应用层协议实现7层访问过滤_第8张图片

   选择 -*- Cryptographic API  ---> 取消In-kernel signature checker (EXPERIMENTAL)

iptables基于应用层协议实现7层访问过滤_第9张图片

iptables基于应用层协议实现7层访问过滤_第10张图片

   为新编译的内核添加新的版本号

wKiom1M3ybySlO9qAACHMXf3tBc971.jpg

   保存退出

iptables基于应用层协议实现7层访问过滤_第11张图片


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.重启系统启用新内核


wKiom1M30nGDBGxgAACKR8NNPp8528.jpg

   内核编译成功

wKiom1M304_Sou_IAAB1zRkqUjo928.jpg


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打的补丁

wKiom1M32ynShMCrAAC95A0X8pY842.jpg

# 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

wKioL1M33ougryvoAABZxfN4qVc649.jpg


查看能够识别的协议的特征码

# 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功能

wKiom1M38nGj9ULqAAEF1S0r45Q858.jpg

# vim /etc/sysctl.conf 在配置文件中添加如下一行

net.netfilter.nf_conntrack_acct = 1

启动iptables

wKioL1M39B_QeWq2AACc2dKig3Y219.jpg


iptables基于应用层协议实现7层访问过滤_第12张图片


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