使用 iptables 配置 Kali 防火墙

Kali LinuxBeginner
立即练习

介绍

在本实验中,你将学习如何使用 iptables 在 Kali Linux 上配置防火墙。iptables 是 Linux 内核中用于管理 IP 数据包过滤规则的强大工具。本实验的主要目标是理解并应用防火墙规则,通过基于 IP 地址、端口和协议控制流量,从而提升网络安全性。通过循序渐进的动手实践,你将查看当前的 iptables 规则、封禁特定 IP 地址、允许指定端口的流量,并保存你的配置。在 LabEx 虚拟机环境预配置的 Kali Linux 容器中,你将获得管理防火墙设置以保护网络流量的实用技能。

这是一个引导式实验,提供了详细的步骤说明来帮助你学习和练习。请仔细遵循指令完成每个步骤以获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 99%。它在学习者中获得了 100% 的好评率。

安装并查看 iptables 规则

在第一步中,你将安装 iptables 并学习如何查看 Kali Linux 容器中当前的防火墙规则。这是在进行任何更改之前了解现有防火墙配置的重要起点。

当你打开 LabEx 虚拟机环境中的终端时,系统会自动连接到 Kali Linux 容器的 Shell。你无需手动启动容器或进入 Shell,环境已经为你准备就绪。让我们从安装 iptables 并探索防火墙规则的当前状态开始。

iptables 是一个命令行工具,允许你管理 Linux 内核的 IP 数据包过滤规则。这些规则决定了网络流量的处理方式——是根据特定标准(如源 IP 或端口号)接受、丢弃还是重定向数据包。查看规则可以帮助你了解当前生效的策略。

首先,让我们更新软件包列表并安装 iptables。输入以下命令并按回车键:

apt update && apt install -y iptables

该命令将同步更新软件包列表并在一个步骤中完成 iptables 的安装。&& 运算符确保只有在更新成功的情况下才会执行安装。

预期输出(示例,实际输出可能有所不同):

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.x.x-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

现在 iptables 已经安装完毕,运行以下命令列出当前的 iptables 规则。输入命令并按回车键:

iptables -L -v -n

该命令的参数含义如下:

  • iptables:管理防火墙规则的工具。
  • -L:列出所选链中的所有规则。
  • -v:提供详细输出,包括数据包和字节计数器。
  • -n:以数字格式显示 IP 地址和端口,不进行名称解析。

执行此命令后,你将看到类似下方的输出。具体的输出内容可能会根据容器的初始配置而有所不同。

预期输出(示例,实际输出可能有所不同):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

此输出显示了三个主要的链:INPUT 用于入站流量,FORWARD 用于转发流量,OUTPUT 用于出站流量。每个链都显示了其默认策略(如 ACCEPT)以及任何已存在的特定规则。如果链显示为空(如本例所示),则表示当前没有应用任何自定义规则,所有流量都由默认策略控制。

请花一点时间查看输出。在添加或修改规则之前,了解防火墙的当前状态至关重要,你将在接下来的步骤中进行这些操作。这个基础步骤确保你熟悉 Kali Linux 容器中 iptables 的初始配置。

理解 iptables 链与策略

既然你已经安装了 iptables 并查看了初始规则,在创建自定义规则之前,让我们深入了解 iptables 的工作原理。在这一步中,你将学习不同的链及其默认策略。

iptables 将防火墙规则组织成「链」(Chains),链是数据包需要依次匹配的规则列表。三个主要的内置链分别是:

  • INPUT:处理发往本地系统的数据包。
  • FORWARD:处理经由本地系统路由转发的数据包。
  • OUTPUT:处理由本地系统产生并向外发送的数据包。

每个链都有一个「默认策略」(Default Policy),用于决定如何处理那些没有匹配到任何特定规则的数据包。最常见的策略是 ACCEPT(允许通过)和 DROP(丢弃数据包)。

让我们更仔细地检查当前的策略设置。运行以下命令查看每个链的详细信息:

iptables -L -v -n --line-numbers

--line-numbers 选项会为每条规则添加行号,方便以后引用特定规则。

预期输出(示例,实际输出可能有所不同):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

请注意,目前所有链的策略都是 ACCEPT,这意味着如果没有特定规则匹配到数据包,它将被允许通过。由于在这个全新的容器环境中尚未处理任何流量,数据包和字节计数器显示为 0

理解这些基本概念对于添加自定义规则至关重要,因为你需要知道数据包是如何流经系统的,以及对于未匹配流量的默认行为是什么。

封禁特定 IP 地址

现在你已经安装了 iptables,让我们开始配置防火墙,封禁来自特定 IP 地址的流量。这是一种常见的安全措施,用于防止来自特定来源的未经授权的访问或潜在威胁。

iptables 中封禁一个 IP 地址意味着创建一条规则,丢弃(Drop)来自该地址的入站数据包。当数据包被丢弃时,系统会忽略它,从而有效地停止与指定 IP 的任何通信。在本练习中,你将封禁一个假设的 IP 地址 192.168.1.100,作为在容器环境中练习的安全示例。

在 Kali Linux 容器终端中输入以下命令并按回车键,添加一条封禁所有来自 192.168.1.100 的入站流量的规则:

iptables -A INPUT -s 192.168.1.100 -j DROP

