Go...

当前位置: 首页>>世界杯太太团

Iptables 命令完整指南

一、简介

iptables 是 Linux 系统中用于配置网络防火墙的工具,它允许用户设置、维护和检查网络流量的过滤规则。iptables 可以处理多种类型的网络流量,包括入站流量、出站流量以及通过 NAT(网络地址转换)转发的流量。本文将提供一个详细的 iptables 命令指南,涵盖其基本概念、常用命令及实际使用示例。

二、基本概念

在深入命令之前,了解以下基本概念有助于更好地理解 iptables 的工作原理:

表(Tables):iptables 中的规则被分为不同的表,每个表有不同的处理目标。常见的表包括:

filter:默认表,用于处理网络流量的过滤。

nat:用于网络地址转换,处理源地址和目标地址的转换。

mangle:用于修改数据包的某些属性,如 TOS(服务类型)字段。

raw:用于处理数据包的原始数据,通常用于调试目的。

链(Chains):每个表中包含多个链,每条链包含一组规则。常见的链包括:

INPUT:处理进入本地系统的数据包。

FORWARD:处理经过本地系统转发的数据包。

OUTPUT:处理从本地系统发出的数据包。

PREROUTING:在路由决策之前处理数据包,用于 NAT 和 Mangle 表。

POSTROUTING:在路由决策之后处理数据包,用于 NAT 和 Mangle 表。

规则(Rules):每条规则定义了如何处理匹配特定条件的数据包。规则包括匹配条件和相应的动作(如 ACCEPT、DROP、REJECT 等)。

三、常用命令

以下是 iptables 命令的详细指南,包括命令格式、常见选项和使用示例。

1. 查看现有规则

查看所有表中的规则:

sudo iptables -L -v -n

-L:列出规则。

-v:显示详细信息,包括数据包计数和字节数。

-n:以数字形式显示 IP 地址和端口号,而不是解析主机名。

查看特定表中的规则:

sudo iptables -t nat -L -v -n

-t nat:指定查看 nat 表中的规则。

2. 添加规则

在 INPUT 链中添加一条规则,允许从特定 IP 地址的 HTTP 流量:

sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT

-A INPUT:将规则追加到 INPUT 链。

-p tcp:指定协议为 TCP。

-s 192.168.1.10:源 IP 地址为 192.168.1.10。

--dport 80:目标端口为 80。

-j ACCEPT:匹配后接受流量。

在 FORWARD 链中添加一条规则,丢弃来自特定 IP 的所有流量:

sudo iptables -A FORWARD -s 10.0.0.5 -j DROP

-s 10.0.0.5:源 IP 地址为 10.0.0.5。

-j DROP:匹配后丢弃流量。

3. 删除规则

删除特定链中的一条规则,假设规则编号为 2:

sudo iptables -D INPUT 2

-D INPUT:删除 INPUT 链中的规则。

2:规则编号。

根据规则内容删除规则:

sudo iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT

与添加规则时相同的选项,但使用 -D 来删除规则。

4. 修改规则

iptables 不支持直接修改规则,只能先删除原有规则,再添加修改后的规则。先删除旧规则:

sudo iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT

然后添加修改后的规则:

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

修改端口号为 8080。

5. 保存和恢复规则

保存当前规则到文件:

sudo iptables-save > /etc/iptables/rules.v4

将规则保存到 /etc/iptables/rules.v4 文件中。

恢复规则:

sudo iptables-restore < /etc/iptables/rules.v4

从 /etc/iptables/rules.v4 文件中恢复规则。

6. 其他常用操作

清空所有规则:

sudo iptables -F

-F:清空所有链中的规则。

清空特定链中的规则:

sudo iptables -F INPUT

-F INPUT:清空 INPUT 链中的规则。

设置默认策略:

sudo iptables -P INPUT DROP

-P INPUT DROP:设置 INPUT 链的默认策略为丢弃流量。

设置默认策略为接受:

sudo iptables -P INPUT ACCEPT

-P INPUT ACCEPT:设置 INPUT 链的默认策略为接受流量。

四、示例应用

1. 设置一个基本的防火墙

允许所有流量,设置默认策略为丢弃流量:

sudo iptables -P INPUT DROP

sudo iptables -P FORWARD DROP

sudo iptables -P OUTPUT ACCEPT

允许 HTTP 和 HTTPS 流量:

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

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

2. 设置端口转发

将所有到达本地 8080 端口的流量转发到内部 IP 地址的 80 端口:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j MASQUERADE

-t nat:指定 nat 表。

-A PREROUTING:在路由之前处理流量。

-j DNAT --to-destination:目标地址转换。

五、总结

iptables 是一个功能强大且灵活的工具,用于配置和管理 Linux 系统的网络防火墙。通过掌握 iptables 的基本命令和操作,用户可以有效地控制网络流量,保护系统免受潜在的网络威胁。本文详细介绍了 iptables 的常用命令和操作方法,希望能帮助您更好地理解和使用 iptables。