Linux-中的-iptables

Arch wiki 上的文档

YouTube 讲解

Intro

iptables 命令用于配置 Linux 内核 的 firewall.

iptables 用于 IPv4, 而 ip6tables 用于 IPv6. 两者的语法相同.

有一些 iptables 的前端命令可使用, 如:

  • Arno's firewall
  • ferm
    等.

同样也有 GUI 封装版本.

基本概念

iptables 中有一个 chains 的概念: 其为规则的集合, 也就是说, 一个 chain 包含多条规则.

其被称为 chain 的原因: 流量会按照这些规则在 chain 中的顺序被处理.

table 则是由 chains 组成的.

rule 则用于处理网络包的规则, 每一个 rule 都有一个匹配 (match) 和与之对应的行为 (target).

一个基本的原理图为:

(这里没有包含 raw, mangle, security 这些 tables 的处理过程)

Tables

iptables 一共有 5 个 tables:

  • raw
  • filter
  • nat
  • mangle
  • security

大多数情况下只用得到 natfilter.

Chains

filter 表有 3 种内置的 chians:

  • INPUT
  • OUTPUT
  • FORWORD

nat 表也包含 3 种内置的 chains:

  • PREROUTING
  • POSTROUTING
  • OUTPUT

默认情况下, 这些 chains 都不会有任何规则.

也可以自定义 chains.

Rules

一个 rule 分为两个部分:

  • matches, 数据包想要通过需要满足的条件
  • target, 数据包通过后的行为

内置的 target 有:

  • ACCEPT
  • DROP
  • QUEUE
  • RETURN

target 也可以是用户自定义的 chains.

配置和使用

iptables 的规则保存在:

  • /etc/iptables/iptables.rules
  • /etc/iptables/ip6tables.rules

文件中.

可通过:

1
systemctl enable iptables.service

来启动.

若在命令行添加了 rules, 还需要运行以下命令来添加到文件中:

1
iptables-save -f /etc/iptables/iptables.rules

reload 配置可以:

1
iptables-restore /etc/iptables/iptables.rules

命令行操作

默认是对 filter 表操作.

列出 rules 信息:

1
iptables -nvL

-n--numeric 的缩写.

-v--verbose 的缩写.

-L--list 的缩写.

可以用 -t 指定 table.

Resetting rules

-F, --flush

-X, --delete-chain


Linux-中的-iptables
http://example.com/2023/10/09/Linux-中的-iptables/
作者
Jie
发布于
2023年10月9日
许可协议