Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318213
  • 博文数量: 82
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 771
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 03:44
文章分类

全部博文(82)

文章存档

2011年(6)

2010年(76)

我的朋友

分类: LINUX

2010-11-21 15:09:34

1、防火墙简介
防火墙是连接内部网络和外部网络的一组软硬件装置,负责对内外网络之间的数据进行过滤、访问控制及数据转发。
防火墙有以下功能:
1)进行访问控制,通过限制IP,屏蔽端口等手段。
2)提供抵御外部网络攻击的能力,包括SYN攻击、ICMP泛滥、端口扫描等攻击防御能力。
3)提供网络地址翻译(NAT)。

2、防火墙的分类
1)包过滤型防火墙
    主要对网络层及传输层的网络数据进行控制。通过检查数据流中每个数据包IP表头的源地址、目的地址、所用的端口号、协议
状态等。包过滤防火墙控制的数据包位于网络协议栈的较低层次,能够对网络实现基本的安全控制,因此包过滤防火墙已经能够适应
大部分网络安全的需要。
2)应用级防火墙
    应用级网关是在网络应用层上建立协议过滤和转发功能,针对特定的网络应用服务协议使用特定的数据过逻辑,并在过滤的同时
对数据包进行必要的分析、登记和统计,形成报告。实际中的应用网关通常安装在专用工作站系统上。

    以上两个防火墙都有一个共同的特点,就是仅仅依靠特定的逻辑判定是否允许数据包通过,防火墙外部的用户便有可能直接了解
防火墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。

3)代理服务型防火墙
    代理服务也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨越防火墙的网络通信链路分为两段。外部计算机的网络链路只能到达代理服务器,从而起到隔离作用。代理服务业往往对数据包进行分析、注册登记,形成报告,同时当发现被攻击迹象是,会想网络管理员发出警报,并保留攻击痕迹。

2、IPTables基础
1)表
    IPTables网络限制策略是由路由规则、链及表构成的。表是各种策略的顶层容器,每个表由一系列的链组成。IPTables有三种表,即filter,nat,mangle表。
filter表用于一般的信息包的过滤,他包含INPUT、OUTPUT和FORWARD链。
nat表用于要转发的数据包,包含PREROUTE、OUTPUT和POSTROUTE链。
mangle,如果信息包及其头内进行了任何更改,则使用mangle表,该表包含一些规则来标记用于高级路由的信息包,并包含PREROUTR和OUTPUT链。

2)链
    根据规则所处理的信息包的类型,可以将规则分组在链中,链式规则的上层容器,是一组规则的组合。
INPUT,处理入站信息包的规则被添加至此。
OUTPUT,处理出站信息包的规则被添加至此。
FORWARD,处理正在转发的信息包的规则被添加至此。
    这三个链式基本信息包过滤表filter中内置的默认链。另外还有其他许多可用的链的类型(如PREROUTE和POSTROUTE),以及提供用户自定义的链。每个链都可以有一个策略,他定义“默认目标”,,也就是要执行的默认操作。

3)规则
    规则是IPTables基本要素。

4)IPTabels传输数据包的过程
建立完规则并将链存放在适当的位置之后,内核空间从用户空间接管工作。
信息包到达防火墙-->内核先检查信息包的头信息,即是路由
    -->信息包源自外界并通往系统-->内核将它传递到INPUT表
    -->信息包源自系统内部通往外部系统-->信息包被传递到OUTPUT表
    -->源自外部系统前往外部系统-->传递到FORWARD表
接下来就是和信息包所传递到的链中的每条规则进行比较。如果包与某条规则匹配,内核就对该信息包执行由该规则的目标指定的操作。如果都不匹配,内核将参考该链的默认策略来决定如何处理该信息包。默认是DROP

3、配置防火墙
1)IPTables的命令格式
基本格式为:
iptables [-t table] command [match] [-j target/jump]
-t  指定规则表,有三个,默认为filter
filter:是预设规则表,是用来进行封包过滤的处理动作(例如:DROP、LOG、ACCEPT或REJECT),基本规则都会建立在此表中
nat:拥有PREROUTING和POSTROUTING两个规则链,主要功能是进行一对一、一对多、多对多等网址转译工作。防火墙运作时,每个封     包只会经过这个规则链一次。如果报封包过滤规则定义在这数据表里,将会造成无法对同一封包进行多次对比,因此这个规则     表除了做网址转译之外,一般不做其他用途。
mangle:除了进行网址转译工作会改写封包外,在某些特殊应用也必须去改写封包(TTL、TOS)或者是设定MARK(将封包做记号,以        便后续过滤),这时就必须将这些规则定义在mangle表中。但mangle表还是使用率不高。

