首页 > 代码库 > 【linux基础】22、iptables(上)

【linux基础】22、iptables(上)

一、网络安全模型

1、防火墙简介

防火墙(Firewall):也称防护墙,它是一种位于内部网络与外部网络之间的网络安全系统。

   工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是二者的结合

主机防火墙:工作于主机边缘,只能对一台主机起到保护作用

网络防火墙:工作于网络边缘,对多台主机起到保护作用

主机防火墙 + 网络防火墙

硬件防火墙:能高效地处理网络报文,CPU是特制的,在硬件基础上能直接处理报文(解包)

网络层:网络防火墙

应用层:网关或代理服务器(更安全,检测机制更复杂,更为贴近实际应用,效率不高)


IDS:入侵检测系统

   HIDS:OSSEC    主机入侵检测系统

   NIDS:snort    网络入侵检测系统,

   Filesystem:tireware  文件系统级别检测

IPS:IDS + Firewall 入侵防御系统

honeypot:蜜罐  #诱捕

Nessus,nmap  嗅探(扫描)工具


2、iptables

iptables/netfilter:网络层防火墙,支持实现连接追踪(状态检测)

   是基于软件形式实现的一种防火墙的软件程序

   iptables的前身叫ipfirewall(内核1.x时代),这是一个从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现详细的访问控制功能。

   iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables:防火墙规则编写工具    #用户空间

netfilter:framework(框架)网络过滤器,真正让规则实现   #内核空间


3、规则

   规则(rules)其实就是网络管理员预定义的条件,是iptables的基础。

   规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。


4、工作原理

   数据包从外网传送到防火墙后,防火墙在IP层向TCP层传送之前,将数据包转发给检查模块进行处理。其过程如下。

⑴ 首先与第一个过滤规则比较。

⑵ 如果与第一个规则相同,则对它进行审核,判断是否要转发该数据包,这时审核的结果是转发数据包,则将数据包发送到TCP层进行处理,否则就将它丢弃。

⑶ 如果与第一个过滤规则不同,则接着与第二个规则相 比较,如果相同则对它进行审核,过程与上一步相同。

⑷ 如果与第二个过滤规则不同,则继续与下一个过滤规 则比较,直到与所有的过滤规则比较完成。要是不满足所有过滤规则,就将数据丢弃。


二、iptables的工作机制

1、五链

    iptables在网络必然经过的地方,选取了5个位置,来作为控制的地方。这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。

这五个位置分别是:

PREROUTING   路由前

   数据报文进入TCP/IP协议栈路由选择前会被PREROUTING“钩”住,分析其数据包对其相应操作,注意:PREROUTING链不能对数据包进行过滤,PREROUTING链是整个netfilter框架中的第一关

INPUT       流入

   通过PREROUTING后进行路由选择如果数据包是进入本机内部,则转发到INPUT链,INPUT链能够通过事先定义好的规则对数据包进行筛选如果被匹配则执行相应动作,INPUT链可以对数据包进行过滤,INPUT链是数据报文进入用户空间的必经之路

FORWARD     转发关卡

   通过PREROUTING后进行路由选择如果数据包只是通过本机进行转发,则转发到FORWARD链,FORWARD链能够通过事先定义好的规则对数据包进行匹配检查并执行相应动作,INPUT链可以对数据包进行过滤,正是有了FORWARD链iptables才能够作为一个网络防火墙运行在网络边缘对进出网络的数据报文进行过滤

OUTPUT      流出

   数据包从用户空间的进程通过路由选择特定的网卡接口后转到OUTPUT链,OUTPUT链能够通过实现定义好的规则对数据报文进行匹配检查并执行相应动作,OUTPUT链可以对数据包进行过滤

POSTROUTING  路由后

   数据包从OUTPUT或FORWARD转发而来,到达netfilter框架中的最后一关,分析数据包并执行对应动作,和POSTROUTING一样不能对数据包进行过滤 

数据经过netfilter流程图:

技术分享

                                #OUPUT这里出去应该也要经过路由决策

   在路由前和路由后由于没有经过路由决策不会发生过滤作用的,而且我们的(INPUT\FORWORD\OUTPUT)已经可以基本是实现路径的全部封锁控制了。那我们为什么还要放置他们呢?

   这个主要是因为我们在做SNAT和DNAT的时候,源地址转换必须在路由之后转换,目标地址转换必须在路由之前转换,这即是他们存在的意义。


2、四表

   netfilter过滤数据包的规则是通过四张表的来定义

   或者说四个功能

filter

   整个iptables最关键的表,实现数据包的过滤;可以由INPUT,FORWARD,OUTPUT这三个能够实现过滤功能的链组成


nat

   NAT(Network Address Translation)网络地址转换

   在iptables中也可以实现NAT的相关功能, 例如SNAT(源地址转换),DNAT(目标地址转换),MASQUERADE等功能;nat表可以由PREROUTING, OUTPUT, POSTROUTING组成


mangle

   mangle可以对匹配到的报文的数据报进行拆解,做出修改,重新封装等操作;一般我们用的很少,五个链都能实现mangle的功能


raw

   raw关闭NAT的连接追踪机制,防止在高并发的访问下服务器的内存溢出导致故障;可由PREROUTING,OUTPUT实现,用的更少。


3、定义规则的”潜规则”

添加规则时的考量点

实现哪些功能: 判断添加在哪张表上

报文的流经路径:判断添加在哪个链上和链上规则的次序

1)同类规则(访问同一程序),匹配范围小的放在上面

2)不同类的规则(访问不同应用), 匹配到报文频率高的放上面

3将那些可由一条规则描述的多个规则合并成一个 

4)设置默认策略


4、防火墙的策略

防火墙策略一般分为两种:

  一种叫“通”策略,一种叫“堵”策略,

   通策略其实就是白名单,默认端口是关着的,必须要自己指定用户的才能进来。

   堵策略可以理解是黑名单,规定范围的人不可以进来。那里但是你必须有身份认证,否则不能进为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。


5、检查和处理机制

检查条件:       #根据什么来检查

IP:源地址,目标地址

TCP:SPORT,DPORT,Flags

UDP:SPORT,DPORT,Flags

ICMP:ICMP-TYPE

扩展检查机制:

   还可以根据time,协议,string,state(connection-tracking)


处理机制:      #匹配到规则的数据包该怎样处理

DROP(悄悄丢弃),REJECT(返回消息明确拒绝),ACCEPT(接受)

SNAT,DNAT:

RETURN:跳转回

REDIRECT:做端口映射

LOG:日志


【linux基础】22、iptables(上)