您的位置:首页 > 其它

防火墙基础知识

2012-11-02 14:00 302 查看
1.防火墙的类型:包过滤性防火墙,应用层网关防火墙
2.包过滤型防火墙的工作原理
包过滤型防火墙内置于Linux系统的内核,在网络层或传输层对经过的数据包进行筛选。筛选的依据是系统内设置的过滤规则(ACL)。通过检查数据流中每个数据包的源地址、目的地址、所有的协议、端口号等因素,来决定是否允许该数据包通过。包过滤型防火墙的工作过程
(1)数据包从外网传送给防火墙后,防火墙在IP层向TCP层传输数据前,将数据包转发给包检查模块进行处理。
(2)首先与第一条过滤规则进行比较。
(3)如果与第一条规则匹配,则进行审核,判断是否允许传输该数据包,如果允许则传输,否则查看该规则是否阻止该数据包通过,如果阻止则将该数据包丢弃。
(4)如果与第一条过滤规则不同,则查看是否还有下一条规则。如果有,则与下一条规则匹配,如果匹配成功,则进行与(3)相同的审核过程。
(5)依此类推,一条一条规则匹配,直到最后一条过滤规则。如果该数据包与所有的过滤规则均不匹配,则采用防火墙的默认访问控制策略策略(丢掉该数据包,或允许该数据包通过)。
3.引入Netfilter/iptables架构的概念
在内核中打开路由转发功能:/proc/sys/net/ipv4/ip_forward

修改内核变量:ip_forward:  echo 1 >/proc/sys/net/ipv4/ip_forward

修改/etc/sysctl.conf文件使”net.ipv4.ip_forward”的值为1

当有数据包到本机时,我们要根据数据的目标地址来判断,加入用户请求的地址就是一个网卡的地址,易知用户的请求肯定是对某个特定服务的请求,如果这个请求就是本机的话,此请求会到用户空间中,反之,如果对方请求的目标地址不是本机,和本机没有关系,但是却送到本机上来了,那就意味着可能需要本机来转发,那么就需要在内核中打开转发功能,即:/proc/sys/net/ipv4/ip_forward; ip_forward的功能其实就是打开网络间(网卡间)的转
发功能
4.针对不同类型的数据包,应在不同的位置检测,因此在我们TCP/IP协议栈的内部,我们的内核设计者,选择了如下几个点来检测不同走向类型的数据包:
a.到达所有到达本机内部来的数据包
b.所有从本机内部流出的数据包
c.经过本机路由做出决策,但是不经过本机内部的数据包
5.防火墙规则:
为了本机或者整个网络的安全性,那么我们需要对不同走向的数据包(报文)进行检测来确保达到管理的目的,如果要检测,规则是前提,因此我们需要制定不同需求的规则来确保检测的实现,任何进出的数据包都需要被规则制定的匹配条件进行匹配。通俗的讲,每个点的规则有许多,为了使其检测性能更加突出,所以规则是要优化的,因此每条规则的排列顺序也是很重要的,一般来说,越是能匹配到报文的,就尽量的放到前面去。
6.引入写规则的工具iptables的概念
规则生效的位置是在内核当中的,用户在写完规则后放到内核中使其生效就可以了,但是我们写规则的程序是应用程序,而应用程序是放在用户空间中的,如果用户写的规则随便就到了内核当中,那内核就完全没有稳定性可言,在此要谨记用户空间是不能随便和内核联系的。因此为了解决这种问题,我们就引入了iptables的概念。
Iptables是一款用户空间的工具,iptables本身并不是防火墙,它的主要作用就是写规则,然后把写完的规则放到内核当中使其执行,但是前面讲过了,内核中是不能随便让其插入数据的,所以iptables有一个与之匹配的内核框架,该框架只接受iptabgles命令送过来的关于正确符合定义的规则语法的规则,所以iptables本身也可以检查语法。那么在内核框架中的TCP/IP协议栈上的检测点组合起来叫做netfilter,即网络过滤器。
7.引入规则链的概念:
在netfilter上一共有5个检测点,如下:INPUT, OUTPUT,FORWARD, PREROUTING, POSTROUTING.这五个点就是可以存放规则的检查点,由于每个检测点上面可以存放很多规则,因此我们称为规则链。每个规则链都相对应一个钩子函数,因此报文送到哪一个规则链上,就意味着被送到相应的钩子函数上去执行相应的命令
8.防火墙的功能,Netfilter中内置有4张表:filter表,nat表和mangle表。其中filter表用于实现数据包的过滤、nat表用于网络地址转换、mangle表用于包的重构和raw表
filter: 是iptables默认的表, 主要用于数据包的过滤。filter表包含了INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)和OUTPUT链(处理本地生成的数据包)。
nat: 主要用于网络地址转换。nat表包含了PREROUTIN链(修改即将到来的数据包)、OUTPUT链(修改在路由之前本地生成的数据包)和POSTROUTING链(修改即将出去的数据包)。
mangle: 大概的意思就是把报文拆开,看看,修改修改再封装,其TTL值是不发生变化的。在Linux2.4.18内核之后,mangle表包括PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING五个链。
raw:略去。。
9.iptables命令
iptables命令格式为:
语法格式:iptables [-t TABLE] COMMAND CHAIN [CRETIRIA匹配条件] –j ACTION

