iptables 包过滤和NAT

简介

iptables [-t table] {-A|-C|-D} chain rule-specification

ip6tables [-t table] {-A|-C|-D} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

rule-specification = [matches…] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]

描述

Iptables 和 ip6tables 用于在Linux内核中设置、维护和检查IPv4和IPv6包过滤规则表,可以定义几个不同规则表,每个表包含许多内置 chain(链),还可能包含用户定义 chain(链)

  • 每个chain(链)是一个规则列表,可以匹配一组包。
  • 每个规则指定如何处理匹配的包。这种动作称为 “target(目标)”。

TARGETS(目标)

防火墙规则为包和TARGETS(目标)指定标准。

  • 如果包不匹配,将检查 chain 中的下一个规则
  • 如果匹配,则下一条规则由target(目标)的值指定,该值可以是用户定义chain(链)的名称、iptables-extensions(8) 中描述的目标之一,或是其中一个特殊值:ACCEPT(接受)、RETURN(拒绝)、或者 DROP(丢弃)
    • ACCEPT :表示让包通过
    • RETURN :表示拒绝包
    • DROP :表示丢弃包

TABLES(表)

 注意:目前 iptables 有五个独立的 tables(表),和五条 chain(链)iptables 有五条控制Chain(链),分别为 (INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING),且前三条 Chain (链)的默认动作为:ACCEPT。如果需要更改 (INPUT、FORWARD、OUTPUT) 这三条链的默认动作请使用:iptables -t[tables] -P [INPUT|FORWARD|OUTPUT] [ACCEPT|DROP]

表名称 说明
filter 这是默认的表(如果不使用-t选项)。它包含内置的 INPUT、FORWARD、OUTPUT
nat 在2.4.17内核之前,它有两个内置链: PREROUTING(在数据包进来时改变) 、OUTPUT(在路由出去前更改本地生成的数据包) 或者 POSTROUTING(即将出去时更改数据包)
mangle 在2.4.17内核之前,它有两个内置链: PREROUTING(在路由前更改进来的数据包) 和 OUTPUT(在路由出去前更改本地生成的数据包)、
从内核2.4.18开始,还支持其他三个内置链 INPUT(进入本身的数据包)、FORWARD(更改正在通过该路由的包)、POSTROUTING(即将外出时更改数据包).
raw 此表主要用于与 NOTRACK 目标组合配置连接跟踪豁免权。提供了以下内置链: PREROUTING(通过任何网络接口到达的数据包)、 OUTPUT(用于由本地进程生成的包)
security 此表用于强制访问控制(MAC)网络规则,例如 SECMARK 和 CONNSECMARK 目标启用的那些规则。
强制访问控制由Linux安全模块(如SELinux)实现。安全表在过滤表之后调用,允许过滤表中的任意访问控制(DAC)规则在MAC规则之前生效。
此表提供以下内置链:INPUT(用于进入本身的数据包)、 OUTPUT(用于在路由之前更改本地生成的包) 和 FORWARD(用于更改正在通过该路由的包)

OPTIONS

iptables和ip6tables所识别的选项可以分为几个不同的组。

COMMANDS(命令组)

PARAMETERS(参数)

下面的参数构成了规则规范(在allZ(添加)、delete(删除)、insert(插入)、replace(替换) 和 append(追加) 命令中使用)。

iptables-extensions(指令)

连接状态 -m state –state=

状态 说明
INVALID 未知的或者、不安全的、无效的状态,建议将 INVALID 状态拒绝掉
NEW 信息包已经启动了一个新的连接(TCP 的第一次握手)
ESTABLISHED 包与一个在两个方向都看到包的连接相关联(TCP 的第二次握手)
REALTED 报文跟踪,根据接收的报文需要,开放一个报文中指定的随机端口,比如FTP服务
UNTRACKED 包根本没有被跟踪,如果您在原始表中使用-j CT -notrack显式地取消跟踪,就会发生这种情况。
SNAT 虚拟状态,如果原始源地址与应答目的地不同,则匹配该状态。
DNAT 是一个虚拟状态,如果原始目标与应答源不同,则匹配。
EXPECTED 这是一个预期的连接(例如,一个conntrack助手设置它)。
SEEN_REPLY Conntrack 在两个方向都看到过信息包。
ASSURED Conntrack的入口不应该提前过期。
CONFIRMED 连接确认:发起包已离开

MATCH AND TARGET EXTENSIONS(匹配和目标扩展)

ptables可以使用扩展包匹配和目标模块。iptables-extensions(8) 手册中提供了这些内容的列表。

SEE ALSO

  • iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8),

实例

  • -L 列出规则表

  • -t 指定规则表,如果没有指定则使用默认的表:filter

  • –line-numbers 列出规则的序列号

  • -I 在指定的序号号之前插入规则

  • -D 删除指定的序列号规则表

  • -A 在规则末尾,添加一条规则

  • 示例配置

  • 禁止内网中的源 MAC地址 访问本机

  • 示例配置

  • 安装服务

发表评论