Iptables的7层过滤

内核编译加载layer7补丁和模块

编译内核需要的条件和环境

[root@server~]# yum install gcc*

[root@server ~]# yum list all |grep gcc*

This system is not registered with RHN.

RHN support will be disabled.

compat-libgcc-296.i386                 2.96-138              installed         

dejavu-lgc-fonts.noarch                2.10-1                installed         

gcalctool.i386                         5.8.25-1.el5          installed         

gcc.i386                               4.1.2-44.el5          installed         

gcc-c++.i386                           4.1.2-44.el5          installed         

gcc-gfortran.i386                      4.1.2-44.el5          installed         

gcc-gnat.i386                          4.1.2-44.el5          installed         

gcc-java.i386                          4.1.2-44.el5          installed         

gcc-objc.i386                          4.1.2-44.el5          installed         

gcc-objc++.i386                        4.1.2-44.el5          installed         

gcc43.i386                             4.3.2-7.el5           installed         

gcc43-c++.i386                         4.3.2-7.el5           installed         

gcc43-gfortran.i386                    4.3.2-7.el5           installed         

gnome-python2-gconf.i386               2.16.0-1.fc6          installed         

java-1.4.2-gcj-compat.i386             1.4.2.0-40jpp.115     installed         

libgcc.i386                            4.1.2-44.el5          installed         

libgcj.i386                            4.1.2-44.el5          installed         

libgcj-devel.i386                      4.1.2-44.el5          installed         

libgcrypt.i386                         1.2.4-1.el5           installed         

libgcrypt-devel.i386                   1.2.4-1.el5           installed         

pkgconfig.i386                         1:0.21-2.el5          installed   

[root@server ~]# uname -r

2.6.18-128.el5

--需要的内核包和补丁

[root@server ~]# ll

-rw-r--r-- 1 root root   435891Apr 25  2010 iptables-1.4.2.tar.bz2

-rw-r--r-- 1 root root   128196Oct  4 2008 l7-protocols-2008-10-04.tar.gz

-rw-r--r-- 1 root root 48622017 Oct 23 2008 linux-2.6.25.19.tar.bz2

-rw-r--r-- 1 root root   174790Aug 23  2008netfilter-layer7-v2.20.tar.gz

[root@server ~]#

1.从新编译内核

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

[root@server ~]# tar zxvfnetfilter-layer7-v2.20.tar.gz -C /usr/src/

[root@server ~]#

MA

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

[root@server linux-2.6.25.19]#pwd

/usr/src/linux-2.6.25.19

[root@server linux-2.6.25.19]#cp /boot/config-2.6.18-128.el5 .config

配置新的内核:

[root@server linux-2.6.25.19]#make menuconfig

在“Networking---> Networking Options ---&gt; Network Packet filtering framework(Netfilter) ”

1)---&gt; Code Netfilter Configuration

//将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。
        //将layer7、string、state、time、IPsec、iprange、connlimit……等编译成模块,根据需要添加模块。

clip_image001

43-1

2)---&gt; IP: Netfilter Configuration
        //将“IPv4 connection tracking support (require for NAT)”编译成模块。
        //将“FullNAT”下的“MASQUERADE target support”和“REDIRECT target support”编译成模块。

clip_image002

43-2

编译,安装模块,新内核

[root@server linux-2.6.25.19]#make &&make modules_install &&make install

更改启动项,使用新内核启动

[root@server ~]# vim /etc/grub.conf

default=0

[root@server ~]#init 6

2.从新编译iptables

2.1卸载老的iptable

可以先保存旧的的配置信息,新的可以引用

#mv /etc/init.d/iptables /etc/init.d/iptables.old

[root@server~]# rpm -e iptables --nodeps

warning:/etc/sysconfig/iptables-config saved as /etc/sysconfig/iptables-config.rpmsave

[root@server~]# rpm -qa |grep iptables

[root@server~]#

--也可以用yum卸载

[root@serveriptables-1.4.1.1-for-kernel-2.6.20forward]# yumremove iptables

2.2安装iptables+layer7补丁

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

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

[root@server iptables-1.4.1.1-for-kernel-2.6.20forward]#cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/

[root@server iptables-1.4.1.1-for-kernel-2.6.20forward]#

2.3编译安装

[root@server iptables-1.4.2]#cd /usr/src/iptables-1.4.2/

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

--执行 prefix安装目录   --with-ksource 指明调用源代码的文件

[root@server iptables-1.4.2]#

[root@server iptables-1.4.2]#

[root@server iptables-1.4.2]#make &&make install

查看加载的模块

2.4安装l7-protocols模式包

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

2.5 改写iptables的配置脚本

[root@server ~]# cp /etc/init.d/iptables.old/etc/init.d/iptables    

[root@server ~]# service iptables start

