热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux2.6.32layer7,Iptables之七层过滤模块(六)

Layer7模块介绍在Linux的防火墙体系Netfilter下有一个独立的模块L7filter。从字面上看Netfilter是对网络数据的过滤,L7filter是基

Layer7模块介绍

在Linux的防火墙体系Netfilter下有一个独立的模块L7 filter 。从字面上看Netfilter是对网络数据的过滤,L7 filter是基于数据流应用层内容的过滤。不过实际上 L7 filter的本职工作不是对数据流进行过滤而是对数据流进行分类。它使用模式匹配算法把进入设备的数据包应用层内容与事先定义好的协议规则进行比对,如果匹配成功就说明这个数据包属于某种协议。

L7 filter是基于数据流工作的,建立在Netfilter connstrack功能之上。因为一个数据流或者说一个连接的所有数据都是属于同一个应用的,所以L7 filter没有必要对所以的数据包进行模式匹配,而只匹配一个流的前面几个数据包 (比如10个数据包)。当一个流的前面几个数据包包含了某种应用层协议的特征码时 (比如QQ),则这个数据流被L7 filter识别;当前面几个数据包的内容没有包含某种应用层协议的特征码时,则L7 filter放弃继续做模式匹配,这个数据流也就没有办法被识别,L7 filter所支持的协议可以去这个网址查看http://l7-filter.sourceforge.net/protocols

7层过滤首先需要内核支持,但是遗憾的是Centos内核中并没有layer7的模块。在Layer7官方测试中,内核版本2.6.28都是经过官方测试可用的(Centos5系列使用的是2.6.28)。在Centos6中使用的内核是2.6.32版本的,接下来我们使用Centos6去测试Layer7这个模块。具体对模块的测试可以去这个网址可以查看http://l7-filter.sourceforge.net/kernelcompat

PS:安装前可以查看一下/boot目录和grup.conf文件状态,然后比较跟安装后有什么变化。

Centos6.4实现Iptables七层过滤

一、下载需要的软件包(要注意版本)

kernel-2.6.32-431.5.1.el6.src.rpm

netfilter-layer7-v2.23.tar.gz

l7-protocols-2009-05-28.tar.gz

iptables-1.4.21.tar.gz

1

2

3

4

kernel-2.6.32-431.5.1.el6.src.rpm

netfilter-layer7-v2.23.tar.gz

l7-protocols-2009-05-28.tar.gz

iptables-1.4.21.tar.gz

二、内核打Netfilter补丁

$ date 112414442015

$ tar xvf netfilter-layer7-v2.23.tar.gz -C /usr/src

$ useradd mockbuild

$ rpm -ihv kernel-2.6.32-431.5.1.el6.src.rpm

$ cd rpmbuild/SOURCES/

$ tar xvf 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

$ cd /usr/src/linux

$ patch -p1 <../netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch

1

2

3

4

5

6

7

8

9

$date112414442015

$tarxvfnetfilter-layer7-v2.23.tar.gz-C/usr/src

$useraddmockbuild

$rpm-ihvkernel-2.6.32-431.5.1.el6.src.rpm

$cdrpmbuild/SOURCES/

$tarxvflinux-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

$cd/usr/src/linux

$patch-p1<..>

三、内核配置安装

# 复制2.6.32内核自带的.config文件拿来修改即可&#xff0c;以免出错.

$ cp /boot/config-2.6.32-431.el6.x86_64 /usr/src/linux/.config

# 在菜单模式开始编译前配置内核&#xff0c;需要做以下配置.

$ make menuconfig

1

2

3

4

5

# 复制2.6.32内核自带的.config文件拿来修改即可&#xff0c;以免出错.

$cp/boot/config-2.6.32-431.el6.x86_64/usr/src/linux/.config

# 在菜单模式开始编译前配置内核&#xff0c;需要做以下配置.

$makemenuconfig

1)取消模块签名认证

选择[*]  Enable loadable module support —> 取消[ ] Module signature verification (EXPERIMENTAL)

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

2)查看IPV4(IPV6)要支持以下功能

-*- Networking support  —>   Networking options  —>  [*] Network packet filtering framework (Netfilter)  —>  IP: Netfilter Configuration  —>   IPv4 connection tracking support (required for NAT)

   Full NAT

     MASQUERADE target support

     NETMAP target support

     REDIRECT target support

-*- Networking support  —>   Networking options  —>  [*] Network packet filtering framework (Netfilter)  —>  IPv6: Netfilter Configuration

3)开启layer7模块

-*- Networking support  —>   Networking options  —>  [*] Network packet filtering framework (Netfilter)  —>  Core Netfilter Configuration

  Netfilter connection tracking support

  “layer7” match support

  “string” match support

  “time”  match support

  “iprange”  match support

  “connlimit”  match support

  “state”  match support

  “conntrack”  connection  match support

  “mac”  address  match support

  “multiport” Multiple port match support

4)给内核起一个命令便于识别

General setup  —>  (-2.6.28.ywnds) Local version – append to kernel release

d626bc8776b9dde91a23a970ff3b72b4.png

四、内核开始编译安装

# 编译整个内核模块.

$ make

# 先安装模块.

$ make modules_install

# 再安装内核.

