Linux防火墙基础

Linux 的防火墙体系主要是工作在网络层,正对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
在Linux中netfilteriptables都是Linux防火墙。区别如下

Netfilter和iptables是与Linux防火墙相关的两个关键组件。

Linux 防火墙基础

  1. Netfilter:

    • 功能:Netfilter是Linux内核中的框架,用于处理数据包的过滤和操作。它位于Linux内核的网络协议栈中,负责管理数据包的流动。
    • 特点:Netfilter提供了一个强大的框架,可以用于处理网络数据包,包括过滤、修改、重定向和NAT(网络地址转换)等功能。
    • 钩子:Netfilter通过在不同网络数据包处理阶段插入钩子来实现其功能。这些钩子包括INPUT(入站数据包处理)、OUTPUT(出站数据包处理)、FORWARD(转发数据包处理)等。
    • 状态跟踪:Netfilter还支持连接状态跟踪,允许跟踪网络连接的状态,以便更好地控制网络流量。
  2. iptables:

    • 功能:iptables是一个用户空间工具,用于配置Netfilter的规则。它允许管理员定义防火墙策略,包括允许、拒绝、重定向和修改数据包。
    • 规则:iptables规则通常被定义为由表(table)和链(chain)组成的规则集。表定义了规则的类型,如filter表用于过滤规则,nat表用于NAT规则等。链是规则按顺序执行的位置,如INPUT链用于入站数据包。
    • 命令:管理员使用iptables命令来创建、查看、修改和删除规则。常见的iptables命令包括iptables -A(添加规则)、iptables -D(删除规则)、iptables -L(列出规则)等。
    • 持久性:iptables规则通常会在系统重启后丢失。为了使规则持久化,可以使用工具如iptables-persistent(Debian/Ubuntu)或firewalld(Red Hat/CentOS)。

Netfilter和iptables一起提供了Linux防火墙的核心功能。管理员可以使用iptables来配置Netfilter规则,从而控制网络数据包的流动,实现网络安全策略,设置端口转发和NAT规则,以及更多其他功能。这两个组件在Linux服务器和路由器上广泛用于网络安全和数据流量管理。

iptables 的表、链结构

iptables 的作用是为包过滤机制的实现提供规则(或策略),通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包如何处理,为了方便管理iptables采用了“表链”的分层结构。主要为5表5链其中重要的是4个表,5条链如下图
请添加图片描述

规则表

iptables 是一个用于配置 Linux 操作系统上的防火墙规则的工具,它使用表(tables)、链(chains)、规则(rules)等概念来管理和控制网络数据包的流向和处理。iptables 的表和链结构包括四个主要表和一些默认链:

  1. Filter:Filter 表是 iptables 默认使用的表,用于控制数据包的过滤和阻止。它包括三个默认链:

    • INPUT链:控制数据包进入本地系统的规则。
    • OUTPUT 链:控制从本地系统发送的数据包的规则。
    • FORWARD 链:控制通过本地系统进行路由的数据包的规则。
  2. NAT:NAT 表用于网络地址转换(Network Address Translation),它允许修改数据包的源地址和目标地址,通常用于实现端口转发和网络地址转换等。NAT 表包括三个默认链:

    • PREROUTING 链:在数据包进入路由前应用规则。
    • POSTROUTING 链:在数据包离开路由后应用规则。
    • OUTPUT 链:在本地系统生成数据包后应用规则。
  3. Mangle:Mangle 表用于修改数据包的头部信息,如 TTL(Time To Live)字段等。Mangle 表包括五个默认链:

    • PREROUTING 链:在数据包进入路由前应用规则。
    • OUTPUT 链:在本地系统生成数据包后应用规则。
    • INPUT 链:控制数据包进入本地系统的规则。
    • FORWARD 链:控制通过本地系统进行路由的数据包的规则。
    • POSTROUTING 链:在数据包离开路由后应用规则。
  4. Raw:Raw 表用于配置特殊的规则,通常用于连接追踪(connection tracking)和处理特定类型的数据包。Raw 表包括两个默认链:

    • PREROUTING 链:在数据包进入路由前应用规则。
    • OUTPUT 链:在本地系统生成数据包后应用规则。

每个表都包含多个链,而每个链都可以包含多个规则。规则定义了数据包的匹配条件和对匹配的数据包采取的操作。当数据包到达系统时,iptables 将按照表、链和规则的顺序来匹配和处理数据包,直到找到与数据包匹配的规则或者达到默认策略(默认策略可以是接受、拒绝或丢弃数据包)。

要使用 iptables 来配置防火墙规则,您需要了解这些表和链的结构,并定义适当的规则以满足您的网络安全需求。注意,iptables 配置可以复杂,需要小心谨慎地配置以确保网络的安全性和可用性。此外,现代的 Linux 发行版也提供了更高级的工具和配置方式,如 nftables,可用于替代 iptables

规则链

在iptables中,规则链(Rule Chains)是一组规则的集合,用于定义如何处理特定类型的网络数据包。规则链包括如下几种主要类型:

  1. INPUT:INPUT链用于控制传入到本地系统的数据包。这些数据包通常是目的地址为本地系统的。您可以在这个链中定义规则,以确定哪些数据包将被接受(允许进入本地系统)和哪些将被拒绝或丢弃。

  2. OUTPUT:OUTPUT链用于控制从本地系统发出的数据包。这些数据包通常是源地址为本地系统的。您可以在这个链中定义规则,以确定哪些数据包将被接受(允许离开本地系统)和哪些将被拒绝或丢弃。

  3. FORWARD:FORWARD链用于控制通过本地系统进行路由的数据包,即不是源地址也不是目的地址为本地系统的数据包。这些数据包通常是在本地系统上进行路由转发的。您可以在这个链中定义规则,以确定哪些数据包将被接受(允许继续路由)和哪些将被拒绝或丢弃。

  4. **PREROUTING **:PREROUTING链用于控制数据包进入路由之前经过的规则。这通常用于进行网络地址转换(NAT)和对数据包进行修改,例如端口转发等。您可以在这个链中定义规则,以在数据包到达路由前进行操作。

  5. POSTROUTING:POSTROUTING链用于控制数据包离开路由后经过的规则。这也通常用于网络地址转换(NAT)等。您可以在这个链中定义规则,以在数据包离开路由后进行操作。

