使用 iptables 配置 Kali 防火墙

LinuxBeginner
立即练习

介绍

防火墙规则只有在保留所需服务的同时建立预期访问边界,才有意义。仅在默认 ACCEPT 策略下添加允许规则,无法证明任何用户已受到限制。

本实验提供专用 Kali 服务和两个练习客户端。你将查看初始访问,在 Kali 中应用有序的基于来源的规则,保存并恢复练习策略,然后测试两条客户端路径。

限制访问前观察训练网络

本步骤中,你将测试两个预置客户端视角,并查看保护训练服务的防火墙。

本实验在虚拟机内提供小型专用网络。Kali 训练服务位于 172.30.77.10:8080;允许的客户端使用 172.30.77.20,要阻止的客户端使用 172.30.77.30。两者最初都能访问。这些是练习网络地址,不是公共目标。

从初始 Ubuntu 宿主机 Terminal 开始。预置 training-client 命令从指定名称的练习客户端发起请求。它运行在宿主机上,而防火墙管理在 Kali 内进行。选择共享工作区:

cd /home/labex/project

保存允许客户端的初始 HTTP 状态:

training-client allowed > allowed-before.txt
cat allowed-before.txt

状态行应包含 200 OK。记录另一个客户端的初始访问:

training-client blocked > blocked-before.txt
cat blocked-before.txt

它也应报告 200 OK;标签表示你之后要阻止的客户端,不是其初始状态。

现在进入 Kali 查看防火墙:

kali

Iptables 在链中评估数据包过滤规则。INPUT 处理发往当前环境的数据包,OUTPUT 处理本地产生的数据包,FORWARD 处理被路由转发的数据包。-L INPUT 列出输入链;-n 保留数字地址和端口,-v 包含计数器:

sudo iptables -L INPUT -n -v

练习链的初始策略为 ACCEPT。当没有规则已经决定数据包去向时,就会应用链策略。本实验将为专用服务添加精确规则,保持默认策略与宿主机防火墙不变。

应用并保存有序服务策略

本步骤中,你将先允许指定客户端,再拒绝来自练习网络其他来源、发往同一服务的流量。

留在 Kali 内。-A INPUT 向输入链末尾追加规则,-p tcp 匹配 TCP,-s 匹配源地址,--dport 选择目标端口,-j 选择动作。先添加精确允许规则:

sudo iptables -A INPUT -p tcp -s 172.30.77.20 --dport 8080 -j ACCEPT

接着,拒绝专用练习子网其他来源对同一端口的访问。/24 前缀标识 172.30.77.0 网络范围:

sudo iptables -A INPUT -p tcp -s 172.30.77.0/24 --dport 8080 -j REJECT

规则按顺序评估。允许的来源匹配第一条终止处理的 ACCEPT 规则;另一个练习客户端到达后面的 REJECT 规则。颠倒顺序会使允许客户端也被拒绝。其他端口和来源仍遵循未改变的默认策略。

显示规则顺序与计数器。--line-numbers 包含每条规则的位置:

sudo iptables -L INPUT -n -v --line-numbers

第一条规则应允许指定客户端访问 TCP 8080,后面的规则应拒绝该服务来自练习子网的其余流量。

iptables-save 以可恢复格式打印活动规则。将本练习配置保存到共享工作区:

sudo iptables-save > /home/labex/project/training.rules

shell 的 < 运算符将文件作为命令的标准输入。iptables-restore 读取保存的配置;这里恢复的正是刚保存的练习规则:

sudo iptables-restore < /home/labex/project/training.rules

该操作仅作用于专用 Kali 网络环境。不要为了精确的服务限制而清空宿主机防火墙或替换默认策略。

验证允许与拒绝客户端访问

本步骤中,你将从两个客户端来源测试策略,并确认训练服务仍可用。

从 Kali 返回 Ubuntu 宿主机 Terminal,以使用预置客户端视角:

exit

宿主机提示符中的用户名为 labex。记录允许客户端的新结果:

training-client allowed > /home/labex/project/allowed-after.txt
cat /home/labex/project/allowed-after.txt

它仍应报告 200 OK。

下一条命令预期会失败,显示连接被拒绝或其他连接错误:这是你有意阻止的客户端。完成预期失败后继续:

training-client blocked

只有允许路径仍正常工作时,被阻止客户端请求失败才有意义。停止 Web 服务会破坏两条路径,不能证明所需策略生效。

返回 Kali,测试后查看计数器:

kali
sudo iptables -L INPUT -n -v --line-numbers

相关规则计数器应已增加。你既检查了规则文本,也检查了实际流量行为,整个练习期间 LabEx 宿主机 Terminal 始终保持可用。

总结

你查看了链策略,为单个服务添加有序的基于来源的规则,保存并恢复练习配置,并测试两个客户端的实际访问。允许来源与服务保持可用,指定来源则被拒绝。