欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

iptables与layer7协议的分析与应用

程序员文章站 2022-08-15 12:26:03
本次对iptabbles+l7的介绍分为两部分: 第一部分对系统升级打l7补丁 第二部分对iptables+l7的应用 第一部分:对系统升级打补丁 为了使用l7层协议进行控制,我们...


本次对iptabbles+l7的介绍分为两部分:

第一部分对系统升级打l7补丁

第二部分对iptables+l7的应用

第一部分:对系统升级打补丁

为了使用l7层协议进行控制,我们要在内核中打补丁文件,需要重新编译内核文件,下面的每一步都需要小心谨慎,不然就要重头开始了~需要软件的朋友可以Q395061796
 

软件需求:

iptables与layer7协议的分析与应用


1、 拆解内核文件与layer7文件:

[root@zhangc ~]# tar jxvf linux-2.6.25.19.tar.bz2 -C /usr/src/

[root@zhangc ~]# tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/

2、 将补丁文件放入内核文件夹内

[root@zhangc ~]# cd /usr/src/linux-2.6.25.19/

[root@zhangc linux-2.6.25.19]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
 

3、 使用内核文件配置新内核

[root@zhangc linux-2.6.25.19]# cp /boot/config-2.6.18-164.el5 .config

[root@zhangc linux-2.6.25.19]#make menuconfig

将一些需要的服务选项选为M,编译为模块。

第一部分选项:
 

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用


编译以下3个模块
 

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用
 

第二部分选项:
 

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用
 

编译以下4个模块
 

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

iptables与layer7协议的分析与应用

4.编译内核、安装模块、安装内核

[root@zhangc linux-2.6.25.19]# make

[root@zhangc linux-2.6.25.19]# make modules_install

[root@zhangc linux-2.6.25.19]# make install
 

5.卸载老版本iptables

[root@zhangc ~]# rpm -e iptables –nodeps

6.拆解并合并iptables+layer7补丁

[root@zhangc ~]# tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/

[root@zhangc ~]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/

[root@zhangc iptables-1.4.1.1-for-kernel-2.6.20forward]# cp * /usr/src/iptables-1.4.2/extensions/
 

7.编译并安装

[root@zhangc iptables-1.4.1.1-for-kernel-2.6.20forward]# cd /usr/src/iptables-1.4.2/

