iptables 源码分析 - 内核源码-Chinaunix
【iptables交流贴】iptables执行的流程分析 - 内核源码-Chinaunix
iptables 命令
规则 rules
用于定义 IP 数据包的识别和处理规则,每条 Rule 都包含了 “匹配" 和 “动作" 这 2 个元素。其中,动作包括有:修改或跳转。跳转可以用于处理接受该数据包、拒绝该数据包,也可以跳转到其他 Chain 中继续进行匹配,或者从当前 Chain 中返回到调用者 Chain。
每条 Rule 都由下列 2 个元素组成:
- 若干个匹配条件(Xmatch):与 IP 数据包进行匹配,具有以下匹配条件类型:
- **Interface(接口,**e.g. eth0、eth1)
- Protocol(协议类型,e.g. ICMP、TCP、UDP)
- Source IP / Destination IP
- Source Port / Destination Port
- 一个执行动作(Action):数据包匹配所有条件后所需要执行的动作。具有以下动作类型:
- ACCEPT:运行通过。
- DROP:直接丢弃。
- REJECT:拒绝通过。
- SNAT:源地址转换。
- DNAT:目标地址转换。
- LOG:记录日志信息。
- QUEUE:将数据包移交到用户空间。
- RETURN:防火墙停止执行当前链中的后续规则,并返回到调用链。
- REDIRECT:端口重定向。
- iptablMARK:做防火墙标记。
链 chains
链(Chains)的本质是一个有序的 Rules 列表。在复杂的网络环境中,用户可以通过配置 Rules 在 Chain 中的顺序来灵活实现多种效果。
也因为 Chain 中 Rules 的次序非常关键,执行 Rules 时,会按照从上往下的顺序进行。所以越严格的 Rule,就越应该放在越靠前,而 Default Rule 则总是在最后生效。
此外,Netfilter 提供了 5 条内建的 Chains,用户也可以新建自定义的 Chains。
- INPUT:发往本机的数据包通过此链,并执行此链上关于 INPUT 的 Rules,例如:DDoS 攻击防御规则。
- OUTPUT:从本机发出的数据包通过此链,并执行此链上关于 OUTPUT 的 Rules。
- PORWARD:由本机转发的数据包通过此链,并执行此链上关于 PORWARD 的 Rules。例如:作为 IP 路由器。
- PREROUTING:在处理 IP 路由规则前(Pre-Routing)通过此链,并执行此链上关于 Pre-Routing 的 Rules。例如:DNAT。
- POSTOUTING:在处理 IP 路由规则后(Post-Routing)通过此链,并执行此链上关于 Post-Routing 的 Rules。例如:SNAT。
表 tables
表(Table)是面向应用场景的管理方式,每张表被赋予了不同的应用场景,所以也内含了不同的 Chains 和 Rules。
用户在实际使用 Netfilter 时,往往是通过 Table 作为操作入口,然后对 Chains 和 Rules 进行定义。
Netfilter 内建了以下五张表:
- filter 表(默认):提供数据包的过滤功能,例如:用于防火墙规则。
- nat 表:提供了 NAT、NAPT 功能,例如:用于网关路由器。
- mangle 表:提供了数据包修改功能,例如:更改 IP Header 的 TOS、DSCP、ECN 位。
- raw 表:用来提前标记报文不需要执行一些流程,例如:不需要建立会话。
Usage: iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append -A chain Append to chain
--check -C chain
发布评论