Iptables 命令完整指南

简介: 【8月更文挑战第20天】

一、简介

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

二、基本概念

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

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

    • filter:默认表,用于处理网络流量的过滤。
    • nat:用于网络地址转换,处理源地址和目标地址的转换。
    • mangle:用于修改数据包的某些属性,如 TOS(服务类型)字段。
    • raw:用于处理数据包的原始数据,通常用于调试目的。
  2. 链(Chains):每个表中包含多个链,每条链包含一组规则。常见的链包括:

    • INPUT:处理进入本地系统的数据包。
    • FORWARD:处理经过本地系统转发的数据包。
    • OUTPUT:处理从本地系统发出的数据包。
    • PREROUTING:在路由决策之前处理数据包,用于 NAT 和 Mangle 表。
    • POSTROUTING:在路由决策之后处理数据包,用于 NAT 和 Mangle 表。
  3. 规则(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

目录
相关文章
|
网络协议 算法 Linux
iptables 常用命令
使用 -t 选项指定了要操作的表,此处指定了操作 filter 表,与之前的查看命令一样,不使用-t 选项指定表时,默认为操作 filter 表。 使用-I 选项,指明将”规则”插入至哪个链中,-I 表示 insert,即插入的意思,所以-I INPUT 表示将规则插入于 INPUT 链中,即添加规则之意。 使用-s 选项,指明”匹配条件”中的”源地址”,即如果报文的源地址属于-s 对应的地址,那么报文则满足匹配条件,-s 为 source 之意,表示源地址。
|
网络协议 安全 开发者
iptables 命令使用 | 学习笔记
快速学习iptables 命令使用
iptables 命令使用 | 学习笔记
|
网络协议
Iptables配置
查看iptables加载的模块 lsmod | egrep "nat|filter" iptable_filter 12810 0 ip_tables 27240 1 i...
853 0