[root@zhangc iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19/

[root@zhangc iptables-1.4.2]# make

[root@zhangc iptables-1.4.2]# make install
 

8.安装l7-prorocols模式包

[root@zhangc ~]# tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/

[root@zhangc ~]# mv /etc/l7-protocols-2008-10-04/ /etc/l7-protocols

9.修改文件ip6tables,能正常启用service

[root@zhangc ~]# vim /etc/init.d/ip6tables /etc/init.d/iptables

[root@zhangc ~]# service iptables save【这条命令进行测试】

[root@zhangc ~]# service iptables restart
 

iptables与layer7协议的分析与应用


10.系统的修补已经完成,可以正常使用iptables+l7.
 

iptables与layer7协议的分析与应用

第二部分:iptables+l7的应用

l7规则的格式:

通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:
 

iptables [-t table] command [match] [target]

1.表(table)

[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。

Filter用于一般的信息包过滤,包含INPUT,OUTPUT,FORWARD链

Nat 用于要转发的信息包,包含PREROUTING,OUTPUT,POSTROUTING链
 

2.命令(command)

command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。

-A或append:将一条规则附加到链的末尾

-D或delete:删除一条规则

-P或policy : 设置链的缺省目标

-R或replace:替换指定链的相应规则

-L 或list : 列出指定链中的所有规则

-F 或flush:默认删除所有链中的规则;如果指定链名,该命令删除链中的所有规则

-N或new-chain:创建新的链(名称为命令中的指定名称)
 

-X:删除用户的空链

-i指的是数据流入的那个入口网卡

-o指的是出口网卡

-t指的是表格

-p则是指协议

-m表示调用模块

-j代表执行的动作

--sport代表源端口

--dport代表目的端口

--syn则表示带有syn标识设置的TCP数据包。SYN用于初始化一个TCP连接,如果自己机器上没有运行任何服务器,别人也就不会向你发送SYN数据包。
 

3.匹配(match)

iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。

-p或–protocol:该通用协议匹配用于检查某些特定协议。其中ALL为缺省值,缺省源于所有IP地址匹配。可以使用!符号表示不与该项匹配。

-s或source:根据数据包的源地址进行匹配。可以使用!表示不与该选项匹配。

-d或destination:根据数据包的目的地址进行匹配。可以使用!表示取反。
 

4.目标(target)

目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。在此对常用的3个进行简单介绍。
 

ACCEPT:当数据包与规则完全匹配时,会允许数据包通过。

DROP:当数据包与规则完全匹配是,会丢弃数据包。

MASQUERADE:当数据包与规则完全匹配时,将数据包的源IP地址伪装为当前接口的IP地址。
 

5.使用方法:

增加规则:

阻止来自某一特定IP范围内的数据包

#Iptables –t filter –A INPUT –s 192.168.100.0/24 –j DROP

阻止所有流向攻击者IP地址的数据包

#Iptables –t filter –A OUTPUT –d 192.168.100.0/24 –j DROP
 

删除规则:

#Iptabels –t filter –D OUTPUT –d 192.168.100.0/24 –j DROP

缺省策略

#iptabels –P INPUT DROP

地址伪装

#iptabels –t nat –A POSTROUTING –s 192.168.100.0/24 –o eth1 –j MASQUERADE
 

6.常用的iptables 模块

(1)string(字符串匹配,可以用做内容过滤)

#iptables -I FORWARD -d 192.168.3.0/24 -p tcp --sport 80 -m string --string "广告" -j DROP

(2)comment (备注匹配,可以支持最多256个字符)

#iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"

(3)connlimit(同时连接个数限制匹配) --connlimit-above n 限制为多少个。--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每个ip.
 

#iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT

(4)time(时间匹配)timestart开始时间。--timestop结束时间。

#iptables -t filter-A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri

(5) iprange (ip范围匹配)

#iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT

(6)state模块 –-state 分文三种状态:NEW、ESTABLISHED、RELATED

#iptables -t filter -A -m state --state ESTABLISHED,RELATED -j ACCEPT
 

7.案例:

试验目的:100.21-30网段上班时间能够能够访问FTP服务器,禁止上班时间访问sina网站,禁止使用迅雷、qq软件。

iptables与layer7协议的分析与应用


第一、 打开转发功能拒绝所有通过

[root@zhangc ~]# vim /etc/sysctl.conf

iptables与layer7协议的分析与应用

[root@zhangc ~]# sysctl –p

第二、实现对FTP服务器的访问

允许http通过

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.21-192.168.100.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
 

允许DNS通过

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.21-192.168.100.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
 

标准包过滤:每禁用一个服务,都要过滤掉流出的数据包和流入的数据包,相对比较稍微有些繁琐。

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.10-192.168.100.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

[root@zhangc ~]# iptbales -t filter -A FORWARD -p tcp --sport 21 -j ACCEPT【服务器端请求的接收21端口】

[root@zhangc ~]# iptables -t filter -A FORWARD -p tcp --sport 20 -j ACCEPT【服务器回应】

[root@zhangc ~]# iptables -t filter -A FORWARD -p tcp --dport 20 -j ACCEPT【客户端接收20端口】
 

状态包过滤:记录一个会话的状态,从防火墙出去的数据包回应的时候默认允许通过。

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.100.10-192.168.100.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

[root@zhangc ~]# iptables -t filter -A -m state --state ESTABLISHED,RELATED -j ACCEPT

以上两种方法都有可以使用进行FTP的访问
 

第三、禁止上班时间访问sina、迅雷、qq

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

[root@zhangc ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.220.21-192.168.220.30 -m time --timestart 08:00 --timestop 20:00 –weekdays Mon,Tun,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
 

[root@zhangc ~]# iptables -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Fri -m layer7 --l7proto qq -j DROP

[root@zhangc ~]# iptables -A FORWARD -m iprange --src-range 192.168.145.21-192.168.145.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Fri -m layer7 --l7proto xunlei -j DROP