常用命令如下:

-P [链名] :定义默认策略(policy)

-L [链名] :查看iptables规则列表,如果不指定链,则列出所有链中的所有规则(list)

-v:显示详细信息

-vv:比-v显示的信息更详细

-line-numbers显示规则的行号

-x:计数器的精确值

-n:不对地址和端口做名称反解,

-A [链名] :在规则列表的最后增加一条规则(append)

-I [链名] :在指定的链中插入一条规则(insert)

-D [链名] :从规则列表中删除一条规则(delete)

-R [链名] :替换规则列表中的某条规则(replace)

-F [链名] :清除指定链和表中的所有规则,如果不指定链,则所有链都被清空(flush)

-Z [链名] :置零(zero)(每条规则,包括默认策略都有两个计数器,一个是被本规则匹配到的所有数据包的个数,另一个是被本规则匹配到的所有数据包的大小之和)

-N [链名] :创建一个用户自定义的链(new-chain)

-X [链名] :删除一个自定义的空链(delete-chain)

-C [链名] : 检查给定的包是否与指定链的规则做匹配(check)

-E [旧链名] [新链名] :更改用户自定义的链的名称(rename-chain)

-h :显示帮助信息(help)

10.iptables命令之常用目标动作选项-j
-j:当我们被指定条件匹配到以后的数据包要做出相应的处理,处理我们用选项-j

ACCEPT : 接受报文或数据包

DROP : 丢弃数据包

REDIRECT:将数据包重定向到本机或另一台主机的某个端口,通常用于实现透明代理或对外开放内网的某些服务

SNAT:源地址转换,即改变数据包的源IP地址

DNAT: 目标地址转换,即改变数据包的目的IP地址

MASQUERADE:IP伪装,即NAT,MASQUERADE只用于ADSL拨号上网的IP伪装,如果主机的IP是静态的,则应用SNAT

LOG: 日志功能,将符号规则的数据包的相关信息记录在日志中,以便管理员进行分析和排错。

Iptables命令制定永久性规则集:

保存规则:iptables-save > /etc/sysconfig/iptables

恢复规则集:iptables-restore < /etc/sysconfig/iptables

11.iptables命令中常用的匹配规则
匹配规则分为两种:通用规则、扩展规则
下面先介绍通用规则:

! [匹配规则]:表示除了匹配该规则之外的,取反的意思

-i:指定数据包从哪个网络接口进入,eg:eth0, eth1或ppp0

-o:指定数据包从哪个网络接口输出, eg:eth0, eth1或ppp0

-p:指定数据包匹配的协议,如tcp, udp, icmp等,

-d:指定数据包匹配的目的IP地址或子网。

--sport:指定匹配的源端口或端口范围

--dport:指定匹配的目标端口或端口范围


本文出自 “MGnuLinux” 博客,请务必保留此出处http://inspriion.blog.51cto.com/3283848/1048165
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: