📚 网络安全Kali学习系列 · 模块0-1 Linux系统深度
01 Kali环境搭建与文件权限
02 SUID/SGID特殊权限与ACL
03 进程管理与服务管理
04 网络配置与防火墙基础(当前篇)
05 Shell脚本编写
06 包管理实战

网络配置与防火墙基础:ip 命令与 iptables 实战

难度:基础 | 网络安全Kali学习系列 第04篇
读完本篇你将能:用 ip 命令管理网络接口与路由,配置 DNS 解析,使用 ss 诊断端口监听状态,编写 iptables 防火墙规则拦截恶意流量,并从安全视角排查异常网络连接。
📑 本文目录
01网络接口管理:认识你的网卡
02IP地址与路由配置
03DNS解析与连通性诊断
04iptables防火墙基础
05安全视角:网络异常排查
06动手练习

01 网络接口管理:认识你的网卡

上一篇你已经掌握了用 systemd 管理服务进程。现在把视线从"主机内部"转向"主机之间"——网络是安全攻防的主战场,而一切网络操作都从认识网络接口开始。树莓派通过有线网卡(eth0)和无线网卡(wlan0)连接网络,理解接口状态是配置 IP、排查连通性、部署防火墙的前提。

查看网络接口列表

ip link show 列出系统中所有网络接口,显示接口名称、MAC地址、MTU和状态(UP/DOWN)。

Bash
ip link show
# 输出示例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether dc:a6:32:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST> mtu 1500
    link/ether dc:a6:32:xx:xx:xx brd ff:ff:ff:ff:ff:ff

输出中 lo 是本地回环接口(127.0.0.1),eth0 是有线网卡,wlan0 是无线网卡。注意 wlan0 状态没有 UP 标志,说明无线网卡当前未启用。

查看接口IP地址

ip addr show(简写 ip a)在接口信息基础上增加 IP 地址、子网掩码和广播地址。

Bash
1
2
3
4
5
6
7
8
9
10
11
12
ip addr show eth0
# 输出示例
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether dc:a6:32:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255
        scope global eth0
    inet6 fe80::dea6:32ff:fexx:xxxx/64
        scope link
# 关键字段解读
# inet 192.168.1.100/24 = IPv4地址/子网掩码位数
# scope global = 全局可用地址(非本地链路)

/24 是 CIDR 表示法,等同于子网掩码 255.255.255.0,表示前 24 位是网络号,后 8 位是主机号,该网段可容纳 254 台主机。

启用与禁用接口

需要对网卡进行维护或隔离时,可以用 ip link set 控制接口的启用状态。

Bash
# 启用无线网卡
sudo ip link set wlan0 up
# 禁用有线网卡(断开网络连接)
sudo ip link set eth0 down
操作 ip 命令(推荐) ifconfig(已废弃)
查看接口 ip link show ifconfig -a
查看IP ip addr show ifconfig
启用接口 ip link set eth0 up ifconfig eth0 up
查看路由 ip route show route -n
⚠️ 常见错误
ifconfig eth0 192.168.1.100 — Kali 新版已默认不安装 net-tools 包,直接输入 ifconfig 会报 command not found
✓ 正确:ip addr add 192.168.1.100/24 dev eth0 或安装 net-tools: sudo apt install net-tools

02 IP地址与路由配置

你已经能用 ip addr show 查看网卡上已分配的 IP。接下来学习如何手动配置 IP 地址和路由——在内网渗透中,切换 IP 网段是进入不同 VLAN 的基本操作;在防御中,理解路由表才能追踪攻击者的流量路径。

添加与删除IP地址

Bash
# 给 eth0 添加 IP 地址(临时生效,重启失效)
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除指定 IP 地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 一个网卡可以同时配多个IP(内网渗透常用)
sudo ip addr add 10.0.0.50/24 dev eth0

路由表管理

路由表决定数据包从哪个接口、经过哪个网关发出。就像邮政分拣中心根据邮编决定包裹走哪条运输线一样,内核根据路由表为目标 IP 选择转发路径。

Bash
ip route show
# 输出示例
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link
    src 192.168.1.100

第一行 default via 192.168.1.1 是默认路由:所有不匹配其他路由规则的数据包,都发给网关 192.168.1.1。第二行是直连路由:发往 192.168.1.0/24 网段的数据包直接从 eth0 接口发出,源 IP 为 192.168.1.100。

Bash
# 设置默认网关
sudo ip route add default via 192.168.1.1
# 添加静态路由(访问10.0.0.0/8走另一个网关)
sudo ip route add 10.0.0.0/8 via 192.168.1.254
# 删除路由规则
sudo ip route del 10.0.0.0/8
💡 小贴士
ip 命令的配置都是临时的,重启后失效。永久配置需修改 /etc/network/interfaces 或使用 NetworkManager(nmcli 命令)。渗透测试中临时配置反而更方便——用完即走,不留配置痕迹。

