Linux iptables 命令实战示例

LinuxLinuxBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 iptables 命令,这是 Linux 中一个强大的防火墙工具,用于管理和控制系统上的网络流量。你将首先了解 iptables 的基本结构和概念,包括其不同的表(tables)和内置链(chains)。然后,你将探索各种 iptables 命令来管理防火墙规则,例如列出现有规则、添加新规则以及删除现有规则。最后,你将学习如何实现更高级的 iptables 配置,以满足特定的网络需求。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills linux/sudo -.-> lab-422744{{"Linux iptables 命令实战示例"}} end

理解 iptables 的基础知识

在这一步中,你将学习 Linux 中 iptables 防火墙的基本概念。iptables 是一个强大的工具,允许你管理和控制系统上的网络流量。

首先,让我们了解 iptables 的基本结构。iptables 被组织成不同的表(tables),每个表都有自己的一组内置链(chains)。最常用的表包括:

  • filter:该表负责过滤网络数据包,决定是否允许或阻止它们。
  • nat:该表用于网络地址转换(Network Address Translation),通常用于端口转发或伪装(masquerading)。
  • mangle:该表用于特殊的数据包修改,例如设置 IP 头中的服务类型(Type of Service, ToS)字段。

每个表包含一组内置链,例如 INPUTOUTPUTFORWARD,它们对应于数据包传输过程的不同阶段。

现在,让我们探索一些基本的 iptables 命令:

## 列出现有的所有规则
sudo iptables -L

## 列出特定表(例如 filter)的规则
sudo iptables -t filter -L

## 向 INPUT 链添加一条新规则,阻止端口 80 的流量
sudo iptables -A INPUT -p tcp --dport 80 -j DROP

## 从 INPUT 链中删除一条规则
sudo iptables -D INPUT 1

## 保存当前的 iptables 配置
sudo iptables-save > ~/project/iptables-rules.txt

示例输出:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere             dport 80

在上面的示例中,我们首先列出了所有现有的 iptables 规则,然后向 INPUT 链添加了一条新规则以阻止端口 80 的流量,最后删除了新添加的规则。我们还将当前的 iptables 配置保存到一个文件中,以供将来参考。

使用 iptables 管理防火墙规则

在这一步中,你将学习如何使用 iptables 管理防火墙规则。我们将涵盖添加、删除和修改规则,以及保存当前配置。

首先,让我们列出当前的防火墙规则:

sudo iptables -L

示例输出:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere             dport 80

现在,让我们向 INPUT 链添加一条新规则,以允许 SSH 流量(端口 22):

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

要删除我们之前添加的阻止端口 80 的规则,可以使用以下命令:

sudo iptables -D INPUT -p tcp --dport 80 -j DROP

最后,让我们将当前的 iptables 配置保存到一个文件中:

sudo iptables-save > ~/project/iptables-rules.txt

这将把当前的 iptables 规则保存到 ~/project 目录下的 iptables-rules.txt 文件中。

实现高级 iptables 配置

在这最后一步中,你将学习如何实现一些高级的 iptables 配置,例如端口转发和网络地址转换(NAT)。

首先,让我们设置端口转发,将流量从一个端口重定向到另一个端口。例如,将本地机器的端口 8080 流量转发到端口 80:

## 启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1

## 添加端口转发规则
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:80

现在,任何到达系统端口 8080 的流量都将被转发到本地机器的端口 80。

接下来,让我们配置一个简单的 NAT(网络地址转换)规则,以伪装来自本地网络的出站流量:

## 为默认接口添加伪装规则
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这条规则将伪装来自本地网络的所有出站流量(假设默认接口为 eth0)到外部网络。

最后,让我们将当前的 iptables 配置保存到一个文件中:

sudo iptables-save > ~/project/iptables-advanced-rules.txt

这将把高级的 iptables 规则保存到 ~/project 目录下的 iptables-advanced-rules.txt 文件中。

总结

在本实验中,你学习了 Linux 中 iptables 防火墙的基本概念,包括其基本结构、表(tables)和内置链(chains)。你探索了各种 iptables 命令来管理防火墙规则,例如列出现有规则、添加新规则、删除规则以及保存当前配置。你还了解了如何使用 filter 表进行数据包过滤、使用 nat 表进行网络地址转换,以及使用 mangle 表进行特殊的数据包修改。通过掌握这些知识,你现在可以有效地使用 iptables 配置和管理 Linux 系统的防火墙。

Linux 命令速查表