IPTables(Linux 防火墙)命令初学者指南
如果你使用电脑一段时间,你一定对“防火墙”这个词很熟悉。我们知道事情从表面上看确实很复杂,但通过本教程,我们将解释IPTable的基础知识和基本命令的使用,这样即使你是一名网络学生或想要深入研究网络,你也可以从本指南中受益。
什么是 IPTables?
防火墙的工作方式非常简单。它在可信任网络和不可信任网络之间建立一道屏障,这样您的系统就可以免受恶意数据包的攻击。
但是我们如何决定什么是安全的,什么不是安全的呢?默认情况下,您确实有一些权限来为防火墙设置规则,但为了更详细地监视传入和传出的数据包,IPTables是您最需要的。
IPTables可用于个人计算,也可应用于整个网络。使用IPTables,我们将定义一组规则,通过这些规则我们可以监控、允许或阻止传入或传出的网络数据包。
我们不会只关注整个理论部分,而是只讨论实际生活中重要的事情。因此,让我们从了解IPTables的核心概念开始。
了解 IPTables 的概念
在讨论IPTables时,我们必须了解 3 个术语:表、链和规则。由于这些是重要部分,我们将逐一讨论。
因此让我们从表格开始。
IPTables 中的表
IPTables 中有 5 种类型的表,每种类型的表都应用了不同的规则。因此,让我们从最常见的表“ Filer ”开始。
- 过滤表– 这是使用IPTables时的默认和主表。这意味着只要您在应用规则时未提及任何特定表,这些规则就会应用于过滤表。顾名思义,过滤表的作用是决定是否应允许包到达目的地或拒绝其请求。
- NAT(网络地址转换) ——顾名思义,该表允许用户确定网络地址的转换。该表的作用是确定是否修改以及如何修改数据包的源和目标地址。
- Mangle 表– 此表允许我们修改数据包的 IP 标头。例如,您可以调整TTL以延长或缩短数据包可以承受的网络跳数。同样,其他 IP 标头也可以根据自己的喜好进行修改。
- RAW 表– 此表的主要用途是跟踪连接,因为它提供了一种标记数据包的机制,以便将数据包视为正在进行的会话的一部分。
- 安全表– 使用安全表,用户可以在网络数据包上应用内部SELinux安全上下文标记。
对于大多数用例,表的最后两种类型(RAW和Security)没有太多关系,只有前 3 个选项才算作主表。
现在,我们来谈谈Chains。
IPTables 中的链
它们在我们可以应用规则的网络路由点上起作用。在 IPTables 中,我们有 5 种类型的链,我们将逐一讨论。请记住,并非每种类型的表都提供每种类型的链。
- 预路由——一旦数据包进入网络堆栈,此链就会应用于任何传入数据包,并且在就数据包的最终目的地做出任何路由决策之前就会处理此链。
- 输入链– 这是数据包进入网络堆栈的点。
- 前向链– 这是数据包通过系统转发的点。
- 输出链— 当数据包通过您的系统并发出时,输出链将应用于数据包。
- 后路由——这与预路由链完全相反,在做出路由决策后应用于转发或传出的数据包。
现在,剩下要讨论的就是规则,它是我们讨论的三个规则中最简单的一个。所以让我们完成理论部分的剩余部分。
IPTables 中的规则
规则不过是用户操纵网络流量的一组或单个命令。一旦每个链开始运作,数据包就会根据定义的规则进行检查。
如果一条规则不满足条件,则会跳到下一条规则;如果满足条件,则下一条规则将由目标的值指定。
每个规则都有两个组成部分:匹配组成部分和目标组成部分。
- 匹配组件– 它们是定义可以通过协议、IP 地址、端口地址、接口和标头匹配的规则的不同条件。
- 目标组件– 这是一旦满足条件就会触发的操作。
这是解释部分,现在我们将介绍与 Linux 中IPTables相关的基本命令。
在 Linux 中安装 IPTables 防火墙
在现代 Linux 发行版(例如Pop!_OS)中,IPTables是预先安装的,但如果您的系统缺少 IPTables 包,您可以按照给出的说明轻松安装它:
要在基于 RHEL 的 Linux 发行版(例如 Rocky Linux、AlmaLinux 和 CentOS Stream)上安装 IPTables ,请使用以下dnf 命令。
$ sudo dnf install iptables-services
重要提示:如果您正在使用Firewalld,则必须在继续安装之前将其禁用。要完全停止防火墙,您必须使用以下命令:
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld $ sudo systemctl mask firewalld
要在基于 Debian 的 Linux 发行版上安装 IPTables ,请使用以下apt 命令。
$ sudo apt install iptables
安装IPTables后,您可以通过以下命令启用防火墙:
$ sudo systemctl enable iptables $ sudo systemctl start iptables
要监视IPTable服务的状态,可以使用给定的命令:
$ sudo systemctl status iptables
学习 Linux 中 IPTables 命令的基础知识
一旦我们完成安装,我们就可以继续使用IPTables的语法,它将允许您调整默认值并允许您根据需要进行配置。
IPTables的基本语法如下:
# iptables -t {type of table} -options {chain points} {condition or matching component} {action}
让我们了解一下上述命令的解释:
桌子
第一部分是我们可以从任意 5 个可用表选项中进行选择,如果从命令中-t
删除该部分,它将使用过滤表,因为它是默认表类型。-t
链条选项
第二部分是链条。在这里,您可以从不同的链点选项中进行选择,这些选项如下所示:
-A
– 在链的末尾添加新规则。-C
– 检查规则是否满足链的要求。-D
– 允许用户从链中删除现有规则。-F
– 这将删除用户定义的每个规则。-I
– 允许用户在指定位置添加新规则。-N
– 创建一个全新的链条。-v
– 与列表选项一起使用时,提供详细信息。-X
– 删除链条。
配套元件
匹配选项是检查链需求的条件。您可以从各种选项中进行选择,其中一些选项如下:
Protocols -p Source IP -s Destination IP -d IN interface -i OUT interface -o
对于TCP来说,它们如下:
-sport -dport --tcp-flags
动作组件
现在,如果我们考虑操作部分,可用的选项取决于表的类型(例如NAT ),而 mangle 表与其他表相比具有更多选项。通过使用操作,您还可以定位特定的表或链。
最常用的操作是Jump (-j)
为我们提供几个选项,例如:
- 接受——用于接受数据包并结束遍历。
- DROP—用于丢弃数据包并结束遍历。
- REJECT——这与 DROP 非常相似,但它会将拒绝的数据包发送到源。
- RETURN——这将停止在子链中遍历数据包,并将特定数据包发送到上级链而不产生任何影响。
完成语法后,我们将向您展示如何使用IPTables,包括基本配置。
列出当前的 IPTables 规则集
如果您想检查默认情况下通过防火墙的内容,列出当前规则集是一种完美的方法。要列出应用的规则,请使用给定的命令:
$ sudo iptables -L
允许/拒绝特定端口上的网络流量
在本节中,我们将向您展示如何允许或拒绝特定端口的网络流量。我们将向您展示一些众所周知的端口,因为我们希望尽可能地提供帮助。
如果您想允许HTTPS网络流量,我们必须使用给定的命令允许端口号443 :
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
类似地,您也可以通过以下命令禁用HTTP网络流量:
$ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT
所用命令选项的解释:
-p
用于检查指定的协议,在我们的例子中是 TCP。--dport
用于指定目标端口。-j
用于采取行动(接受或放弃)。
使用 IP 地址控制流量
是的,您还可以通过 IP 地址控制网络流量。不仅可以控制一个或两个 IP 地址,还可以控制 IP 地址范围,我们将向您展示如何操作。
要允许特定 IP 地址,请使用给定的命令结构:
$ sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT
类似地,要丢弃来自特定 IP 的数据包,您需要使用给定的命令结构:
$ sudo iptables -A INPUT -s 192.168.0.27 -j DROP
如果需要,您还可以利用给定的命令结构来控制 IP 地址范围:
$ sudo iptables -A INPUT -m range --src-range 192.168.0.1-192.168.0.255 -j REJECT
删除用户定义规则
有时我们在创建规则时可能会犯错误,而解决这些错误的最佳方法是删除它们。删除定义的规则是本指南中最简单的过程,要删除它们,首先,我们必须列出它们。
要用数字列出定义的规则,请使用给定的命令:
$ sudo iptables -L --line-numbers
要删除规则,我们必须遵循给定的命令结构:
$ sudo iptables -D <INPUT/FORWARD/OUTPUT> <Number>
假设我想从INPUT中删除第 10 条规则,因此我将使用给定的命令:
$ sudo iptables -D INPUT 10
为了检查我们是否成功删除了规则,我们必须通过给定的命令列出规则:
$ sudo iptables -L –line-numbers
可以看到,我们成功删除了第 10 条规则。
保存定义的IPTables规则
您可能想知道为什么我们必须保存应用后运行良好的规则?问题是,一旦系统重新启动,所有未保存的定义规则都将被删除,因此保存它们对我们来说至关重要。
要在基于RHEL的发行版中保存规则:
$ sudo /sbin/service iptables save
要在Debian衍生产品中保存规则:
$ sudo /sbin/iptables–save
要了解有关 IPtable 防火墙规则的更多信息,请查看我们的详细指南:
在本指南中,我们尝试让事情变得简单,以便每个人都能从中受益。这是关于IPTables的基本解释指南,如果您有任何疑问,请随时在评论中提问。