Kali Linux iptables 防火墙配置

Kali LinuxKali LinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将学习如何使用 iptables 在 Kali Linux 上配置防火墙,iptables 是一个用于管理 Linux 内核中 IP 数据包过滤规则的强大工具。主要目标是理解并应用防火墙规则,通过基于 IP 地址、端口和协议控制流量来提高网络安全性。通过逐步的实践活动,你将查看当前的 iptables 规则,阻止特定的 IP 地址,允许指定端口上的流量,并保存你的配置。在 LabEx VM 环境中预先配置好的 Kali Linux 容器内工作,你将获得管理防火墙设置以保护网络流量的实践技能。

查看当前的 iptables 规则

在第一步中,你将学习如何在 Kali Linux 容器内使用 iptables 查看当前的防火墙规则。在进行任何更改之前,这是理解现有防火墙配置的基本起点。

当你在 LabEx VM 环境中打开终端时,你将自动连接到 Kali Linux 容器的 shell。无需手动启动容器或进入 shell;环境已经为你设置好了。让我们从探索防火墙规则的当前状态开始。

iptables 是一个命令行实用程序,允许你管理 Linux 内核的 IP 数据包过滤规则。这些规则决定了如何处理网络流量——是接受、丢弃还是重定向数据包,这取决于特定的标准,例如源 IP 或端口号。查看规则可以帮助你了解当前正在实施的策略。

在终端中运行以下命令以列出当前的 iptables 规则。键入命令并按 Enter 键:

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 已安装并在你的 Kali Linux 容器中可以使用。在这一步中,你将更新软件包列表,并在尚未安装的情况下安装 iptables。这是确保所有后续命令正确运行的必要准备。

Kali Linux 使用 apt 包管理器来处理软件安装和更新。更新软件包列表可确保你拥有来自已配置存储库的关于可用软件包的最新信息。安装 iptables 将提供有效管理防火墙规则所需的工具。

让我们从更新软件包列表开始。在 Kali Linux 容器终端中键入以下命令,然后按 Enter 键:

apt update

此命令从存储库中获取最新的软件包信息。它可能需要几秒钟才能完成,你将看到指示更新过程进度的输出。

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

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
All packages are up to date.

更新完成后,你可以安装 iptables。键入以下命令并按 Enter 键:

apt install -y iptables

-y 标志会自动确认安装,而无需提示用户输入。如果系统上尚未安装 iptables,此命令将安装它。如果它已经安装,该命令将简单地确认这一事实。

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

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.8.7-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

此输出指示 iptables 是新安装的还是已经存在。现在 iptables 已经准备就绪,你已经为配置防火墙规则准备好了你的环境。在下一步中,你将开始添加特定的规则来控制网络流量,并在此设置的基础上进行构建。

阻止特定的 IP 地址

现在你已经安装了 iptables,让我们通过阻止来自特定 IP 地址的流量来配置你的防火墙。这是一种常见的安全措施,用于防止来自特定来源的不必要的访问或潜在威胁。

使用 iptables 阻止 IP 地址意味着创建一条规则来丢弃来自该地址的传入数据包。当数据包被丢弃时,系统会忽略它,从而有效地阻止来自指定 IP 的任何通信。对于此练习,你将阻止来自假设 IP 地址 192.168.1.100 的流量,这是一个在容器环境中练习的安全示例。

在 Kali Linux 容器终端中键入以下命令,然后按 Enter 键,以添加一条规则,阻止来自 192.168.1.100 的所有传入流量:

iptables -A INPUT -s 192.168.1.100 -j DROP

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

  • iptables:用于管理防火墙规则的工具。
  • -A INPUT:将规则附加到 INPUT 链,该链处理传入流量。
  • -s 192.168.1.100:指定要与此规则匹配的源 IP 地址。
  • -j DROP:将操作设置为丢弃来自指定 IP 地址的数据包。

运行此命令后,不会立即有输出,这表明该规则已成功添加到 INPUT 链。

要确认该规则已到位,请运行以下命令以列出当前的 iptables 规则,然后按 Enter 键:

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 流量。允许在特定端口上的流量意味着创建一条规则来接受发往该端口的传入数据包,确保可以访问相关的服务。对于此练习,你将允许在端口 80 上的流量,作为一个实际的例子。

在 Kali Linux 容器终端中键入以下命令,然后按 Enter 键,以添加一条规则,该规则接受在端口 80 上的传入 TCP 流量:

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

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

  • iptables:用于管理防火墙规则的工具。
  • -A INPUT:将规则附加到 INPUT 链,用于传入流量。
  • -p tcp:将协议指定为 TCP,通常用于 HTTP 等服务。
  • --dport 80:将目标端口指定为 80,针对此端口的流量。
  • -j ACCEPT:将操作设置为接受与此规则匹配的数据包。

运行此命令后,不会立即有输出,这表明该规则已成功添加。

要验证该规则是否已到位,请运行以下命令以列出当前的 iptables 规则,然后按 Enter 键:

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 链下的规则,用于接受端口 80 上的 TCP 流量,以及之前的规则,用于丢弃来自 192.168.1.100 的流量。除非发生了与此规则匹配的流量,否则计数器很可能显示为 0

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

保存 iptables 配置

在最后一步中,你将学习如何在 Kali Linux 容器内保存你的 iptables 配置。保存规则很重要,因为它们默认存储在内存中,如果容器重新启动,它们将会丢失。此步骤确保你可以保留你的防火墙设置,以供将来参考或重新加载。

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

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

iptables-save > /root/iptables-rules

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

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

运行此命令后,不会立即有输出,这表明规则已成功保存到指定的文件中。

要确认规则已正确保存,请通过键入以下命令并按 Enter 键来查看文件的内容:

cat /root/iptables-rules

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

## Generated by iptables-save v1.8.7 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 管理基本防火墙设置的核心技能。

总结

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