03 DNS解析与连通性诊断

IP 和路由配置好后,数据包能在网络上传输了。但你平时访问网站用的是域名而非 IP——DNS 负责把域名翻译成 IP。同时,当网络不通时,你需要一套诊断工具链来定位故障点。这一节将覆盖 DNS 配置和从 ping 到 ss 的完整诊断工具链。

DNS配置文件

Linux 通过 /etc/resolv.conf 指定 DNS 服务器,通过 /etc/hosts 设置本地静态域名映射。

Bash
# /etc/resolv.conf 内容
nameserver 8.8.8.8
nameserver 1.1.1.1
# /etc/hosts 本地域名映射(优先级高于DNS)
127.0.0.1   localhost
192.168.1.50  target.local

/etc/hosts 的解析优先级高于 DNS 查询。安全场景中,攻击者修改 hosts 文件将银行网站域名指向钓鱼服务器 IP,这就是 DNS 劫持的一种本地实现方式。用 cat /etc/hosts 检查是否有异常条目是应急响应的基本步骤。

连通性诊断工具链

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 测试网络连通性(ICMP)
ping -c 4 192.168.1.1
# 输出示例
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.421 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.385 ms
# 2. DNS查询
dig +short kali.org
# 3. 路由追踪(查看数据包经过的每一跳)
traceroute 8.8.8.8
# 4. HTTP请求测试
curl -I http://192.168.1.50

端口监听查看:ss 命令

ss(Socket Statistics)是 netstat 的现代替代品,速度更快、信息更全。查看当前主机上有哪些端口在监听、哪些连接已建立,是安全审计的核心操作。

Bash
1
2
3
4
5
6
7
8
9
10
11
12
# 查看所有TCP监听端口和对应进程
ss -tlnp
# 输出示例
State   Recv-Q Send-Q Local Addr:Port
LISTEN  0       128       0.0.0.0:22
LISTEN  0       128       0.0.0.0:80
# 参数解读:
# -t TCP -u UDP -l 监听状态
# -n 不解析域名 -p 显示进程
# -a 显示所有连接(含已建立)
💡 小贴士
安全排查时用 ss -tunap 一次性查看所有 TCP/UDP 连接(含已建立连接),配合 grep ESTABLISHED 筛选活跃连接,快速发现异常外连。

04 iptables防火墙基础

前面三节解决了"网络通不通"的问题,这一节解决"网络安不安全"的问题。iptables 是 Linux 内核 netfilter 框架的用户态工具,通过编写规则链对进出主机的数据包进行过滤。它是 Kali 上最基础的防火墙工具,也是后续学习 WAF、IDS 等安全设备的概念基础。

四表五链架构

iptables 的核心架构是"表"和"链"。数据包从进入网卡到离开主机,会依次经过不同的检查点(链),每个链属于一个功能表。

表 (Table) 功能 包含的链
filter 包过滤(最常用) INPUT / OUTPUT / FORWARD
nat 地址转换 PREROUTING / POSTROUTING / OUTPUT
mangle 修改包标记 全部五链

数据包流向:外部数据包进入主机时先经过 PREROUTING(nat),然后路由判断——目标是本机则进入 INPUT(filter),目标是其他主机则进入 FORWARD(filter);本机发出的数据包经过 OUTPUT(filter)→ POSTROUTING(nat)。安全审计中最关注的是 INPUT 链:它决定哪些外部流量可以到达本机服务。

查看防火墙规则

Bash
# 查看filter表所有规则(-n不解析域名 -v详细信息)
sudo iptables -L -nv
# 查看指定链的规则并显示行号
sudo iptables -L INPUT -n --line-numbers

编写防火墙规则

iptables 规则由匹配条件和动作(Target)组成。数据包从链的顶部往下逐条匹配,命中第一条匹配规则后执行对应动作,不再继续匹配后续规则。

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 允许已建立的连接(响应包)
sudo iptables -A INPUT -m state \
  --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH(22端口)入站
sudo iptables -A INPUT -p tcp \
  --dport 22 -j ACCEPT
# 允许loopback回环接口
sudo iptables -A INPUT -i lo -j ACCEPT
# 拒绝其他所有入站流量(放最后)
sudo iptables -A INPUT -j DROP
# 参数解读:
# -A 追加规则 -p 协议 --dport 目标端口
# -j 动作: ACCEPT接受/DROP丢弃/REJECT拒绝
⚠️ 常见错误
sudo iptables -A INPUT -j DROP — 如果在允许 SSH 规则之前先加了 DROP,当前 SSH 连接会被立即断开,远程管理直接失联
✓ 正确:先加 ACCEPT 规则(SSH、已建立连接),最后才加 DROP 默认拒绝规则。规则按顺序匹配,先到先得。

