概述
iptables 通过定义传入和传出网络数据包的规则来实现系统的安全策略。每条规则都为匹配特定条件的数据包指定一个目标(target),如 ACCEPT(接受)、DROP(丢弃)或 REJECT(拒绝)。通常使用 INPUT、OUTPUT 和 FORWARD 链,并利用 PREROUTING 和 POSTROUTING 链实现 NAT 功能。
主要功能
- 数据包过滤(防火墙)
- 网络地址转换(NAT)
- 端口转发和重定向
- 基于特定 IP 地址、端口、协议的流量控制
主要选项
iptables 命令与各种选项一起使用,用于添加、删除、修改特定规则或查看当前规则。
规则管理
匹配条件
目标(动作)
生成的命令:
请尝试组合命令。
描述:
`iptables` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用示例
使用 iptables 配置常见防火墙规则的示例。建议在添加规则之前备份当前规则。
查看所有当前规则
sudo iptables -L -v -n
查看规则,显示详细信息和 IP 地址的数字表示。
允许 SSH(端口 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许来自外部的 SSH 连接。
阻止特定 IP 地址
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
阻止来自特定 IP 地址(例如 192.168.1.100)的所有入站流量。
允许所有出站流量
sudo iptables -P OUTPUT ACCEPT
将 OUTPUT 链的默认策略设置为允许所有出站流量。
Web 服务器端口转发(80 -> 8080)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
将入站的 80 端口请求重定向到本地的 8080 端口(使用 NAT 表)。
内部网络伪装(NAT)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
当内部网络流量通过外部接口(例如 eth0)外出时,更改源 IP 地址(使用 NAT 表)。
安装
大多数 Linux 发行版都预装了 iptables。如果未安装,您可以使用以下命令进行安装。
Debian/Ubuntu
sudo apt update
sudo apt install iptables
CentOS/RHEL/Fedora
sudo dnf install iptables
提示与注意事项
iptables 规则在系统重启后可能会丢失,因此了解如何永久保存规则非常重要。此外,在设置规则时,请注意顺序和默认策略。
永久保存规则
iptables 规则默认是易失的,因此需要保存它们以在重启后保持不变。不同发行版有不同的推荐方法。
- **Debian/Ubuntu**: 安装 `sudo apt install iptables-persistent` 后,使用 `sudo netfilter-persistent save` 命令保存规则。规则将保存在 `/etc/iptables/rules.v4` 和 `/etc/iptables/rules.v6`。
- **CentOS/RHEL/Fedora**: 安装 `sudo dnf install iptables-services` 后,使用 `sudo systemctl enable iptables && sudo systemctl start iptables` 命令启用服务,并使用 `sudo iptables-save > /etc/sysconfig/iptables` 命令保存规则。
- **通用方法**: 使用 `sudo iptables-save > /path/to/rules.v4` 将规则保存到文件,然后编写一个脚本在启动时使用 `sudo iptables-restore < /path/to/rules.v4` 命令加载该文件。
规则顺序的重要性
iptables 规则在链中按从上到下的顺序应用。当数据包匹配特定规则时,将执行该规则的目标,并且不再检查后续规则。因此,将更具体的规则(例如阻止特定 IP)放在更通用的规则(例如允许所有 HTTP)之上非常重要。
设置默认策略时的注意事项
设置链的默认策略(例如 `iptables -P INPUT DROP`)时必须非常谨慎。在将默认策略更改为 DROP 之前,应先添加允许 SSH 连接等必需服务的规则。否则,所有到系统的网络连接都将被阻止,导致无法访问。
迁移到 nftables
在最新的 Linux 发行版中,许多发行版使用 `nftables` 作为默认防火墙框架,而不是 iptables。`nftables` 集成了 iptables 的功能并提供了改进的语法。`iptables` 命令可能在内部使用 `nftables` 的兼容层运行,因此最好检查系统的默认防火墙工具。