一文读懂iptables/netfilter附带实战

Image not found

网站链接: https://www.geekgame.site/images/path/file.jpg

链接到文件: /static//images/path/file.jpg

使用 Page Bundles: false

简介

iptables 是一个命令行工具,用来配置包过滤的规则的,而真正实现这些规则的程序位于内核层,叫做 netfilter, 可以讲iptables理解为netfilter的客户端,iptables 与 netfilter 共同组成了包过滤软件。 平常工作交流中 iptables 也经常代指该内核级防火墙,iptables 用于 ipv4, 相应的 ip6tables 用于 IPv6。

概念介绍

iptables转发过程

图片引用

hook

iptables 在内核是对数据包做修改、转发、丢弃等操作的,而这些操作都是在一个个 hook 上完成的,hook 就是注册数据包处理函数的地方。hook点都是预定义好的,一共划分了五个hook点,分别为:

  • NF_IP_PRE_ROUTING: 接收到的包进入协议栈后由该hook上注册的函数来处理,这是在查询路由之前;
  • NF_IP_LOCAL_IN: 查询路由后判断数据包是发往本机的,则首先进入该hook点,由该hook点上注册的函数来处理;
  • NF_IP_FORWARD: 查询路由后判断数据包是不是本机的,则进入该hook点,由该hook点上注册的函数来处理;
  • NF_IP_LOCAL_OUT: 本机发出的数据包首先进入该hook点,由该hook点上注册的函数来处理;
  • NF_IP_POST_ROUTING: 数据包在发出本机之前,路由判断之后, 进入该hook点,由该hook点上注册的函数来处理;

表、链、规则

iptables 是由表(table)来组织的,而表又是由链(chain) 组成,链中包含了一个或者多个规则(rule),规则既是对数据包处理的具体定义,所以总体来看 iptables -> table -> chain -> rule。

iptables 一共有五个table,分别为:

  • raw 用于配置数据包,提供一个让数据包不被系统跟踪的机制;
  • filter 判断是否允许一个包通过;
  • nat 用于 网络地址转换(例如:端口转发);
  • mangle 修改包的 IP 头,例如TTL,增加或减少包可以经过的跳数;
  • security 用于 强制访问控制 网络规则;

链中包含了具体的规则,按照顺序进行匹配,内置了五个chain 与 hook 一一对应:

  • PREROUTING: 位于 NF_IP_PRE_ROUTING hook;
  • INPUT: 位于 NF_IP_LOCAL_IN hook ;
  • FORWARD: 位于 NF_IP_FORWARD hook ;
  • OUTPUT: 位于 NF_IP_LOCAL_OUT hook;
  • POSTROUTING: 位于 NF_IP_POST_ROUTING hook;

基本操作

添加规则

删除规则

全景图

netfilter 全景图

参考

iptables
iptables (简体中文)
A Deep Dive into Iptables and Netfilter Architecture
How to trace packets as they pass through the firewall