(转载) iptables及使用layer7七层过滤

 

一:简介
iptables 是与 Linux 内核集成的 IP 信息包过滤系统。若是 Linux 系统链接到因特网或 LAN、
服务器或链接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在作信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在咱们所谓的链(chain)中。
IPTABLES的表和链
IPTABLES经常使用的有三个filter表 nat表 mangle表, 和五个链 INPUT链 OUTPUT链 FORWARE链 POSTROUTING链 PREROUTING链, 下面来介绍下它们的各个功能.
1.filter表
filter表主要是过滤数据包的,IPTABLES几乎全部的数据包过滤都在此表中实现的,filter表也是IPTABLES中默认的表,此表中还包含三个链以下
1.1 INPUT链
过滤全部的目标地址是本机的数据包
1.2 OUTPUT链
过滤全部从本机出去的数据包
1.3 FORWORD链
过滤全部从本机路过的数据包
2.nat表
nat表主要是用于作网络地址转换的(NAT) 在IPTABLES中能够作SNAT(源地址转换),DNAT(目标地址转换),PANT(即跟SNAT差很少,不同的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,当使用ppp 或pppoe的方式链接互联网的时候通常适应这中) 。 nat表中包含两个链以下
2.1 PREROUTING链
在数据包到达防火墙的时候改变目标地址 DNAT应用于此链.
2.2 OUTPUT链
能够改变本地产生的数据包的目标地址
2.3 POSTROUTING链
在数据包离开防火墙的时候改变源地址,SNAT应用于次链
3. mangle表
mangle表主要是修改数据包头部信息的,此表中包含如下5条链
3.1 PREROUTING链,
在数据包进入防火墙以后,也称为路由前,
3.2 POSTROUTING链,
在数据包肯定目标地址后,也称为路由后,
3.3 OUTPUT链
从本机出去的时间包路由前
3.4 INPUT链
数据包进入本机后,路由后
3.5 FORWARD链
第一次路由判断以后,最后一次路由判断以前改变数据包
 
IPTABLES命令使用详解
1,规则管理类
#iptables -A    添加一条新规则
#iptables -I    插入一条新规则 -I 后面加一数字表示插入到哪行
#iptables -D    删除一条新规则 -D 后面加一数字表示删除哪行
#iptables -R    替换一条新规则 -R 后面加一数字表示替换哪行
2.链管理类
#iptables -F    清空链中的全部规则
#iptables -N    新建一个链
#iptables -X    删除一个自定义链,删除以前要保证次链是空的,并且没有被引用
#iptables -E    重命名链
3.默认管理类
#iptables -P    设置默认策略
4.查看类
#iptables -L    查看规则 -L还有几个子选项以下
#iptables -L -n 以数字的方式显示
#iptables -L -v 显示详细信息
#iptables -L -x 显示精确信息
#iptables -L --line-numbers 显示行号
5.条件匹配类
5.1 基本匹配
条件匹配也可使用 ! 取反
-s    源地址
-d    目标地址
-p    协议{tcp|udp|icmp}
-i    从哪一个网络接口进入,好比 -i eth0
-o    从哪一个网络接口出去,好比 -o eth0
5.2扩展匹配
5.2.1隐含扩展匹配
-p {tcp|udp} --sport   指定源端口
-p {tcp|udp} --dport   指定目标端口
5.2.2显示扩展匹配
-m state --state   匹配状态的
-m mutiport --source-port   端口匹配 ,指定一组端口
-m limit --limit 3/minute   每三分种一次
-m limit --limit-burst 5   只匹配5个数据包
-m string --string --algo bm|kmp --string "xxxx" 匹配字符串
-m time --timestart 8:00 --timestop 12:00 表示从哪一个时间到哪一个时间段
-m time --days    表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配腾讯qq的 固然也支持不少协议,这个默认是没有的,须要给内核打补丁并从新编译内核及iptables才可使用 -m layer7 这个显示扩展匹配,
6,处理动做类
-j ACCEPT     容许
-j REJECT     拒绝
-j DROP       拒绝并提示信息
-j SNAT       源地址转换
-j DNAT       目标地址转换
-j REDIRECT   重定向
-j MASQUERAED 地址假装
-j LOG --log-prefix "说明信息,本身随便定义"      记录日志

 

