IPTABLES学习

netfilter&iptables是什么

Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

netfilter提供了一个抽象、通用化的框架[1],作为中间件,为每种网络协议(IPv4、IPv6等)定义一套钩子函数。Ipv4定义了5个钩子函数,这些钩子函数在数据报流过协议栈的5个关键点被调用,也就是说,IPv4协议栈上定义了5个“允许垂钓点”。在每一个“垂钓点”,都可以让netfilter放置一个“鱼钩”,把经过的网络包(Packet)钓上来,与相应的规则链进行比较,并根据审查的结果,决定包的下一步命运,即是被原封不动地放回IPv4协议栈,继续向上层递交;还是经过一些修改,再放回网络;或者干脆丢弃掉。

IPTables是基于Netfilter基本架构实现的一个可扩展的数据报高级管理系统或核外配置工具,利用table、chain、rule三级来存储数据报的各种规则

IP包内核转发流程

IPTABLES学习_第1张图片
Linux源码中(/linux-master/include/linux/netfilter_ipv4.h)定义的5个hook如下:
/* IP Hooks /
/
After promisc drops, checksum checks. /
#define NF_IP_PRE_ROUTING 0
/
If the packet is destined for this box. /
#define NF_IP_LOCAL_IN 1
/
If the packet is destined for another interface. /
#define NF_IP_FORWARD 2
/
Packets coming from a local process. /
#define NF_IP_LOCAL_OUT 3
/
Packets about to hit the wire. */
#define NF_IP_POST_ROUTING 4

数据包各表、链处理流程

iptables中有3个表分别为:filter、nat、mangle,
filter表包含INPUT、FORWARD、OUTPUT三条链
mangel表包含PREROUTING、POSTROUTING、INPUT、FORWARD、OUTPUT五条链
nat表包含PREROUTING、POSTROUTING、OUTPUT三条链
数据包处理流程如下:
IPTABLES学习_第2张图片
下面分析各种情景下数据包分别经过的表及链

  1. 数据包从一个网卡转发到另一个网卡
mangle PREROUTING
NAT PREROUTING
mangle FORWARD
FILTER FORWARD
mangle POSTROUTING
NAT POSTROUTING
  1. 一个网卡收到数据包发送给本地进程
mangle PREROUTING
NAT PREROUTING
mangle INPUT
filter INPUT
  1. 数据包由本地进程发送给某个网卡
mangle OUTPUT
NAT OUTPUT
filter OUTPUT
mangle INPUT
mangle POSTROUTING
nat POSTROUTING
  1. 数据包由本地进程发送给另一个本地进程
mangle OUTPUT
NAT OUTPUT
filter OUTPUT
mangle INPUT
filter INPUT

你可能感兴趣的:(IPTABLES学习)