【网络】iptables 1 概念


相关文章:
【网络】iptables 1 概念
【网络】iptables 2 查看规则

1. Netfilter

在linux操作系统中,Netfilter组件是集成在linux内核中扩展各种网络服务的结构化底层框架,在内核级提供防火墙功能。内核中选取五个位置放了五个hook(勾子) function(INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。

在这里插入图片描述
图一 架构图

入上图所示,绿色框代表的就是Netfilter提供的钩子,而旁边黄色的,代表 了存储规则的表,以INPUT为例,有四种表, mangle表、nat表、filter表、raw表,每种表 记录一组规则,该组规则表示功能相近,nat表 存的是 ip转换相关的规则。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

2. iptables

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

根据上图,报文的流向:

  • 接收到报文,并需要发送本机某进程的报文:PREROUTING -->路由决策–> INPUT

  • 接收到报文,并需要由本机转发的报文:PREROUTING -->路由决策–> FORWARD --> POSTROUTING–> 从网卡出去

    补充:转发场景需要Linux开启转发功能,否则数据报文进入FORWARD链直接丢弃;临时开启执行命令sysctl net.ipv4.ip_forward=1或者echo “1” >/proc/sys/net/ipv4/ip_forward;永久生效需要修改/etc/sysctl.conf,增加内容net.ipv4.ip_forward = 1保存,再执行命令:sysctl -p

  • 由本机的某进程发出报文(通常为响应报文):OUTPUT–>路由决策 --> POSTROUTING–> 从网卡出去

内核中数据包的传输过程:

(1)当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

(2)如果数据包就是进入本机的,数据包就会到达INPUT链。经INPUT链检查后,数据包被发往本地进程。本地进程进行相应处理后发送响应数据包,数据包经过OUTPUT链,然后到达POSTROUTING链输出;如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

2.1 链的概念

我们知道,防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"",所以,我们把每一个"关卡"想象成如下图中的模样 :
在这里插入图片描述

2.2 表的概念

每个"链"上都放置了一串规则,但是这些规则有些很相似,为了方便管理,我们把相同类型的规则存储于同一张表,而iptables已经为我们定义了4种表,每种表对应了不同的功能:

功能内核模块
filter表负责过滤功能,防火墙iptables_filter
nat表network address translation,网络地址转换功能iptable_nat
mangle表拆解报文,做出修改,并重新封装 的功能iptable_mangle
raw表关闭nat表上启用的连接追踪机制iptable_raw

每个"链"中的规则都存在于哪些"表"中?对应图一,能得出下表:

规则可以出现的表
PREROUTINGraw表,mangle表,nat表
INPUTmangle表,filter表,(centos7中还有nat表,centos6中没有
OUTPUTraw表,mangle表,nat表,filter表
FORWARDmangle表,filter表
POSTROUTINGmangle表,nat表

这个表格是什么意思呢?它的意思是说,prerouting"链"只拥有nat表、raw表和mangle表所对应的功能,所以,prerouting中的规则只能存放于nat表、raw表和mangle表中

换个维度来看上个表:

可以存储的规则
rawPREROUTING,OUTPUT
manglePREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
natPREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有
filterINPUT,FORWARD,OUTPUT

当我们使用 iptables -L -t filter 时,我们看到的内容就是 filter表内,按 input、FORWARD、OUTPUT 三个链 进行分组 ,各自一组规则。
在这里插入图片描述

从上图,我们观看nat表,可以发现有PREROUTING (接收流程起始点)、POSTROUTING(发送流程结束点),而filter就没有,原因是 nat 要么在 入口转化,要么出口转化。

2.3 表的顺序

iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下。
优先级次序(由高而低):
raw --> mangle --> nat --> filter
在这里插入图片描述
所以一个报文发送到某台虚拟机后,被虚拟机网卡接收,会进入的虚拟机网络协议栈处理,先经过PREROUTING链处理,具体来说先走raw表的PREROUTING规则、再走mangle表、最后在走nat表PREROUTING规则。

3. 匹配条件

匹配条件分为基本匹配条件与扩展匹配条件
基本匹配条件:
源地址Source IP,目标地址 Destination IP
上述内容都可以作为基本匹配条件。
扩展匹配条件:
除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。
源端口Source Port, 目标端口Destination Port
上述内容都可以作为扩展匹配条件

4. 匹配规则

  • ACCEPT:允许数据包通过。
    进行完此处理动作后,将不再比对当前链的其它规则,直接跳往下一个规则链
  • DROP:直接丢弃数据包。
    进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
    拒绝原因有以下几种类型:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
    进行完此处理动作后,将直接跳往下一个规则链
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
    进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。
  • DNAT:目标地址转换。改写目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼
  • REDIRECT:在本机做端口映射。
  • MARKT 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。
  • RETURNT 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自定规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

参考:

http://www.zsythink.net/archives/1199/ iptalbes
https://blog.csdn.net/beanewself/article/details/78317626
详解网络知识:iptables规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值