让我们解析一下这个命令:

  • iptables:管理防火墙规则的工具。
  • -A INPUT:将规则追加(Append)到 INPUT 链,该链处理入站流量。
  • -s 192.168.1.100:指定该规则要匹配的源(Source)IP 地址。
  • -j DROP:设置动作为丢弃(Drop)来自该 IP 地址的数据包。

运行此命令后不会立即产生输出,这表示规则已成功添加到 INPUT 链中。

为了确认规则已生效,运行以下命令列出当前的 iptables 规则并按回车键:

iptables -L -v -n

预期输出(示例,实际输出可能有所不同):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

此输出显示在 INPUT 链下有一条规则,丢弃来自 192.168.1.100 的所有流量。除非该 IP 尝试发送流量,否则数据包(pkts)和字节(bytes)计数器通常会显示为 0

通过完成这一步,你已经成功添加了一条封禁特定 IP 地址流量的规则。这项技能对于限制来自不受欢迎或恶意来源的访问至关重要。在下一步中,你将学习如何允许特定端口的流量,以便在保持安全的同时启用必要的服务。

允许特定端口的流量

在封禁了某个 IP 地址之后,下一项重要技能是允许特定端口的流量,以确保必要服务的访问。在这一步中,你将使用 iptables 添加一条规则,允许指定端口的入站流量。

网络服务通过端口在网络上进行通信。例如,Web 服务器通常使用 80 端口处理 HTTP 流量。允许特定端口的流量意味着创建一条规则,接受(Accept)发往该端口的入站数据包,从而确保相关服务可以被访问。在本练习中,你将以允许 80 端口的流量作为一个实际示例。

在 Kali Linux 容器终端中输入以下命令并按回车键,添加一条允许 80 端口入站 TCP 流量的规则:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

让我们解析一下这个命令:

  • iptables:管理防火墙规则的工具。
  • -A INPUT:将规则追加到处理入站流量的 INPUT 链。
  • -p tcp:指定协议为 TCP,这是 HTTP 等服务常用的协议。
  • --dport 80:指定目标(Destination)端口为 80,针对发往此端口的流量。
  • -j ACCEPT:设置动作为接受(Accept)匹配此规则的数据包。

运行此命令后不会立即产生输出,表示规则已成功添加。

为了验证规则是否生效,运行以下命令列出当前的 iptables 规则并按回车键:

iptables -L -v -n

预期输出(示例,实际输出可能有所不同):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

此输出显示在 INPUT 链下,除了之前封禁 192.168.1.100 的规则外,现在多了一条接受 80 端口 TCP 流量的规则。除非发生了匹配该规则的流量,否则计数器通常显示为 0

通过完成这一步,你已经学会了如何允许特定端口的流量。这对于在确保其他端口安全的同时,开放 Web 服务器等服务的访问权限至关重要。在下一步中,你将保存这些配置,以确保它们可以在以后被引用或重新加载。

保存 iptables 配置

在最后一步中,你将学习如何在 Kali Linux 容器中保存你的 iptables 配置。保存规则非常重要,因为默认情况下规则存储在内存中,如果容器重启,规则将会丢失。这一步确保你可以保留防火墙设置,以便将来参考或重新加载。

默认情况下,iptables 规则仅存在于系统的运行内存中。将它们保存到文件中可以让你保留配置记录,这对于文档记录或稍后使用 iptables-restore 恢复规则非常有用。在本练习中,你将把规则保存到容器内 /root 目录下的一个文件中。

在 Kali Linux 容器终端中输入以下命令并按回车键,将当前的 iptables 规则保存到 /root 目录下名为 iptables-rules 的文件中:

iptables-save > /root/iptables-rules

让我们解析一下这个命令:

  • iptables-save:将内存中当前的 iptables 规则导出到标准输出。
  • > /root/iptables-rules:将输出重定向到 /root 目录下的 iptables-rules 文件中,如果文件已存在则覆盖它。

运行此命令后不会立即产生输出,表示规则已成功保存到指定文件。

为了确认规则已正确保存,输入以下命令并按回车键查看文件内容:

cat /root/iptables-rules

预期输出(示例,实际输出可能有所不同):

## Generated by iptables-save v1.x.x on ...
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.1.100/32 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
## Completed on ...

此输出显示了保存的配置,包括封禁来自 192.168.1.100 的流量以及允许 80 端口流量的规则。该格式与 iptables-restore 兼容,如果需要,可以使用该工具重新加载这些规则。

通过完成这一步,你已经成功地将 iptables 配置保存到了文件中。在现实场景中,即使容器环境在重启后可能不会保留更改,这种做法对于持久化防火墙设置也是必不可少的。你现在已经掌握了管理基础防火墙设置的核心技能。

总结

在本实验中,你学习了在容器化环境中使用 iptables 配置 Kali Linux 防火墙的基础知识。你首先查看了当前的 iptables 规则以了解初始防火墙状态。接着,你更新了软件包列表并安装了 iptables 以准备系统。随后,你添加了封禁特定 IP 地址流量和允许指定端口流量的规则,增强了对网络访问的控制。最后,你将配置保存到文件中以便日后参考。通过这些步骤,你已经掌握了利用 iptables 进行流量过滤来管理网络安全的基础技能。