iptables详解(1):iptables概念

防火墙相关概念。

逻辑上,防火墙可以分为主机防火墙和网络防火墙。

主机防火墙:针对单个主机进行防护

网络防火墙:处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网

网络防火墙和主机防火墙并不冲突,网络防火墙主外(集体),主机防火墙主内(个人)

 

物理上,防火墙可以分为硬件防火墙和软件防火墙

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

 

iptables其实不是真正的防护群殴爱你个,理解为一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应内核空间netfilter

iptables是命令行工具,位于用户空间,利用命令行操作内核空间的netfilter,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

netfilter是Linux操作系统核心层内部的数据包处理模块,功能如下:

1.网络地址转换(Network Address Translate)

2.数据包内容修改

3.数据包过滤的防火墙功能

 

iptables基础

iptables是按照规则处理数据包。

规则 存储在内核空间的信息包过滤表中。

        规则指定 源地址、目的地址、传输协议(如TCP、UDP、ICMP)、服务类型(如HTTP、FTP、SMTP)等。

处理 当数据包的包头符合规则指定的内容,iptables就执行所定义的方法来处理这些数据包。

        处理方法主要有放行(accept)、拒绝(reject)、丢弃(drop)

配置防火墙的主要工作就是添加、修改和删除这些规则。

 

客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核一部分,客户端信息会通过内核的TCP协议传输到用户空间的web服务中,此时的客户端报文的目标终点为web服务所监听的套接字(IP:port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的ip和端口反而变成了原点。

 

 

 

 

 

①客户端报文访问目标地址是本机某进程。经过的内核链是  PREROUTING链 --> INPUT链--> web服务

②由本机某进程发出的报文。OUTPUT链 --> POSTROUTING链

③客户端访问的目标地址是其他服务器,转发作用,则不会经过INPUT链,也不会发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去,经过的链是路由前、转发、路由后,PREROUTING链 -->  FORWARD链  --> POSTROUTING链

 

 链的概念

因为经过一个链的时候不可能只有一条规则,所以很多规则在链上就是下图

 

 

表的概念

每个链上都有一串规则,但是有些规则是类似的A类规则都是对 ip 或者 端口的过滤,B类规则都是修改报文,实现相同规则的报文应该是可以放在一起的,规则分类相同功能放在一起的集合叫做“表”

filter表:过滤。                                                   内核模块:iptables_filter

nat表:网络地址转换。                                       内核模块:iptables_nat

mangle表:拆解报文,做出修改,并重新封装。内核模块:iptables_mangle

raw表:关闭nat表上启用的连接追踪机制。        内核模块:iptables_raw

 

表和链的关系

某些 “链” 中注定不会包含某种规则,就好像游戏中A关卡只负责打击陆地敌人,没有防空能力,B关卡可能只负责空中敌人没有防御步兵能力

                                 

 

prerouting链只拥有 nat 表、raw表和mangle表所对应功能,prerouting规则只存放在nat、raw和mangle表

PREROUTING  规则可以存在  raw表,mangle表,nat表

INPUT               规则可以存在                mangle表,filter表

FORWARD       规则可以存在                mangle表,filter表

OUTPUT           规则可以存在  raw表, mangle表,filter表,nat表

POSTROUTING 规则可以存在               mangle表,nat表

 

但是在实际的使用过程中,是以“表”作为操作入口,对规则进行定义,表(功能)< -- > 链 (钩子)

raw表    用于处理异常         

PREROUTING链、OUTPUT链

mangle表      用于指定如何处理数据包,能改变TCP头中的Qos位

PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 所有的链都可以被使用 

nat表           

PREROUTING链(刚到本机在路由器转发前的数据包,会转换目标ip地址,通常用于DNAT)

POSTROUTING链(处理即将离开本机的数据包,转换源ip地址,通常用于SNAT) (centos7中有INPUT centos6中没有)

OUTPUT链(处理本机产生的数据包)

filter表         

INPUT链 (处理  来自外部的数据)

FORWARD链(将数据转发到本机的其他网卡设备)

OUTPUT链(处理向外发送的数据)

 

 数据包经过一个“链” 会将当前的规则都匹配一遍 匹配有顺序 可看当前的哪些链是最先开始执行的呢 

 

raw  --> mangle --> nat

 

同一条链中的表的执行优先级从高到低是这样的,目前一条链中所有的都有的只有OUTPUT表

raw --> mangle --> nat --> filter

为了方便管理 还会在某个表中创建自定义链,针对某个应用程序所设置的规则放置在这个自定义链中,但是自定义链不能直接使用,只能被某个默认的链当做 动作 去调用才能起租用,自定义链可以想象成比较短的链,这条短链规则是针对某个应用程序制定,这条链不能直接使用,需要焊接在iptables默认定义链上,才能被iptables使用,所以自定义链都要被当做 “动作”去引用。

 

数据经过防火墙的流程

 

 

 

 在写iptables规则的时,需要牢记这张图的规则

 

 centos7 的nat 有INPUT的 但是centos6没有INPUT

 

 

匹配条件 和 动作 组成了 规则

--匹配条件分为(基本匹配条件)和(扩展匹配条件

1、基本匹配条件: 源地址、目标地址

2、扩展条件是在上面的基础上加上其他条件,以模块的形式存在,使用这些条件需要依赖对应扩展模块,如 源端口,目的端口

 

--处理动作 在规则中 为 target 分为(基本动作)和(扩展动作)

1、ACCECPT:允许数据包通过

2、DROP:直接丢弃数据包不给任何回应信息,客户端只有从超时的时候才知道

3、REJECT:拒绝数据包通过,客户端会收到数据发送端的响应拒绝信息

4、SNAT:源地址转换,解决内网用户用同一个公网上网的问题

5、MASQUERADE:SNAT的特殊形式,使用在动态临时会变的ip地址上

6、DNAT:目标地址转换

7、REDIRECT:在本机做端口映射

8、QUEUE:将数据包移交到用户空间

9、RETURN:防火墙停止执行当前链中的后续rules 并返回到调用链(the calling chain)中

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,只做操作过程的记录。

 

 

参考链接 :http://www.zsythink.net/archives/1199

 

posted @ 2019-12-05 21:02  陈晓猛  阅读(2137)  评论(0编辑  收藏  举报