2)常用命令列表
-A, --append
新增规则到某个链中,成为该链最后一条规则
-D, --delete  
iptables -D INPUT --dport 80 -j DROP; iptables -D INPUT 1
从某链中删除一条规则,可以输入完整规则,或者直接输入规则编号也可以
-R, --replace
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
取代现行规则,被取代之后并不会改变顺序
-I, --insert
iptables -I INPUT 1 --dport 80 -j ACCEPT
插入一条规则,原来位置上的规则将会往后移动一位
-L, --list
列出某链中的所有规则
-F, --flush
删除某链中的所有规则
-Z, --zero
将封包计数器归零。封包计数器是用来计算同一封包出现次数。
-N, --new-chain
定义新的规则链
-X, --delete-chain
删除某个规则链
-P, --policy
iptables -P INPUT DROP
定义过滤策略,也就是为符合过滤条件的封包,预设的处理方式
-E, --rename-chain
修改某自定义链的名称

3)常用的封包对比参数(match)
-p, --protocal
iptables -A INPUT -p tcp
对比通信协议是否相符,可以使用!来反向对比
-s, --source
iptables -A INPUT -s 192.168.1.1
用来对比封包的源地址
-i, --interface
iptables -A INPUT -i eth0
用来对比封包是从哪个网卡进入,可以使用通配符+做大范围对比
-o, --out-interface
用来对比从哪张网卡送出
--sport
iptables -A INPUT -p tcp --sport 22
用来对比源端口号,可以对比一个范围,例如:--sport 22:80,就是从22到80
--dport
对比目的端口号
--tcp-flags
iptables -p tcp --tcp-flags SYN,FIN,ACK,SYN
对比TCP封包的状态旗号
参数分为两部分,第一部分列举出想对比的旗号,第二部分列出前述旗号中哪些没有被设定,未列举的旗号必须是空的。TCP状态旗号包括:SYN、ACK、FIN、RST(重设)、PSH(强迫推送)。
--syn
iptables -p tcp --syn
对比是否要求联机之TCP封包,与上面那个命令作用完全一样
-m multiple --source-port
iptables -A INPUT -p tcp -m multiple --source-port 22,53,80,110
用来对比多个不连续的来源端口号,一次最多可以对比15个
-m multiple --destination-port
iptables -A INPUT -p tcp -m multiple --destination-port 22,53,80,110
同上,对比目的端口号
--icmp--type
iptables -A INPUT -p icmp --icmp-type 8
用来对比ICMP的类型编号,可以使用代码或者数字编号进行对比
-m limit --limit
iptables -A INPUT -m limit --limit 3/hour
用来对比某段时间内封包的平均流量,上面的例子是对比每小时平均流量是否超过一次3个封包
--limit-burst
iptables -A INPUT -m limit --limit-burst 5
用来对比瞬间大量封包的数量,上面的例子是用来对比一次同时涌入的封包是否超过5个,超过直接丢弃
-m mac --mac-source
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
用来对比MAC地址,这个参数不能用在OUTPUT和POSTROUTING规则链上,封包要送到网卡后才由ARP查出目的地的MAC地址,所 以OUTPUT的时候,iptables在进行封包对比是,并不知道封包会送到哪个网络接口
--mark
iptables -t mangle -A INPUT -m mark ---mark 1
用来对比封包是否被表示为某个号码,对比成功时,可以透过MARK处理动作,号码最大不能超过4294967296
-m owner --uid-owner
iptables -A OUTPUT -m -owner --uid-owner 500
用来对比来自本机的封包,是否是某特定使用者所产生的,避免服务器用root或其他身份将敏感数据传送出去
-m owner --gid-owner
iptables -A OUTPUT -m -owner --gid-owner 0
性质同上,对比的是用户组
-m owner --sid-owner
iptables -A OUTPUT -m -owner --sid-owner 100
用来对比来自本机的封包是否是某特定联机(Session ID)的响应封包
-m state --state
iptables -A INPUT -m state --state INVALID,ESTABLISHED,NEW和RELATED。INVALID表示该封包的联机编号无法识别或不正确。ESTABLSHED表示属于某个已经建立的联机。NEW表示想要起始一个联机。RELATED表示是属于某个已经建立的联机。

