iptables部分概念

iptables部分概念

本篇内容非原创,由本人整理,仅供学习之用。部分原博参见脚注。

1. 防火墙简介

防火墙是一种应用于网络上的过滤机制,从保护对象上可分为:主机防火墙、网络防火墙,从物理上可分为:硬件防火墙、软件防火墙

  • 对象分类

    • 主机防火墙:针对于单个主机进行防护
    • 网络防火墙:往往部署于网络边界,对流入以及流出的流量进行过滤
  • 物理分类

    • 硬件防火墙:拥有经过特别设计的硬件及芯片,性能高、成本高
    • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低、成本低

2. firewalld和iptables的异同

  • 同:firewalld 与 iptables 都是 Linux 中防火墙的管理程序,但其实其角色主要为对于防火墙策略的管理,真正的防火墙执行者是位于内核中的 Netfilter,因此iptables防火墙应该称为netfilter/iptables防火墙。
  • 异:
    • iptables 仅能通过命令行进行配置;而 firewalld提供了图形接口,类似windows防火墙的操作方式
    • iptables 每一个单独更改意味着清除所有旧的规则,并从 /etc/sysconfig/iptables 中读取所有新的规则;
      而 firewalld 在有规则变动后,可以仅仅运行规则中的不同之处,即在 firewalld 运行时间内,改变设置时可以不丢失现行链接
    • iptables 的配置文件在 /etc/sysconfig/iptables 中;
      而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中
    • iptables 没有守护进程,并不能算是真正意义上的服务;而 firewalld 有守护进程

3.iptables基础

iptables 准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的 netfilter,而 iptables 仅仅是 netfilter 的代言人,其所负责的主要功能便是与用户交互,获取到用户的要求,并转化成 netfilter 可以接受的信息。

  • 防火墙的实现机制
    防火墙的核心处理机制是过滤,而说到过滤,就必须具有“条件 & 动作”这两个关键要素,而在 iptables 中,这两种要素分别叫做“rule & target”,可以理解成符合 rule 的流量将会去往 target。

  • 匹配规则的要素
    防火墙的处理对象是网络流量,而对于网络流量来讲,标识流量的最重要的信息便是五元组,包括:S_IP, S_PORT, D_IP, DI_PORT, TCP/UDP iptables常用的也往往是根据五元组中的某个或某些要素进行过滤

  • iptables策略
    一般提到的iptables是netfilter/iptables框架中运行在用户空间的应用软件。它通过控制内核控件中的netfilter模块,来管理网络数据包的流动转送。其中最核心的是定义iptables的策略。iptables策略是由一组有序的规则建立的,告诉内核如何处理数据包。iptables的概念从小到大是:iptables - 表 - 链 - 规则。

3.1 链

3.1.1 什么是链

为实现报文的安全传输,屏蔽某些攻击;或是转换报文的源、目标地址,内核开发者在5个精心选择的位置开发了钩子函数(即netfilter功能模块),用于实现在不同位置检查、处理流经的网络报文。相当于路上的卡点。
就是从报文进入到报文离开这整个期间,计算机处理报文的关键环节
就好比污水处理厂,污水进入前得处理一下,进入后得沉淀一下,送回时又得进行一些处理,那么这3个节点就是关键环节。

3.1.2 为什么叫链

因为防火墙是对报文进行规则匹配,然后执行相应动作。但在关键环节上,往往不止一条规则,而是有大量的规则,而且这些规则都是按顺序排列的,待匹配的报文需要按顺序一个一个规则的进行匹配,直到匹配到一条规则为止,所以在每个关键环节上的匹配过程,就像是一条有顺序的链。
好比污水处理厂,必须在个别关键环节部署处理措施,比如在进入废水厂时,先进行一批处理。处理可能包括粗滤、细滤等各种方式,而且各种方式不能随意排列,必定是按照一定的顺序依次进行,比如先粗滤,再细滤。

3.1.3 链的种类及位置

iptables就是在以下链上定义规则的工具。
在netfilter/iptables框架中,在内核控件定义的5个位置以及对应规则链:

位置
PREROUTING数据包刚刚进入网络层的位置
INPUT经路由判断,数据包从内核流入本机用户空间的位置
OUTPUT数据包从本机用户空间进程发出的位置,后接路由判断出口的网络接口
FORWARD经路由判断,数据包不进入本机用户空间,只是进行转发的位置
POSTROUTING数据包将通过网络接口出去的位置

记住,链其实就是报文处理的重要环节,所以很容易就得出有以下两个重要环节:

  • INPUT:进入主机
  • OUTPUT:离开主机

但还有一种复杂的情况,就是报文的目标并不是本主机,而只是借道本主机,希望通过本主机去往下一台主机。
就好比我们的这个污水处理厂只处理生活污水,并不具备能力可以完全处理工业污水,但是政府又要求我们要对工业污水进行一下简单的处理,之后再传送给工业污水处理厂。那么就容易得出以下三个重要环节(链):

  • PREROUTING:路由前
  • FORWARD:转发
  • POSTROUTING:路由后