保存与恢复规则

iptables 规则存储在内存中,重启后全部丢失。用 iptables-save 导出规则到文件,iptables-restore 从文件恢复。

Bash
# 保存当前规则到文件
sudo iptables-save > /etc/iptables.rules
# 从文件恢复规则
sudo iptables-restore < /etc/iptables.rules
# 清空所有规则(调试时用)
sudo iptables -F

05 安全视角:网络异常排查

前面四节讲的是网络配置"正常用法"。安全从业者还需要从"异常排查"角度使用这些工具——当主机被入侵后,攻击者可能开设隐蔽后门端口、建立反向连接外传数据、篡改防火墙规则放行恶意流量。这一节用实战排查命令,把前面的知识串成一条完整的网络应急响应链。

排查一:异常端口监听

后门程序通常监听非标准端口等待攻击者连接。用 ss 查看所有监听端口,重点关注:非标准端口(如 4444、1337)、无进程名的端口(可能被 rootkit 隐藏)、绑定 0.0.0.0 的非必要服务。

Bash
1
2
3
4
5
6
7
8
9
10
11
# 查看所有TCP/UDP监听端口及进程
sudo ss -tulnp
# 重点排查:发现4444端口(metasploit默认)
LISTEN 0  128 0.0.0.0:4444
  users:(("meterpreter",pid=1234,fd=3))
# 进一步查看可疑进程详情
ps aux | grep 1234
# 查看进程打开的文件(定位后门路径)
sudo ls -la /proc/1234/exe

排查二:异常外连检测

反弹 Shell 和 C2(Command & Control)通信都会建立外连。用 ss 筛选 ESTABLISHED 状态的连接,检查目标 IP 是否属于已知恶意地址或非常规端口。

Bash
# 查看所有已建立的TCP连接
ss -tnp state established
# 筛选非标准端口的连接(排查C2通信)
ss -tnp | grep -v ':22\|:80\|:443'
# 实时监控新建立的连接
ss -tnp state established | watch -n 2

排查三:防火墙规则审计

攻击者获取 root 权限后可能篡改 iptables 规则,开放后门端口或放行特定 IP 的流量。定期审计防火墙规则是发现持久化后门的有效手段。

Bash
# 导出当前规则(与备份文件对比)
sudo iptables-save > /tmp/current.rules
# 与上次备份对比差异
diff /etc/iptables.rules /tmp/current.rules
# 检查是否有放行所有流量的危险规则
sudo iptables -L INPUT -n | grep 'ACCEPT all'
💡 小贴士
应急响应三步法:ss -tulnp 查端口 → ss -tnp state established 查外连 → iptables -L -n --line-numbers 查规则。三步走完,网络层面的后门基本无所遁形。
📖 知识回顾
ip link/addr CIDR子网掩码 路由表管理 DNS解析配置 ss端口监听 iptables四表五链 防火墙规则编写 异常端口排查 外连检测
✏️ 动手练习
🟢 基础验证
在树莓派上执行 ip addr show 和 ip route show,记录 eth0 的 IP 地址、子网掩码和默认网关。然后执行 ss -tlnp 列出所有监听端口,确认 SSH(22)在列。
参考:能看到 inet 行的 IP/掩码、default 行的网关 IP、22 端口 LISTEN 即通过。
🟡 组合应用
编写一组 iptables 规则实现以下安全策略:①允许已建立连接的入站流量 ②允许 lo 回环接口 ③允许 SSH(22端口)和 HTTP(80端口)入站 ④允许 ICMP ping ⑤拒绝其他所有入站流量。写完后用 iptables -L INPUT -n --line-numbers 验证规则顺序正确。
提示:规则顺序很重要——ACCEPT 规则在前,DROP 在最后。注意先用 -F 清空旧规则再添加。
🔴 开放挑战
在一台测试机上部署一个简单的 Python HTTP 服务器(python3 -m http.server 8080),然后编写 iptables 规则:只允许 192.168.1.0/24 网段访问 8080 端口,拒绝其他所有 IP。验证从不同网段访问的效果。进一步思考:如何用 iptables 限制单 IP 的连接速率(防 CC 攻击)?查阅 -m limit 模块的用法。
下篇预告
05 Shell脚本编写:Bash自动化与条件循环
将学习 Bash 变量与字符串操作、条件判断、循环结构、函数定义,并编写自动化系统信息收集脚本,把前四篇的命令串联成自动化工具链