$ make install

1

2

3

4

5

6

7

8

# 编译整个内核模块.

$make

# 先安装模块.

$makemodules_install

# 再安装内核.

$makeinstall

五、卸载原有Iptables

$ cp /etc/init.d/iptables ~/iptables

$ cp /etc/sysconfig/iptables-config ~/iptables-config

# 备份服务脚本&#xff0c;脚本配置文件&#xff0c;规则表.

$ cp /etc/sysconfig/iptables ~/iptables-rule

# 卸载现有的iptables(如果有iptstate包也要卸载).

$ rpm -ve iptables-ipv6 iptables --nodeps

1

2

3

4

5

6

7

$cp/etc/init.d/iptables~/iptables

$cp/etc/sysconfig/iptables-config~/iptables-config

# 备份服务脚本&#xff0c;脚本配置文件&#xff0c;规则表.

$cp/etc/sysconfig/iptables~/iptables-rule

# 卸载现有的iptables(如果有iptstate包也要卸载).

$rpm-veiptables-ipv6iptables--nodeps

六、重启系统

e8e1c65f5575a427c626e7584bb8b695.png

PS&#xff1a;重启系统默认就会应用新的内核&#xff0c;主要是因为内核安装完之后&#xff0c;就会在/boot目录和grup.conf文件中添加相应的设置&#xff0c;如下&#xff1a;

5dc3df2cd402c5fc289bcf97f38d2501.png

66b6c6f90554dc00589204c07781e980.png

七、安装新Iptables

$ tar xvf iptables-1.4.21.tar.bz2 -C /usr/src/

$ cd /usr/src/iptables-1.4.21

# 复制layer7头文件和帮助文件到Iptables目录下(使iptbales能够支持layer7)

$ cp /usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/

# 编译安装

$ ./configure --prefix&#61;/usr --with-ksource&#61;/usr/src/linux

$ make && make install

# 恢复脚本&#xff0c;脚本配置文件以及规则表.

$ cp /root/iptables /etc/rc.d/init.d/

$ cp /root/iptables-config /etc/sysconfig/

# 启动服务.

$ ln -sv /usr/sbin/iptables /sbin/iptables

$ chkconfig --add iptables

$ service iptables start

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

$tarxvfiptables-1.4.21.tar.bz2-C/usr/src/

$cd/usr/src/iptables-1.4.21

# 复制layer7头文件和帮助文件到Iptables目录下(使iptbales能够支持layer7)

$cp/usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.*./extensions/

# 编译安装

$./configure--prefix&#61;/usr--with-ksource&#61;/usr/src/linux

$make&&makeinstall

# 恢复脚本&#xff0c;脚本配置文件以及规则表.

$cp/root/iptables/etc/rc.d/init.d/

$cp/root/iptables-config/etc/sysconfig/

# 启动服务.

$ln-sv/usr/sbin/iptables/sbin/iptables

$chkconfig--addiptables

$serviceiptablesstart

八、安装协议特征包l7-protocol-2009

$ tar xvf l7-protocols-2009-05-28.tar.gz -C /usr/src

$ cd /usr/src/l7-protocols-2009-05-28/

$ make install

$ mkdir -p /etc/l7-protocols

$ cp -R * /etc/l7-protocols

$ service iptables restart

$ ls /etc/l7-protocols/protocols/

#此目录下保存的都是7层过滤支持的所有协议

1

2

3

4

5

6

7

8

$tarxvfl7-protocols-2009-05-28.tar.gz-C/usr/src

$cd/usr/src/l7-protocols-2009-05-28/

$makeinstall

$mkdir-p/etc/l7-protocols

$cp-R */etc/l7-protocols

$serviceiptablesrestart

$ls/etc/l7-protocols/protocols/

#此目录下保存的都是7层过滤支持的所有协议

九、验证七层过滤QQ

# 查看版本.

$ iptables -V

iptables v1.4.21

# 查看帮助.

$ iptables -m layer7 --help

1

2

3

4

5

6

# 查看版本.

$iptables-V

iptablesv1.4.21

# 查看帮助.

$iptables-mlayer7--help

1.开启iptables路由转发功能.

$ sysctl -w net.ipv4.ip_forward&#61;1

1

$sysctl-wnet.ipv4.ip_forward&#61;1

2.设置SNAT(固定公网IP).

$ iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.60.10

1

$iptables-tnat-APOSTROUTING-s192.168.10.0/24-jSNAT--to-source192.168.60.10

3.不允许转发QQ协议.

$ iptables -A FORWARD -s 192.1681.10.0/24 -m layer7 --l7proto qq -j DROP

1

$iptables-AFORWARD-s192.1681.10.0/24-mlayer7--l7protoqq-jDROP

4.控制QQ可以使用的时间.

$ iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -m time --timestart 08:00:00 --timestop 12:00:00 -j DROP

1

$iptables-AFORWARD-s192.168.10.0/24-mlayer7--l7protoqq-mtime--timestart08:00:00--timestop12:00:00-jDROP

如果您觉得本站对你有帮助&#xff0c;那么可以支付宝扫码捐助以帮助本站更好地发展&#xff0c;在此谢过。



推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
author-avatar
键盘上的泪g_752
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有