Linux内核转发技术

本文介绍了Linux内核中的iptables内核模块,用于封包过滤和防火墙功能。iptables通过规则、链路和表管理IP包过滤,包括filter、nat、mangle、raw和security五张表。文中通过实例展示了iptables作为防火墙、路由器和透明代理的具体应用,帮助读者理解其在Linux系统中的实际操作。

前言

在linux内核中,通常集成了带有封包过滤和防火墙功能的内核模块, 不同内核版本的模块名称不同,
在2.4.x版本及其以后的内核中, 其名称为iptables, 已取代了早期的ipchains和远古时期的ipfwadm.
在命令行中可以通过lsmod | grep -i iptable来查看当前加载的相关模块信息.

iptables作为内核模块, 由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集.
与此同时, iptables也作为用户空间(userspace)的一个管理工具而存在,使得我们使插入,
修改和除去信息包过滤表中的规则变得非常容易,不需要每次修改规则后都重新编译内核.
本文主要讨论的也正是iptables在用户空间的功能.

基本概念

linux内核的转发机制主要通过查表(tables)来完成, 而iptables则用来设置,管理和检查linux内核中ip包过滤规则表.
table后面加了s说明可以定义多张表, 而每张表中又包含了若干链路(chains), 链路表示一系列应用于匹配ip包的规则(rules).
下面就对这"三座大山"分别加以解释. 为了使概念明了, 我们自底向上说明:

规则(rules)

规则又称为rule-specification, 其主要作用是匹配特定的ip封包, 并作出相应的动作, 其格式为:

rule-specification = [matches...] [target]

其中,

match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

matchname表示匹配的格式的名称, targetname表示所执行的动作的名称. iptables定义了一系列内置的格式和动作,
如target为accept表示接受, masquerade表示执行类似路由器的动作(用于nat)等, 具体可以通过man iptables-extensions查看.

链路(chains)

所谓链路, 顾名思义就是表示ip数据包传输的路径, 一个封包的源和目的不同, 其走的路径即有可能不同,
就像路途中的朋友们, 在任何一个节点都有可能分道扬镳.这些节点有:

  • pre_routing : 外部数据刚刚进入时.
  • post_routing : 外部数据准备离开时.
  • input : 数据包的目的地址为本地socket.
  • output : 数据包由本地生成.
  • forward : 数据包被本机转发.

事实上, 链路在内核中以钩子的形式存在, 在每个结点给用户预留了回调函数来处理封包(即用前面提到的规则).
ip封包从外部进入后,所经过的链路如下图所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值