设为首页 收藏本站
查看: 700|回复: 0

[经验分享] Netfilter/Iptables Layer7 应用层过滤策略部署

[复制链接]

尚未签到

发表于 2017-11-23 11:33:55 | 显示全部楼层 |阅读模式
Netfilter/Iptables Layer7 应用层过滤策略部署
环境:内核版本:Linux version 2.6.32-431.el6.x86_64
     iptables版本:iptables v1.4.7
     gcc版本:4.6.1
窗体顶端
窗体底端
简介
Netfilter/Iptables 作为一个典型的包过滤防火墙体系,对于网络层,传输层的数据包过滤具有
非常优秀的性能和效率,然而,对于一些面向局域网上网用户的Linux网关服务器,有时候还需要使
用QQ,MSN等聊天,使用BT下载工具等现象进行封锁。下面将介绍如何为Netfilter/Iptables 增加应用层过滤。
QQ,MSN等聊天,使用BT下载工具均使用了相对固定的应用层协议。使用L7-filter项目的补丁文件
包可以为linux内核增加相应的应用层过滤功能,结合其提供的l7-protocols第7层协议定义包,能够识别不同应用层的数据特征
L7-filter项目站点:http://l7-filter.sourceforge.net/  下载最新的补丁包及协议包
内核站点:http://www.kernel.org   下载内核,iptables的源码包
将netfilter-layer7 源码包中的对应补丁文件添加到内核源码中,对内核进行重新编译,安装,安装后使用新内核启动Linux操作系统。
注意:L7-filter补丁包内的数据,要与内核及iptables源码版本相匹配
注意:源码目录所在分区至少保持有2.5G的剩余磁盘空间。
窗体顶端
窗体底端
编译安装内核
  
1.解压释放netfilter-layer7和内核源码包,使用patch工具合并补丁文件
  tar xflinux-2.6.35.9.tar.bz2 -C /usr/src/   
  tar xfnetfilter-layer7-v2.23.tar.gz     
  cd /usr/src     
  ln -sn linux-2.6.35.9/linux     
  ll linux* -d     
    lrwxrwxrwx  1 root root   15 Aug 26 10:55 linux ->linux-2.6.35.9/     
     drwxrwxr-x 23root root 4096 Nov 23  2010linux-2.6.35.9
  #cd linux
  #patch -p1 </root/netfilter-layer7-v2.23/kernel-2.6.35-layer7-2.23.patch   
     patching fileinclude/linux/netfilter/xt_layer7.h     
     patching fileinclude/net/netfilter/nf_conntrack.h     
     patching filenet/netfilter/Kconfig     
     patching filenet/netfilter/Makefile     
     patching filenet/netfilter/nf_conntrack_core.c     
     patching filenet/netfilter/nf_conntrack_standalone.c   
     patching filenet/netfilter/regexp/regexp.c     
     patching filenet/netfilter/regexp/regexp.h     
     patching filenet/netfilter/regexp/regmagic.h     
     patching filenet/netfilter/regexp/regsub.c     
     patching filenet/netfilter/xt_layer7.c
   注意:【patch -p1 】 中“1” 是数字 1,不是小写字母 L
   