Flushing firewall rules:                                   [  OK  ]

Setting chains to policy ACCEPT: nat                       [  OK  ]

Unloading iptables modules:                                [  OK  ]

[root@server ~]#

防火墙规则及layer7的应用

案例

公司有三个部门

工程部门  192.168.2.10--2.20

软件部门  192.168.2.21-2.30

经理办    192.168.2.31-2.40

上班时间 (周一---周五 08:00-20:00)

工程部门允许访问ftp,下班后无限制;

软件部门 允许访问http,不允许非法站点sina ,连接数 最多3个,不允许QQ聊天,下班后无限制。

经理办公室 允许访问http,qq ,下班后无限制。

dmz区域服务器进行发布。

clip_image003
1.开启转发功能

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

net.ipv4.ip_forward = 1             

[root@server ~]# sysctl -p

[root@server ~]# vim /etc/resolv.conf

nameserver 202.85.85.85

nameserver 202.88.88.88

2.允许ssh连接通过

--所有用户都可以出去

[root@server ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

[root@server ~]# iptables -t filter -A INPUT –s 10.106.42.169 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

[root@server ~]# iptables -t filter -A OUTPUT -d 10.106.42.169 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

[root@server ~]# iptables -P INPUT DROP

[root@server ~]# iptables -P OUTPUT DROP

[root@server ~]# iptables -P FORWARD DROP

允许127.0.0.1与用户进程通信

[root@server ~]# ping 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

ping: sendmsg: Operation not permitted

[root@server ~]# iptables -t filter -A INPUT -i lo -j ACCEPT

[root@server ~]# iptables -t filter -A OUTPUT -o lo -j ACCEPT

--apache 和用户的其他进程启动不了,需要把其打开

[root@server ~]# ping 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.035 ms

[root@server ~]# iptables -L -n -v --line-number

3.工程部

加载支持ftp的模块

[root@server ~]# modprobe ip_nat_ftp

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart

08:00 --timestop 20:00 -p tcp --dport 21 -j ACCEPT

[root@server ~]# date

Fri Aug 26 02:59:08 CST 2011

[root@server ~]# date 100816582011

Sat Oct  8 16:58:00 CST 2011

下班时间适用所以部门:

[root@server ~]# iptables -t filter -I FORWARD 2 -m time --timestart 20:01 --timestop 23:59 -o eth0 -j ACCEPT

[root@server ~]# iptables -t filter -I FORWARD 2 -m time --timestart 00:00 --timestop 07:59 -o eth0 -j ACCEPT

4.软件部门

访问外网时要允许dns解析

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.40 -m time --timestart 08:00 --timestop 20:00 -p udp --dport 53 -j ACCEPT

--禁止上班时间访问sina

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 08:00 --timestop 20:00 -m string --string "sina" --algo bm -j ACCEPT

--可以访问http

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart

08:00 --timestop 20:00 -p tcp --dport 80 -j ACCEPT

5.L7控制

--不允许聊天

[root@server ~]# iptables -t filter -I FORWARD 1 -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 08:00 --timestop 20:00 -m layer7 --l7proto qq -j DROP

[root@server ~]#

--最大连接数为三

[root@server ~]# iptables -t filter -I FORWARD 1 -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 08:00 --timestop 20:00 -p tcp --dport 80 -m connlimit --connlimit-above 3 -j DROP

[root@server ~]#

--windows查看连接数:

#netstat –na |more

C:\Documents and Settings\Administrator&gt;netstat -na |more

Active Connections

  Proto  Local Address          Foreign Address        State

  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING

  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING

  TCP    0.0.0.0:6125           0.0.0.0:0              LISTENING

  TCP    0.0.0.0:33673          0.0.0.0:0              LISTENING

  TCP    10.106.42.169:139      0.0.0.0:0              LISTENING

  TCP    10.106.42.169:1028     123.125.114.81:80      ESTABLISHED

  TCP    10.106.42.169:1046     61.200.81.136:80       ESTABLISHED

  TCP    10.106.42.169:3913     119.75.214.13:443      ESTABLISHED

  TCP    10.106.42.169:4189     10.106.42.171:22       ESTABLISHED

  TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING

  TCP    127.0.0.1:1173         127.0.0.1:1174         ESTABLISHED

  TCP    127.0.0.1:1174         127.0.0.1:1173         ESTABLISHED

  TCP    127.0.0.1:19000        0.0.0.0:0              LISTENING

  UDP    0.0.0.0:445            *:*

6.经理办

[root@server ~]# iptables -t nat -A PREROUTING -d 10.106.42.171 -p tcp --dport 3389 -j DNAT --to 192.168.3.100

[root@server ~]# iptables -t filter -A FORWARD -d 192.168.3.100 -p tcp --dport 3389 -j ACCEPT

[root@server ~]#