4)常用的处理动作参数(target)
-j 参数用来指定要进行的处理动作,常用的包括:ACCEPT, REJECT, DROP, REDIRECT, MASQUERADE, LOG, SNAT, DNAT, MIRROR, QUEUE, RETURN, MARK,详细说明如下:
ACCEPT:将封包放行,进行完此处理动作之后,直接跳往下一规则链(nat:postrouting)
REJECT:拦阻该封包,并传送封包通知对方
DROP:丢弃封包不予处理
REDIRECT:将封包重新导向另一个端口(PNAT),此处理之后,将会继续对比其他规则。可以实现通透式proxy或者保护web服务器
MASQUERADE:改写分包来源IP为防火墙NIC IP,可以指定port对应的范围,进行完此处理之后,直接跳往(mangle:postrouting)。这 个功能与SNAT略有不同,当进行IP伪装时,不需要指定要伪装成哪个IP,IP会从网卡直接读取。
LOG:将封包相关信息记录在/var/log中
SNAT:改写封包来源IP为某特定IP或IP范围,可以指定port对应的范围,处理完后直接跳到(mangle:postrouting)
DNAT:改写封包目的地的IP为某特定IP或IP范围,可以指定port为对应范围,处理完后跳到(filter:input或forward)
MIRROR:镜射封包,将源IP和目的IP对调后,将封包送回
QUEUE:中断过滤程序,将封包放入队列,交给其他程序处理
RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤
MARK:将封包标上某个代号,以便提供后续判断条件,处理完后继续对比其他规则


5)IPTables的使用
i)安装(略)
ii)初始化
清除filter表中所有链的所有规则
iptables -F -t filter
清除filter表中所有自定义链中的规则
iptables -X -t filter
将filter表中所有规则链中所有规则的包字节数清零
iptables -Z -t filter
接下来相同的步骤清除nat表
iii)设置规则默认值
默认规则是防火墙没有其他匹配规则时执行的规则。NAT表负责地址转换,可实现路由功能,而安全控制交给filter表负责。因此filter表的默认规则设为DROP,NAT表中的默认规则设为数据无条件接收。再通过自定义规则来开放需要的服务。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iV)设置规则(略)
V)开启内核的IP转发功能
echo "1">/proc/sys/net/ipv4/ip_forward 重启之后会失效
修改脚本/etc/sysconfig/network
FORWARD_IPV4=true 永久
vi)保存设置
service iptables save

3、使用IPTables实现NAT共享上网
1)启用IP转发
2)设置IP伪装
iptables -t nat -A POSTROUTING -o etho -j MASQURADE
3)客户端设置IP地址网关等


4、IPTables技巧实例
1)禁止安装IPTables的Linux主机本身访问某些网站
iptables -A OUTPUT -o eth0 -d -j DROP
2)禁止以NAT方式透明上网的客户机访问某些网站
iptables -A FORWARD -o eth0 -d DROP
3)禁止某些客户机上网
iptables -A FORWARD -s 192.168.1.20 -j DROP
iptables -A FORWARD -s 192.168.1.0/24 -j DROP
4)禁止某些客户机访问某些服务
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 21 -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 23 -j DROP
5)禁止客户机Ping服务器,但服务器可以ping客户机
iptables -A INPUT -i eth0 -p icmp -icmp-type 8 -j DROP
iptables -A OUTPUT -i eth0 -p icmp -icmp-type 8 -j ACCEPT
6)发布内网服务器,也就是端口映射
iptables -t nat -A PREROUTING -d 218.4.65.45 --dport 80 -j DNAT --to-destination 192.168.20.254:80
iptables -t nat -A POSTROUTING -s 192.168.20.254 -j SNAT --to-source 218.4.65.45
7)支持Squid做透明代理
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth2 -j SNAT --to A.B.C.D
iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o eth2 -j SNAT --to A.B.C.D
iptables --t nat -A prerouting -s 192.168.100.0/24 -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables --t nat -A prerouting -s 192.168.168.0/24 -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
前面两句是进行源地址转换,后面两句是对从两个内网网卡进入的、tcp协议的、目的端口为80的,做“端口”重定向。

总结,简单点来说,如果对服务器本身的数据进行操作,用到filter:input或output;如果对NAT里面发来的数据操作,用到的是filter:forward。对于NAT表,prerouting可以理解成从外网到内网,也就是目的地址转换;而postrouting是从内网到外网,就是源地址转换。
接下来看看这两个链和路由的关系就会很清楚了:
源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据

阅读(7277) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~