2.重新配置内核编译参数,添加state机制及layer7支持【仍在内核编译目录】
   cp /boot/config-2.6.32-431.el6.x86_64.config
   yum -y installgcc ncurses-devel
   make menuconfig
   在配置界面中,方向键用于定位需要配置的项目
    select      进入子配置菜单
    exit             返回上一层
    help             查看帮助信息
    空格               切换所选项目的编译类型
  三种状态:
    []         表示不需要该功能
    [M]        将功能编译成模块
   
  •         将功能直接编入内核
  •   Networkingsupport ---> Networking options ---> Network packet filtering framework(Netfilter)
      ---> CoreNetfilter Configuration --->
      <M>Netfilter connection tracking support  
       <M>   "layer7" match support   
       <M>   "string" match support
       <M>   "time" match support
       <M>   "iprange" address range matchsupport   
       <M>   "connlimit" matchsupport"  
       <M>   "state" match support  
       <M>   "conntrack" connection matchsupport
       <M>   "mac" address match support
       <M>   "multiport" Multiple port matchsupport
      Networkingsupport ---> Networking options ---> Network packet filtering framework(Netfilter)
       ---> IP:Netfilter Configuration --->
      <M> IPv4connection tracking support (required for NAT)
       <M>   Full NAT                                                                              
       <M>     MASQUERADE target support                                                            
       <M>     NETMAP target support                                                               
       <M>     REDIRECT target support   
      
      使用Exit返回 最后当提示保存时,使用Yes确认保存,修改将保存到源码目录中的.config文件中。
    3.编译新内核,并安装新内核文件
      make
      makemodules_install && make install
        新内核编译安装过程将花费较长时间,数十分钟到数小时不等
        新内核文件被安装到/boot目录,模块文件将复制到/lib/modules/2.6.35.9
        如果编译内核,途中断过,想重新编译,那么先使用
            makemrproper    删除不必要的文件和目录,初次编译内核不需要
            makeclean       删除不必要的模块和文件
       然后重新  makemenuconfig
    4.调整GRUB引导菜单,使系统以新内核启动,然后重启linux服务器 从新版内核启动
      vim/boot/grub/grub.conf   【修改default=0 ,1改为0】
           default=0
          timeout=5
         splashimage=(hd0,1)/boot/grub/splash.xpm.gz
          hiddenmenu
          title CentOS(2.6.35.9)
               root(hd0,1)
    reboot
    窗体顶端
    窗体底端
    安装iptables/l7-protocols协议包
    1、制作iptables升级包
      新建mockbuild用户,将l7-protocols-2009-05-28.tar.gz解压后的用于iptables 1.4.3和内核2.6.20之后的文件复制过来。
       注意目录层次。
      useraddmockbuild   
      rpm -ivhiptables-1.4.7-11.el6.src.rpm     
          warning:iptables-1.4.7-11.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51:NOKEY     
          1:iptables              ########################################### [100%]
      cd/root/rpmbuild/SOURCES/     
      tar xfiptables-1.4.7.tar.bz2                 
      cdiptables-1.4.7     
      cp/root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/*./extensions/     
      cd ..     
      tar -jcfiptables-1.4.7.tar.bz2 iptables-1.4.7/*   
      mviptables-1.4.7/ /tmp/
      cd ../SPECS/
      vim iptables.spec
           Version:1.4.7
           Release:11.5%{?dist}   //修改11.5表示升级
          
           CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
              --with-kernel=/usr/src/linux --with-kbuild=/usr/src/linux--with-ksource=/usr/src/linux  
                  //最后 三项 参数改为编译 的内核 linux所在目录
           %changelog
           * Wed May 172016 Fisher 1.4.7-11.5
           - L7-filtersupport              //在 %changelog 后添加这两段,加入更新日志(日期为当天)
      yum installrpm-build libselinux-devel -y
      rpmbuild -baiptables.spec
    2、开始升级iptables
      cd/root/rpmbuild/RPMS/x86_64/
      rpm -Uvhiptables-1.4.7-11.5.el6.x86_64.rpm iptables-ipv6-1.4.7-11.5.el6.x86_64.rpm //可加参数 --nodeps 强制安装
      cd /tmp
      tar xfl7-protocols-2009-05-28.tar.gz
      cd  l7-protocols-2009-05-28
      make install
          mkdir -p/etc/l7-protocols
          cp -R */etc/l7-protocols
    3、检查l7-protocols协议包
      rpm -ql iptables| grep layer7
        /lib64/xtables/libxt_layer7.so
    窗体顶端
    窗体底端
    启用七层过滤/添加规则
    1、启用七层过滤
      # modprobext_layer7
      # lsmod | grepxt_layer7
         xt_layer7              12060  0
          nf_conntrack           79850  1 xt_layer7
    2、查看并开启内核参数,确保net.netfilter.nf_conntrack_acct等于1
      # sysctl -a |grep conntrack_acct     
         net.netfilter.nf_conntrack_acct = 1
    3、在Iptables上做7层防火墙过虑限制
        vim/etc/sysctl.conf
          net.ipv4.ip_forward = 1      //开启路由转发功能
        sysctl -p
        lsmod | grep -wnf_conntrack    //查看nf_conntrack模块是否加载
           nf_conntrack           79485  6
          xt_layer7,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state                  
        sysctl -a |grep acct           //查看内核连接追踪功能是否开启
        kernel.acct = 42   30
            ###如果下面值为0,修改为1
       net.netfilter.nf_conntrack_acct = 1
            ###打开下面文件加入到里面执行如下命令即可生效
        vim/etc/sysctl.conf
           net.netfilter.nf_conntrack_acct = 1
       sysctl -p
            ###也可使用此项命令修改,但一重启系统便会失效
        sysctl -wnet.netfilter.nf_conntrack_acct=1
    4、添加规则
       支持的layer7应用层协议
         匹配格式:iptables [-t 表名] -m layer7--l7proto 协议名  
       根据时间过滤
         匹配格式:-m time --timestart 起始时间--timestop 结束时间 --weekdays 每周的那些天
       时间格式以24小时制表示,如早9:30 晚18:00
        每周一至周日对应的英文缩写表示为:Mon、Tue、Wed、Thu、Fri、Sat、Sun 也可以使用数字表示周一至周日,如:1、2、3、4、5、6、7
      根据字符串过滤
         匹配格式:-m string --string “字符串”--algo {bm|kmp}
    实例:
      使用layer7显示匹配策略过滤使用QQ,MSN Edonkey等应用层协议的数据访问
        iptables -AFORWARD -m layer7 --l7proto qq -j DROP
       iptables -AFORWARD -m layer7 --l7proto msn-filetransfer -j DROP
       iptables -AFORWARD -m layer7 --l7proto msnmessenger -j DROP
       iptables -AFORWARD -m layer7 --l7proto bittorrenr -j DROP
       iptables -AFORWARD -m layer7 --l7proto xunlei -j DROP
       iptables -AFORWARD -m layer7 --l7proto edonkey -j DROP
      使用--connlimit 显示匹配进行数据并发连接控制,超过100个并发连接将拒绝
        iptables -AFORWARD -p tcp --syn -m connlimit --connlimit-above 100 -j DROP
      使用--time显示匹配根据时间范围设置访问策略,允许周一到周五8:00-18:00之间的数据访问
        iptables -AFORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 18:00 --weekdaysMon,Tue,Wed,Thu,Fri -j ACCEPT
           星期一 MON  星期二 TUE  星期三 WED  星期四 THU  星期五 FRI  星期六 SAT  星期天 SUN
      使用string显示匹配策略过滤包含tencent,verycd,色情,成人电影的网络访问
        iptables -AFORWARD   -m string --string"qq" --algo bm -j DROP
        iptables -AFORWARD  -m string --string"tencent" --algo bm -j DROP
        iptables -AFORWARD  -m string --string"verycd" --algo bm -j DROP
        iptables -AFORWARD  -m string --string "色情" --algo bm -j DROP
        iptables -AFORWARD  -m string --string "成人电影" --algo bm -j DROP
      其中--algo参数用于指定字符串识别算法,bm 或 kmp
    5、查看支持的协议簇
        ls/etc/l7-protocols/protocols/
    窗体顶端
    窗体底端
    问题汇总
    1、在make 内核过程中报【gcc: error: elf_x86_64: No such file or directory】
       解决:gcc -v ,若gcc 版本为4.6 ,则不支持 linker-style 架构
          在内核目录arch/x86/vdso/Makefile中,大约在28,29行找到
         VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \   
                   -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
                  把"-m elf_x86_64" 替换为"-m64"
         然后再继续找,大约在72行左右,找到
        VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
         中的 "-m elf_i386" 替换为"-m32"
    2、在make 内核过程中报【drivers/net/igbvf/igbvf.h:129:15: 错误:重复的成员‘page’】
       解决:打开文件,看129行,代码为:struct page*page;再往上看,第124行,也有struct page*page这行代码,
       这个结构定义在内部的一个结构体中。就是他的名字与129行的重复了,而4.6.*的编译器不支持这种方式的定义,
       我们修改129行的代码为struct page *pagep;保存退出
    3、在rpmbuild -bbiptables.spec 制作rpm包报 【***ERROR: No build ID note found in /home/wuyang/rpmbuild/BUILDROOT/******
       error: Bad exitstatus from /var/tmp/rpm-tmp.BPd1OI (%install)】
       解决:在iptables.spec文件中任意位置添加如下参数:
        %define__debug_install_post   \
         %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts}"%{_builddir}/%{?buildsubdir}"\
       %{nil}
    重新打包



    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409839-1-1.html 上篇帖子: linux 登录异常--bash-4.2$故障 下篇帖子: 挂载本地镜像出现问题
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表