3.1.4 链生效的时机
生效时机
PREROUTING报文到达主机网卡的一刹那,就会被主机的PREROUTING链上的规则检查
INPUT经过PREROUTING的报文,之后进行路由选择。如果是要发给主机某进程的报文,则经过INPUT链上定义的规则检查
OUTPUT主机要发送给其他主机的报文(不论是响应对方还是向对方主动发),首先经过OUTPUT链
FORWARD经过PREROUTING的报文,进行路由选择。如果是要发给其他主机的报文,则经过FORWARD链上定义的规则检查
POSTROUTING在本机报文发送出主机前一刹那,经过POSTROUTING链上的规则检查

下面的图中,红色箭头表示报文流入流程,绿色箭头表示报文转发流程,蓝色箭头表示报文流出流程。
为了便于理解,使用双网卡,但事实上PREROUTING、POSTROUTING与具体的网卡无关,就算只有一张网卡,流入的报文还是会第一时间被PREROUTING检查。
这里写图片描述

3.1.5 自定义链

上述5个链成为内置链。
还可根据需要自定义链,自定义链上的规则无法直接生效,要被某个内置链引用才可以。
创建自定义链:iptables -N CHAIN_NAME
调用格式:iptables …… -j CHAIN_NAME
这样做的目的,就是可以把某一类规则定义于一个自定义链中,从而可以一并引用或一并删除,而不用逐条规则处理。


3.2 表

3.2.1 什么是表

在每个链上都有一堆规则,但是部分规则是相似的,那我们把一些实现相同功能的规则放在一起,就能轻松的完成复用了。
好比污水处理厂,粗滤、细滤基本上是好多关键环节都要用到的,那何不将粗滤网与细滤网直接封装到一根管子里,要用的时候,直接整根管子接上去就能一次实现两个功能,岂不方便?

3.2.2 有哪些表
表名内核模块介绍
filteriptables_filter用于按规则过滤报文
natiptable_nat用于地址转换
mangleiptable_mangle用于修改报文中的部分信息,拆解报文,进行修改,重新封装
rawiptable_raw关闭 nat 表上启用的连接追踪机制

|security | - | 暂不介绍 |

3.3 链与表

3.3.1 iptables各表定义规则的链
可定义规则链
filterINPUT、FORWARD、OUTPUT
natPREROUTING、INPUT、OUTPUT、POSTROUTING
manglePREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
rawPEROUTING、OUTPUT
3.3.2 优先级

有的链上可定义多个表的规则。
如果多个表的规则出现在同一链上,生效次序:

raw > mangle > nat > filter

在同一链上可定义多条同一表的规则(比如filter表),这些规则是自上而下依次匹配,如果找到匹配到的规则,则按此规则处理,后续规则不再匹配。


3.4 规则

规则主要包含两部分:条件、动作

3.4.1 匹配条件

iptables 主要是通过网络流量的五元组(某个或某些)来进行匹配,包括:

要素名称
S_IP源IP
S_PORT源端口
D_IP目的IP
D_PORT目的端口
TCP/UDP四层协议
3.4.2 处理动作

iptables 中称为 target,用于在数据包匹配一条规则时触发的一个动作。

动作含义
ACCEPT允许数据包通过
DROP直接丢弃数据包。不回应任何信息,客户端只有当该链接超时后才会有反应
REJECT拒绝数据包。会给客户端发送一个响应的信息
REDIRECT在本机做端口映射
LOG在 /etc/log/messages 中留下记录,但并不对数据包进行任何操作
RETURN在调用链中继续处理数据包
SNAT源 NAT,解决私网用户用同一个公网 IP 上网的问题
MASQUERADE地址伪装。作用也是源地址转换,用于在转换成的地址不确定时使用。是 SNAT 的一种特殊形式,适用于动态的、临时会变的 IP 上
DNAT目的 NAT,解决私网服务端,接收公网请求的问题
3.4.3 通用处理动作
处理动作意义子选项
LOG把匹配到的报文信息记录日志(/var/log/messages)–log-level,定义日志级别,就和httpd的类似
--–log-prefix,在每条日志前添加一些字符用于提示,最多不超过29字母
RETURN返回调用链

默认情况下自定义链的最后一条规则就是执行RETURN动作,使得没有规则匹配到时,能返回调用它的链。

3.4.4 filter表常用处理动作

ACCEPT、DROP、REJECT

3.4.5 nat表常用处理动作

SNAT、DNAT、MASQUERADE、REDIRECT

3.4.6 设置规则原则
  1. 同一表的同一链,规则自上而下依次匹配生效。只要匹配到,则执行对应处理动作,后续规则不再匹配。
  2. 原则上讲,对于同是ACCEPT处理动作的规则,匹配条件范围越大,越放在前。否则如果前N条不匹配,第N+1条匹配到了仍要放行,前面的规则匹配白白开销资源。
  3. 原则上讲,对于同是DROP、REJECT处理动作的规则,匹配条件范围越大,越放在前。
  4. 放行规则和拒绝规则相比,哪个匹配的范围越小,越放在前(范围小的可视为是做特殊处理,所以放在前面匹配)。
  5. 规则越少越好,多条规则如能合并,就合并。
  6. 匹配越频繁的规则,越写在前面。以减少该规则之前无效匹配的频率

[1] iptables详解 https://blog.csdn.net/chocolee911/article/details/80688200
[2] iptables https://blog.csdn.net/wangzhenyu177/article/details/78444788

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值