iptables 7层过滤

  • 具体的应用层过滤应用程序,例如qq xunlei这些影响网络性能的应用程序,iptables + netfilter本身是不提供这种过滤机制的,如果需要实现上面的功能,就需要通过第三方的补丁软件来提供上述功能,并且需要注意的是netfilter实现的是规则的执行,iptables实现的是规则的制定,所以需要向两个都打补;
  • 尝试编译linux.26.29内核,并且向内核提供补丁文件
[root@server14 src]# xz -d linux-2.6.28.1.tar.xz 
[root@server14 src]# tar -xf netfilter-layer7-v2.22.tar.gz 
[root@server14 src]#  ln -sv linux-2.6.28.1 linux
  • 然后对内核打补丁
[root@server14 linux]# patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch 
  • 复制一个内核配置文件的样本,来进行修改
[root@server14 linux]# cp /boot/config-2.6.18-308.el5 .config
  • 执行修改版本信息
  make menuconfig 
  General setup  --->  ()  Local version - append to kernel release 
  • 找到关于网络服务的选项
    这里写图片描述
  • 通过下面的链接进入
Networking support ---> Networking options  --->
[*] Network packet filtering framework (Netfilter)  ---> 
 Core Netfilter Configuration  --->
  <M> Netfilter connection tracking support  
  • 启用上面的以及相关的子选项
    这里写图片描述

  • 继续找到并且启动这几个选项

<M>   "state" match support
<M>   "layer7" match support
<M>   "iprange" address range match support 
<M>   "conntrack" connection tracking match support 
<M>   "connlimit" match support"
<M>   "connbytes" per-connection counter match support 
  • 这里面可以按照需要启动iptables相应的扩展模块
    这里写图片描述
  • 关键的还需要打开关于ftp支持的模块
<M>   FTP protocol support
  • 这个模块里面的内容可以根据实际需要进行添加,更改关于netfilter的信息
Networking support ---> Networking options  --->
[*] Network packet filtering framework (Netfilter)  ---> 
IP: Netfilter Configuration  --->
  • 添加进去之后的第一个选项
<M> IPv4 connection tracking support (required for NAT) 
  • 因为这个是nat服务器需要的
    这里写图片描述
  • 同时还需要添加
<M>   Full NAT
<M>     MASQUERADE target support 
<M>     NETMAP target support 
<M>     REDIRECT target support
  • 说明一下,M表示作为模块,进行编译,*:表示作为内核核心的一部分;
  • 如果后期没有实际的需求,可以去掉一下不需要的模块,例如驱动的相关模块,因为这里使用的是虚拟机进行编译,对于不需要的驱动可以直接去掉
  • 编辑完成之后,保存修改后的配置文件,然后开始进行编译
    这里写图片描述
  • 如果是使用ssh链接的虚拟机或者服务器,建议使用screen命令,然后执行make,防止链接中断,编译停止
[root@server14 linux]# make 
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf -s arch/x86/Kconfig
........这个过程需要好久,好久
  • 因为是使用虚拟机进行编译,所以,需要保证内存在2048MB以上,并且虚拟机里面不建议使用make -j #,这个选项,几次使用的经历都出现了虚拟机自动关机的情况;
  • 这是编译完成之后的截图
    这里写图片描述
  • 执行make之后,执行
[root@server14 linux]# make modules_install 
这个过程大约几分钟
  • 然后执行
[root@server14 linux]# make install 
  • 修改默认使用第一个进行启动
[root@server14 linux]# vim /etc/grub.conf 

这里写图片描述

  • 使用命令重新启动,并且使用新的内核
[root@server14 ~]# shutdown -r now 
  • 启动完成之后,查看内核信息
    这里写图片描述

  • 接下来编译IPtabls

  • 如果需要使用RPM软件包提供管理和配置文件,可以将这些文件进行备份
[root@server14 ~]# cp /etc/init.d/iptables /mnt/
[root@server14 ~]# cp /etc/sysconfig/iptables-config /mnt/
[root@server14 ~]# cp /etc/sysconfig/iptables /mnt/iptablesRules
  • 首先停止服务,并且禁止开机自启动操作
[root@server14 ~]# /etc/init.d/iptables stop 
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
[root@server14 ~]# chkconfig iptables off 
  • 然后卸载使用iptables相关的软件包
[root@server14 ~]# rpm -e iptables-ipv6 iptables iptstate --nodeps
warning: /etc/sysconfig/iptables-config saved as /etc/sysconfig/iptables-config.rpmsave   //这个信息表示保存了一份之前安装的配置文件
  • 解压iptables的软件包
[root@server14 src]# tar xf iptables-1.4.6.tar.bz2 
  • 软件包里面的常见的扩展在
[root@server14 extensions]# pwd
/usr/src/iptables-1.4.6/extensions
  • 接下来需要复制补丁里面的扩展信息到上面的这个目录里面
[root@server14 extensions]# cp ../../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* .
其实只有两个文件
  • 接下来提供选项进行编译安装
[root@server14 iptables-1.4.6]# ./configure --prefix=/usr --with-ksource=/usr/src/linux
  • 因为iptables脚本里面的环境变量和使用make安装的脚本路径不一致,所以这样进行安装,需要修改iptables里面的路径
[root@server14 iptables-1.4.6]# vim /mnt/iptables
if [ ! -x /usr/sbin/$IPTABLES ]; then
    echo -n $"/usr/sbin/$IPTABLES does not exist."; warning; echo
    exit 0