二:编译内核和从新编译iptables
所须要的源码
iptables-1.4.2.tar.bz2
l7-protocols-2008-10-04.tar.gz
linux-2.6.25.19.tar.bz2
netfilter-layer7-v2.20.tar.gz
 
合并kernel+layer7补丁
[root@localhost ~]# tar jxvf linux-2.6.28.tar\(1\).bz2 -C /usr/src/
[root@localhost ~]# tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
[root@localhostlinux-2.6.28]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
[root@localhost linux-2.6.28]# cp /boot/config-2.6.18-164.el5 .config
[root@localhost linux-2.6.28]# make menuconfig
[root@localhost linux-2.6.28]# make && make modules_install && make install
卸载现有iptables
[root@localhost ~]# rpm -e iptables –nodeps
合并iptables+layer7补丁
[root@localhost ~]# tar -jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
[root@localhost iptables-1.4.2]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
[root@localhost iptables-1.4.1.1-for-kernel-2.6.20forward]# cp * /usr/src/iptables-1.4.2/extensions/
编译安装
[root@localhost iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
[root@localhost iptables-1.4.2]# make
[root@localhost iptables-1.4.2]# make install
安装l7-protocols模式包
[root@localhost ~]# tar -zxvf l7-protocols-2008-10-04.tar.gz -C /etc/
[root@localhost ~]# mv /etc/l7-protocols-2008-10-04/ /etc/l7-protocols
 
[root@localhost iptables-1.4.2]# service iptables restart
清除防火墙规则:                                           [肯定]
把 chains 设置为 ACCEPT 策略:filter                       [肯定]
正在卸载 Iiptables 模块:                                  [肯定]
应用 iptables 防火墙规则:                                 [肯定]

 

三:案例:
案例要求:
公司有三个部门
工程部门 20.1-20.10
软件部门 20.11-20.20
经理办    20.21-20.30
上班时间 (周一---周五 08:20:00)
         工程部门   上班时间ftp 不容许http  qq 迅雷  下班后无限制
 
         软件部门  http   不容许非法站点sina ,不容许使用迅雷 不容许聊天 
                          下班后无限制
 
         经理办公室   http qq 均可以,下班后无限制
 
         dmz区域     www服务器进行发布
拓扑图:

 

 

 

配置步骤
 [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE
[root@localhost ~]# modprobe ip_nat_ftp
修改iptablse默认拒绝全部
[root@localhost ~]# iptables -A INPUT -s 192.168.20.1 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -d 192.168.20.1 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP
[root@localhost ~]# iptables -L -v -n
Chain INPUT (policy DROP 938 packets, 90044 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 259 17556 ACCEPT     tcp -- *      *       192.168.20.1         0.0.0.0/0           tcp dpt:22
 
Chain FORWARD (policy DROP 10 packets, 460 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 169 15956 ACCEPT     tcp -- *      *       0.0.0.0/0            192.168.20.1        tcp spt:22
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.1-192.168.20.10 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --sport 21 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --sport 20 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --dport 20 -j ACCEPT
 
工程部门访问ftp

 

下班后无限制:node

[root@localhost ~]# iptables -t filter -A FORWARD -s 192.168.20.0/24 -m time --timestart 20:01 --timestop 07:59 -o eth1 -j ACCEPT
调整时间
[root@localhost ~]# date 091822222012
2012年 09月 18日 星期二 22:22:00 CST
 
下班后无限制,别的部门也能够访问ftp

 

软件部门
能够访问http
 
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
 

 

不容许访问sina
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
[root@localhost ~]# iptables -t filter -I FORWARD 1 -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
 

 

不容许使用qq聊天
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP
不容许使用迅雷下载
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP
 
经理办公室
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

 

容许使用qq和迅雷
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j ACCEPT
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j ACCEPT
 
 
DMZ区域的服务器发布
 
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.101.71 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.2.100
[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.2.100 -p tcp --dport 80 -j ACCEPT
 

本文出自 “牛晓林的blog” 博客,请务必保留此出处http://niuxiaolin.blog.51cto.com/5627962/998879linux

相关文章
相关标签/搜索