使用 iptables 配置 Kali 防火墙

Kali LinuxBeginner
立即练习

介绍

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

安装并查看 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 进行流量过滤来管理网络安全的基础技能。