fi
  • 复制启动脚本,并且配置开机自动启动
[root@server14 iptables-1.4.6]# cp /mnt/iptables /etc/init.d/
[root@server14 iptables-1.4.6]# chkconfig --add iptables
[root@server14 iptables-1.4.6]# chkconfig --list | grep iptables 
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • 复制配置脚本
[root@server14 iptables-1.4.6]# cp /mnt/iptables-config /etc/sysconfig/
  • 接下来启动iptables服务
[root@server14 ~]# /etc/init.d/iptables start
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: nat filter                [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]
  • 如果没有加载nf_nat_ftp修改配置文件添加
[root@server14 ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp ip_conntrack_netbios_ns"
  • 查看使用的模块信息
    这里写图片描述

  • 提供协议特征包

  • 对于layer7的过滤需要使用只idng特定的协议特征,协议特征包使用软件l7-protocols-2009-05-28.tar.gz软件包来提供;
  • 对于这个软件包只需要解压,并且执行make install
[root@server14 src]# tar -xf l7-protocols-2009-05-28.tar.gz 
[root@server14 src]# cd l7-protocols-2009-05-28
[root@server14 l7-protocols-2009-05-28]# make install 
mkdir -p /etc/l7-protocols
cp -R * /etc/l7-protocols
  • 建议重新启动一下iptables
[root@server14 l7-protocols-2009-05-28]# service iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: nf_nat_ftp ip_conntrac[  OK  ]s_ns 
  • 这个软件包支持的大量的协议在软件目录
[root@server14 l7-protocols-2009-05-28]# ll /etc/l7-protocols/protocols/
  • 支持的常见协议有:
    这里写图片描述

  • 关于需要layer7的基础环境配置已经完成了,接下来需要三台主机来模拟进行实验

    server12.com: 192.169.10.20/24表示内网主机
    server14.com:两个地址172.25.23.14/24虚拟为互联网地址; 192.168.10.100/24:表示内网主机,并且作为网关地址;
    server20.com:172.25.23.30/24表示为互联网地址
    这里添加一个windows xp professional 的主机,用来安装qq,等软件,IP地址为192.168.10.40/24

  • 首先配置windows xp的网络,并且测试网络是否正常

  • 找到右下角的网络按钮,选择属性,现在显示网络是不正常的;
    这里写图片描述
  • 选择TCP/IP点击属性
    这里写图片描述
  • 按照规划配置下面的地址

这里写图片描述
* 使用配置的地址尝试ping网关
这里写图片描述

  • 接下来需要添加一个SNAT规则用于将内网地址转换层虚拟的外网地址
[root@server14 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.25.23.14
  • 上面的规则用于虚拟内部主机192.168.10.0/24网段的主机访问172.25.23.14,接下来需要添加规则,配置真机允许172.25.23.14/25能够连上互联网
[root@my Desktop]# iptables -t nat -I POSTROUTING -s 172.25.23.14 -j MASQUERADE
[root@my Desktop]# iptables -I FORWARD -s 172.25.23.14 -j ACCEPT
  • 使用172.25.23.14/24ping互联网主机
    这里写图片描述

  • 使用Windows Xp来安装QQ,同时也可以验证网络访问是否正常
    这里写图片描述

  • 下载并且安装QQ,这里已经安装

  • 接下来指定规则,拒绝QQ的访问

[root@server14 ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -j REJECT
  • 这里在访问网络的过程中已经得到了一些匹配到的报文信息
    这里写图片描述

  • 这里查看QQ规则是否匹配到报文,这里关心FORWARD链,这里还没有报文匹配
    这里写图片描述

  • 尝试登陆QQ,这里显示由于防火墙的设置,导致登陆失败
    这里写图片描述
  • 查看是否匹配到QQ对应的报文
    这里写图片描述
  • 这里可以看到已经得到对应的报文,说明规则已经生效
  • 接下来删除这个规则,来允许QQ访问
    这里写图片描述
  • 这里显示的是需要手机QQ进行确认,说明登陆已经是成功的了,截一张小图,说明QQ已经登陆成功,在QQ已经登陆的情况下,添加上述规则,查看QQ是否会被强制下线;
  • 规则已经重新添加
    这里写图片描述
  • 虽然添加了规则,但是对于已经登陆的的QQ并不能够强制进行下线,所以状态仍然为在线
    这里写图片描述
  • 还需要注意的是,一旦在报文已经生效的情况下,将状态切换为隐身,那么再切换为在线,这个切换是不能够成功的;
  • 这个QQ版本使用的是最新的版本,上面的规则是可以进行生效的;

  • 因为上面重新编译了kernel iptables并且在指定模块时将time模块加入了,所以这里是可以使用iptablestime扩展模块的

   time
    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    --timestart hh:mm[:ss]
     --timestop hh:mm[:ss]
     [!] --monthdays day[,day...]
     [!] --weekdays day[,day...]
  • 通常来说startstop必须是结合起来使用的
  • 可以通过结合time模块来实现对于QQ的访问限制
[root@server14 ~]# iptables -R FORWARD 1 -m time --timestart 08:10:00 --timestop 12:00:00 -j DROP
[root@server14 ~]# iptables -A FORWARD  -m time --timestart 14:10:00 --timestop 18:00:00 -j DROP

猜你喜欢

转载自blog.csdn.net/qq_36294875/article/details/80138325