基础知识:

一、iptables的表格:

1、Nat表:用户网络地址转换;

包括:POSTROUTING【路由判断之后】、PREROUTING【路由判断之前】

2、Filter表:

包括:INPUT、OUTPUT、FORWARD

3、Mangle表:用于实现QOS时使用;

二、iptables的指令、选项和动作

iptables  -t 表格名称  指令(大写) 链名称  选项  参数

    -t  nat

        filter

        mangle

指令:

   -A  --append  追加

   -R  --replace   替换

   -D   --delete   删除

   -I   --insert   插入

   -N   --new      用户自定义链

   -X              删除用户自定义的空链

   -F  --flush    清空链

   -P  --policy   ACCEPT   DROP  REJECT

  链名称 chain

    nat    POSTROUTING --->SNAT    PREROUTING --->DNAT  OUTPUT

    filter  INPUT   OUTPUT   FORWARD

选项:

        选项   参数

  来源  -s   --source  地址  子网  网段

        -i   【-i   eth0】

  目标  -d   --destnation   地址  子网  网段

        -o   【-o  eth1】

  协议  tcp  --src-port  --dst-port

        udp  --src-port  --dst-port

        icmp --icmp-type [!] typename   echo-reply (pong)  echo-request

  动作  -j   --jump

        SNAT  DNAT   MASQUERADE

        ACCEPT    DROP   REJECT

        REDIRECT

 

为iptables增加layer7补丁,实现应用层过滤:

一、所需安装包:

wps_clip_image-30658

二、重新编译内核添加iptables所需要的模块:

    1、合并kernel+layer7补丁

shell> tar jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/ 
shell> tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/

shell> cd /usr/src/linux-2.6.25.19/ 
shell> patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

    2、配置新内核

shell> cp /boot/config-2.6.18-8.el5 .config    //偷个懒,沿用旧的内核配置 
shell> make menuconfig

    //配置内核时,在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”处主要注意两个地方: 
    1) ---> Code Netfilter Configuration 
        //将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。 
        //将ftp、layer7、string、state、time、IPsec、iprange、connlimit……等编译成模块,根据需要看着办。

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

    3、编译及安装模块、新内核

shell> make && make modules_install && make install

        //编译安装成后后,重启选择使用新的内核(2.6.25.19)引导系统

三、重新编译iptables

    1、卸载现有iptables

shell> rpm -e iptables iptstat --nodeps

    2、合并iptables+layer7补丁

shell> tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/ 
shell> cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/ 
shell> cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/

3、编译安装

shell> cd /usr/src/iptables-1.4.2/

shell> ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19 
shell> make && make install

    4、安装l7-protocols模式包

shell> tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/ 
shell> mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols

 

案例:

一、实验要求:

公司有三个部门

工程部门:192.168.10.10--192.168.10.20

软件部门:192.168.10.21--192.168.10.30

经理办:192.168.10.31--192.168.10.40

上班时间:(周一到周五 08:00到17:00)

工程部门:上班时间ftp 不允许qq聊天,不允许使用迅雷,不允许访问网站,下班后无限制;

软件部门:能够访问网站,不允许非法站点sina,不允许使用迅雷,连接数最多3个,不允许聊天,下班后无限制;

经理办公室:能够访问网站,允许qq聊天,下班后无限制;

DMZ区域www服务器进行发布;

二、实验拓扑:

image

三、环境搭建:

网络地址

内网网卡地址:

wps_clip_image-4760

外网网卡地址:

wps_clip_image-25665

DMZ区域网卡地址:

wps_clip_image-18546

开启路由转发功能:

# vim /etc/sysctl.conf

wps_clip_image-4430

wps_clip_image-5025

加载ip_nat_ftp模块:

# modprobe ip_nat_ftp

将FORWARD链的默认过滤设置成DROP:

# iptables -P FORWARD DROP

四、过滤规则:

//对内网用户实现SNAT转换:

# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE

//DMZ区域发布服务器实现DNAT转换:

# iptables -t nat -A PREROUTING -d 192.168.101.45 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.1.254

//允许dns解析

# iptables -t filter -A FORWARD -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 53 -j ACCEPT

//工程部不允许使用qq和迅雷

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto xunlei -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP

//工程部可以使用ftp

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

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

//软件部不允许使用qq和迅雷

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto xunlei -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP

//软件部上班时间不允许访问sina,其他的可以

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m string --string "sina" --algo bm -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP

/软件部http最大连接数为3

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m connlimit --connlimit-above 3 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --syn --dport 80 -j DROP

/软件部可以访问其他http资源

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri  -p tcp --dport 80 -j ACCEPT

//经理办公室

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.31-192.168.10.40 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

//各部门下班可以上网

# iptables -t filter -A FORWARD -s 192.168.10.0/24 -o eth1 -m time --timestart 17:01 --timestop 07:59 -j ACCEPT