每个规则链都包含一系列规则,每个规则定义了特定条件下对数据包的操作,这些条件可以基于数据包的源地址、目标地址、协议、端口等等。规则链的配置可以通过iptables命令行工具来完成。

数据包过滤匹配的流程

在iptables中,不同表之间的规则处理顺序通常是固定的,表之间的处理顺序如下:

**Raw 表(raw)**:数据包首先进入Raw表,这是数据包处理的第一个表。Raw表通常用于连接追踪(connection tracking)和特殊类型的数据包处理。您可以在PREROUTING链和OUTPUT链中定义Raw表的规则。这些规则会在其他表的规则之前生效。
**Mangle 表(mangle)**:接下来,数据包进入Mangle表。Mangle表主要用于修改数据包的头部信息,如TTL(Time To Live)等。规则可以在PREROUTING、OUTPUT、INPUT、FORWARD和POSTROUTING链中定义。
**NAT 表(nat)**:如果您使用NAT(网络地址转换)功能,数据包会进入NAT表。NAT表用于修改数据包的源地址和目标地址,实现端口转发等。规则可以在PREROUTING、OUTPUT、INPUT、FORWARD和POSTROUTING链中定义。
**Filter 表(filter)**:最后,数据包到达Filter表,这是数据包处理的最后一个表。Filter表用于数据包的过滤和阻止。规则可以在INPUT、OUTPUT和FORWARD链中定义。

这是iptables处理数据包的基本流程。数据包首先进入Raw表,然后进入Mangle表,接着进入NAT表(如果需要),最后进入Filter表。每个表内部都有不同的链,规则会根据数据包的流向和特性在这些链中进行匹配和处理。要注意的是,具体的规则配置可以根据您的需求而有所不同,您可以根据网络配置的要求来定义规则和表的使用顺序。

规则链的处理流程

请添加图片描述

编写防火墙规则

编写防火墙规则时,您可以使用iptables命令来定义规则。首先我们来了解一些常用的管理选项

常用的管理

项目名功能特点
-A在指定链末尾添加一条规则
-D删除指定链中一条规则
-I在指定链中插入一条新的规则,未指定默认第一条规则
-R修改替换指定链中的某一条规则
-L列出指定链中所有规则
-F清空规则链
-P设置指定链的默认策略
-n使用数字形式显示结果
-v查看规则列表时显示详细信息
-h查看命令帮助

iptables的一般用法

iptables -t 表名 管理选项 链名 匹配条件 -j 控制类型

添加新的规则

例如

iptables -t filter  -A INPUT  -s 192.168.2.1  -j ACCEPT

添加一条在filter表INPUT链中添加一条规则 运行192.168.2.1的通讯通过
然后在加一条不允许任何用户连接,这可以在黑名单模式下实现类似白名单的效果。(白名单模式下清空规则,会导致远端主机无法连接)

iptables -t filter  -A INPUT  -s 0.0.0.0\0    -j DROP

iptables -L可以查看规则表

iptables -L

在这里插入图片描述

可以看见我设置的两个规则在规则表中,但是192.168.2.30依然可以联通

在这里插入图片描述
已经无法链接了

在这里插入图片描述

删除、清空、替换规则

清空规则

iptables -vnL

之前添加的规则全部被清空
在这里插入图片描述
再将之前两条规则加回来
在这里插入图片描述
我现在删除 INPUT第二条规则

iptables -D  INPUT 2

第二条规则被删除
在这里插入图片描述
替换
将第一条规则替换

iptables -R INPUT 1 -s 0.0.0.0/0 -j DROP

在这里插入图片描述

通用匹配

直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡  
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.91.101 -j DROP
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT           //感叹号”!”表示取反

multiport扩展

以离散方式定义多端口匹配,最多指定15个端口

[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端

iprange扩展

指明连续的(但一般不是整个网络)ip地址范围

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

state

- NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
- ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
- RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
- INVALID:无效的连接,如flag标记不正确
- UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
格式:
--state state
 
ipatables  -A INPUT -m state --state   NEW            -j  REJECT
ipatables  -A INPUT  -m state --state  ESTABLISHED    -j   ACCEPT
                  
 新用户不可以访问  就用胡可以访问     

保存规则

iptables-save > /PATH/TO/SOME_RULES_FILE

加载规则

iptables-restore < /PATH/FROM/SOME_RULES_FILE
iptables-restore选项
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交

总结

iptables 是 Linux 中用于配置防火墙规则的主要工具,它允许管理员定义如何处理传入和传出的网络数据包。

iptables 使用表、链和规则的概念来管理和控制数据包的流向和处理。

iptables 包括四个主要表:Filter 表、NAT 表、Mangle 表和 Raw 表,每个表有不同的用途。

规则链包括 INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING 链,用于定义如何处理不同类型的数据包。

可以使用 iptables 命令来添加、删除、清空、替换规则,以及保存和加载规则集。

iptables 规则可以使用通用匹配、多端口匹配、IP 范围匹配、状态匹配等条件进行定义。

iptables 规则的顺序非常重要,数据包将按照表、链和规则的顺序匹配和处理。

确保在配置防火墙规则之前仔细考虑您的网络安全需求,以免影响网络的可用性和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值