社区
Linux_Kernel
帖子详情
linux内核转发包的数据流向
爱吃芋头
2009-11-20 10:49:01
我想跟踪一个数据包在内核转发过程中的流动方向,但是没什么思路,资料又很少,请各位大侠点化点化~~
...全文
228
5
打赏
收藏
linux内核转发包的数据流向
我想跟踪一个数据包在内核转发过程中的流动方向,但是没什么思路,资料又很少,请各位大侠点化点化~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
爱吃芋头
2010-01-12
打赏
举报
回复
谢谢大家,我在试试
tx_yinshi
2009-12-12
打赏
举报
回复
如果是做IP转发的话,数据包的具体流程是这样的:
网络设备驱动里会使用netif_rcv_skb把包送进协议栈
然后经过ip_rcv
ip_rcv_finish
ip_forward (开始转发)
ip_forward_finish
ip_finish_output
dev_queue_xmit
最后会调用设备驱动的发送函数dev->hard_start_xmit
包进入驱动的缓冲区,最后被DMA到网卡上,从链路出去
到内核里找上面这些函数去看,就明白了
Understanding Linux Network Internals 这本书讲得很清楚,现在有中文版的了
猫已经找不回了
2009-11-20
打赏
举报
回复
[Quote=引用楼主 bbjjqq 的回复:]
我想跟踪一个数据包在内核转发过程中的流动方向,但是没什么思路,资料又很少,请各位大侠点化点化~~
[/Quote]
这个只能去看内核协议栈的源码吧。
Wenxy1
2009-11-20
打赏
举报
回复
1. 用工具调试内核
2. 用prink输出日志或者保存成一个文件.
3. 用strace命令.
shixi24
2009-11-20
打赏
举报
回复
推荐一本书 Understanding Linux Network Internals
这里面很清楚。
基于
Linux
的防火墙技术研究
1 基于
Linux
的防火墙技术研究 宋文功1 唐 琎2 (1.中南大学网络中心,湖南长沙510630;2.中南大学信息科学与工程学院,湖南长沙410075) 摘 要:介绍了防火墙的基本概念及其主要功能,分析了
Linux
内核
防火墙Netfilter 的架构、构建防火墙的工作原 理及其与
内核
的交互.最后给出了Netfilter 构建防火墙的一个实例。 关键词:防火墙
Linux
Netfilter
包
过滤 中图分类号:TN393 文献标识码:A Study of the technology of firewall based on
Linux
SONG Wen-gong1 Tang Jin2 (1.Central South University, Changsha 510630,China; 2. Central South University, Changsha 410075,China) Abstract:The basic concept and most functions of firewall were introduced here.It analysed the frame of netfilter,explained how to interact between kernel.Finally,a case study of using netfilter as a firewall was given. Key words:firewall;
Linux
; Netfilter;packet filtering 因特网的个人用户和集体用户正在快速增长,因特网在全世界范围内可共享的信息也越来越丰 富,同时随之而来的是信息系统的安全性显得越来越重要。特别是近来,黑客入侵和网络病毒大爆 发时有发生,各国政府都在加强在网络安全技术方面的研究。为了有效隔离来自Internet 的外部入 侵,防火墙(firewall)技术正在普及中。除了信息加密技术外,防火墙是当前最重要的一种网络安全 技术。 防火墙实际上是一种访问控制技术,主要作用是通过限制网络或某一特定区域的通信,阻止对信 息资源的非法访问和防止保密信息从受保护网络上非法输出。它是提供信息安全服务,实现网络和 信息安全的基础设施。 1
Linux
防火墙的功能 目前市场上有许多商用防火墙软件出售,但它们大多价格高昂,使许多个人及小企业用户难以承 受。
Linux
的出现给了我们一个新的选择。它提供了一套完全免费的解决方案,其内置防火墙功能非 常强大,甚至超过了许多昂贵的商用软件。 1.1
包
过滤功能 根据数据
包
的
包
头中某些标志性的字段,对数据
包
进行过滤。当数据
包
到达防火墙时,防火墙 根据
包
头中的某些字段中的一些或全部进行判断,决定接受还是丢弃数据
包
。
包
过滤可能发生在以 下几个时刻:接收到数据
包
时,发送数据
包
时以及
转发
数据
包
时。
Linux
中过滤
包
的方法如下: (1)将
包
头和过滤规则逐一进行匹配。 (2)第一条与
包
匹配的规则将决定以下采取的行动:首先,此规则指定的策略将被应用到该
包
上。应用在一个
包
的策略
包
括以下几种:接受(Accept),即允许
包
通过该过滤器;抛弃(Reject),即丢掉该
包
并发一个“主机不可到达”的ICMP 报文回发送者;拒绝(Deny),即丢掉该
包
且不发任何返回信息。 其次,修改此规则对应的
包
和字节计数器的值;再次,一些关于
包
的信息会有选择性地被写入日志 中。有的规则中可能含有参数来定义如何改写
包
头的服务类型(TOS)字段,用于确定不同
包
的优先级。 (3)如果没有与
包
相匹配的过滤规则,则将对该
包
采取缺省的过滤规则。
Linux
的
包
过滤规则可
包
含如下一些信息: ·源地址和目的地址以及子网掩码,其中子网掩码中的0 表示可以匹配任何地址; ·
包
的类型,可以是TCP,UDP,ICMP 或“any”; ·源和目的端口号,一条规则中可以指定10 个以上的端口,也允许指定端口范围; ·ICMP 报文类型; 基金项目:国家自然科学基金资助项目(60234030) 2 ·
包
中的ACK 和SYN 标志,这是为了防止在某个特定方向上建立新的链接; ·某块网卡的名字或IP 地址,这样可以指定在特定的网卡上进出
包
; ·指定是否修改
包
头的TOS 字段; ·用一个标志来确定
包
的一些基本信息是否要被写入日志中。 1.2 代理服务功能 一个完整的防火墙解决方案不仅
包
括
包
过滤器,而且应该
包
括某种类型的应用层代理服务器。所 谓代理服务,是指在防火墙上运行某种软件(称为代理程序),如果内部网需要与外部网通信,首先 要建立与防火墙上代理程序的连接,把请求发送到代理程序;代理程序接收该请求,建立与外部网 相应主机的连接,然后把内部网的请求通过新连接发送到外部网相应主机。反之亦然。概括的说, 就是内部网和外部网的主机之间不能建立直接的连接,而是要通过代理服务进行
转发
。代理服务器 具有用户级的身份验证,完备的日志记录和帐号管理等较
包
过滤器更加安全的功能。然而,许多代理机 制需要客户端修改软件或修改用户接口,使用户意识到正在使用代理服务器。而
Linux
内核
支持透明 代理服务功能,透明代理用一种完全透明的方式,将一个经过本防火墙的连接重定向到本地代理服务 器.客户端(用户和软件)完全不知道他们的连接被一个代理进程处理,他们认为自已在直接和指定的 服务器对话。 1.3
包
伪装功能
Linux
核心提供了一个用于防火墙解决方案的附加功能:IP
包
伪装。IP
包
伪装是
Linux
中的一 种网络功能,它只能用于TCP/UDP
包
,它能使没有Internet 地址的主机通过有Internet 地址的主机访问 Internet。如果一台
Linux
服务器用IP
包
伪装功能连接到Internet 上,那私接上它的电脑即使没有获 得正式指定的IP 地址也可以接入Internet.这些电脑可以隐藏在
Linux
服务器后面存取Internet 上的信 息而不被发现,看起来就好象是服务器在使用Internet。
Linux
服务器实现代理功能的方法如下:当一 个内部主机向外发
包
时,
Linux
服务器在
转发
此 IP
包
之前,用自已IP 地址替换此
包
的源IP 地址, 并临时产生一个本机端口号来替换此
包
的 TCP/UDP 头中的源端口号;同时,
内核
会记录下 此替换.当外部的返回
包
到来时(送往防火墙主机 的临时端口),服务器能自动识别它,将此返回
包
的IP 地址和端口号替换成内部主机的地址和端 口号,发给内部主机。分组过滤方式如下图1 所示。 通过这种IP
包
伪装方式,
Linux
方便地实现 了“代理”功能。从外部看来,所有
包
的收发都 是针对此
Linux
主机的,所以具有很好的安全性。 2
Linux
数据
包
过滤系统—Netfilter/Iptables
Linux
在其2.4
内核
中内置了一个基于网络层解决方案的防火墙系统—Netfilter/Iptables,它使得 用户能够很方便地在网络边界定制对数据
包
的各种控制,如有状态或无状态的
包
过滤、各种类型的网 络地址转换、流量控制及高级的
包
处理等。Netfilter/Iptables 系统采用模块化的架构方式,其主要模块 有:通用框架Netfilter、数据
包
选择系统、连接跟踪系统及NAT系统等等。 2.1 Netfilter/Iptables 系统工作原理 Netfilter/Iptables 系统所提供的数据
包
控制能力(
包
过滤、网络地址转换、
包
处理等)都是由
内核
模块通过注册回调函数和“IP 表”来实现的。例如,iptable_filter.o 模块通过注册filter 表及3 个回调 函数(NF_IP_LOCAL_IN;NF_IP_FORWARD;NF_IP_LOCAL_OUT)来实现IPv4
包
的过滤功 能。下面以iptable_filter.o 模块的工作流程为例简单介绍一下Netfilter/Iptables 系统是如何工作的。 当数据
包
进入系统时,系统首先根据路由表决定数据
包
的流向(即将数据
包
发往那个关键点),则可能 有三种情况: 图1 分组过滤示意图 3 如果数据
包
的目的地址是其它主机或网络,则系统将该
包
发往forward 关键点。此时,回调函数NF _IP_FORWARD 根据FORWARD 链(在filter 表中)中的规则对数据
包
进行检查,如果规则匹配,则回 调函数按规则所指定的动作来处理该
包
,否则丢弃该
包
。2)如果数据
包
的目的地址是本机,则系统将数 据
包
发往input 关键点。此时,回调函数NF_IP_LOCAL_IN 根据INPUT 链(在filter 表中)中的规则 对数据
包
进行检查,如果规则匹配,则回调函数就按规则所指定的动作来处理该
包
,否则丢弃该
包
。3) 如果该数据
包
的源地址是本机,则系统将该
包
发往output 关键点。此时,回调函数NF_IP_LOCAL_ OUT 根据OUTPUT 链(在filter 表中)中的规则对数据
包
进行检查,如果规则匹配,则回调函数按规则所 指定的动作来处理该
包
,否则丢弃该
包
。 2.2 Netfilter
内核
框架 Netfilter 是
Linux
2.4.x
内核
中用于
包
处理的抽象、通用化的框架,它为每种网络协议(IPv4、IPv6 等)定义一套钩子函数(hook),其中IPv4 定义了5 个钩子函数.
内核
的模块可以对每种协议注册多个钩 子,这样当某个数据
包
通过Netfilter 框架时,Netfilter 检测是否有任何模块对该协议和钩子函数进行了 注册.若有,则将该数据
包
传给这些模块处理.Netfilter 提供了数据
包
过滤(filter 表),网络地址转换(NAT 表)及数据
包
处理(mangle 表)三种数据
包
处理能力.下面以Filter 表为例加以简单介绍. Filter 表为系统 缺省,其结构如下图.该表中
包
含了输入(INPUT)、输出(OUTPUT)和
转发
(FORWARD)3 条链.所有目标 地址指向本机的数据
包
会遍历INPUT 链,本地发出的数据
包
将遍历OUTPUT 链,而被
转发
的数据
包
将 遍历FORWARD 链。每一条链中都可设 定一条或数条规则,每一条规则都是这 样定义的“如果数据
包
头符合这样的条 件,就这样处理这个数据
包
”.当一个数据
包
到达一个链时,系统就会从第一条规 则开始检查,看是否符合该规则所定义 的条件.如果满足,系统将根据该条规则 所定义的方法处理该数据
包
;如果不满 足则继续检查下一条规则。最后,如果 该数据
包
不符合该链中任何一条规则的 话,系统就会根据该链预先定义的策略 (Policy)来处理该数据
包
。 Netfilter 提供了传递数据
包
到用户空间的Hook 函数,对数据
包
进行处理的代码不必运行在
内核
空间,大大简化了编程.Netfilter 的框架结构,可方便地插入各种模块,易于扩展。 2.3
内核
与用户的交互 防火墙除了
内核
里的机制外,还需要在应用层有相应的配置工具iptables,它是从三个默认的表 Filter、Nat、Mangle 而得名,每个表有几条链。一条链就是发生在
包
L 的一系列动作,例如Filter 表就有INPUT、FORWARD、OUTPUT 三个不同的默认链。如果
包
过滤需要检查IP
包
,则netfilter 框架在网络层截获IP
包
,这就需要与用户定义的规则做比较。而这些规则的添加修改是通过
内核
和 用户交互实现的,这就涉及一个如何与
内核
通信的问题。
内核
模块有三种办法与进程打交道:首先 是系统调用;第二种办法是通过设备文件;第三个办法便是使用proc 文件系统。netfilter 采用了第 一种修改系统调用的办法。ipables 在应用层调用setsockopt 进入
内核
,然后调用netfilter. c 又件中 nbetsockopt()实现交互,这样通过配置防火墙就可以按需要处理网络数据
包
。只有熟悉了iptables 提供的众多命令、选项等,在明白其工作原理的前提下,用户才能利用它未放心地创建大量的规则 记录和策略去控制
内核
数据
包
,才能正确有效地使用防火墙。这样即使在图形界而下使用防火墙, 通过点击你也明明白白
内核
里发生了什么。 3 防火墙配置实例 图2 filter 表结构 4 假设有一个局域网要连接到Internet 上,公共网络地址为202.101.2.25。内部网的私有地址采用C 类地址192.168.0.0~192.168.255.0 具体操作步骤如下:第一,一台
Linux
主机上安装2 块网卡ech0 和ech1,给ech0 网卡分配一个 内部网的私有地址191.168.100.0,用来与Internet 相连;给ech1 网卡分配一个公共网络地址 202.101.2.25,用来与Internet 相连;第二,
Linux
主机上设置进入、
转发
、外出和用户自定义链。本文 采用先允许所有信息可流入和流出,还允许
转发
包
,但禁止一些危险
包
,如IP 欺骗
包
、广播
包
和ICMP 服务类型攻击
包
等的设置策略。具体设置如下: (1) 清除所有规则/sbin/ipchains-Fforward/sbin/ipchain s-Finput/sbin/ipchains-Foutput (2) 设置初始规则/sbin/ipchains-Ainput-jACCEPT/sbin/ip chains-Aoutput-jACCEPT/sbin/ipchains-AforwardjACCEPT (3) 设置本地环路规则/sbin/ipchains-Ainput-jACCEPT-ilo/s bin/ipchains-Aoutput-jACCEPT-ilo (4) 禁止IP欺骗/sbin/ipchains-Ainput-jDENY-iech1-s 192.168.100.0/24/ s b in/ i p c h a i n s-A i n p u t-j D E N Y-i e c h1- d 192.168.100.0/24/sbin/ipchains-Aoutput-jDENY-iech1-s 192.168.100.0/24/sbin/ipchains-Aoutput-jDENY-iech1-d 192.168.100.0/24/ s b in/ i p c h a i n s-A i n p u t-j D E N Y-i e c h1- s 202.101.2.25/32/sbin/ipchains-Aoutput-jDENY-iech1-d 202.101.2.25/32 (5) 禁止广播
包
/sbin/ipchains-Ainput-jDENY-iech0-s 255.255.255.255/sbin/ipchains-Ainput-jDENY-iech0-d0.0..0.0/s bin/ipchains-Aoutput-jDENY-iech0-s240.0.0.0/3 (6) 设置ech0
转发
规则/sbin/ipchains-Aforword-jMASQ-ie ch0-s192.168.100.0/24 (7) 设置ech1
转发
规则/sbin/ipchains-Aforword-jACCEPTiech1- s192.168.100.0/24/sbin/ipchains-Aforword-jACCEPTiech1- d192.168.100.0/24 通过以上各步骤的配置,可以建立一个基于
Linux
操作系统的
包
过滤防火墙。它具有配置简单、 安全性高和抵御能力强等优点。 4 结束语 安全总是相对和无止境的,防火墙有其固有的局限性。人们必须时刻保持高度警惕去防止新的 攻击,动态跟踪系统的安全状况,开发新的功能和采取新的策略。本文通过分析netfilter 构建防火 墙的机制与技术,利用实例讲解了利用netfilter 框架编程实现新功能,这种分析有利于研究人员去 开发新的好的功能,用防火墙去努力保障主体的安全。 参考文献: [1] The netfilter framework in
linux
2.4[EB/OL]. http://www.gnumonks.org/ [2]
Linux
2.4 netfilter hacking HOWTO[EB/OL]. http:/ netfilter.kernelnotes.org/ [3] 徐辉,潘爱民,阳振坤.
Linux
防火墙的原理与实现[J].计算机应用,2002,(1). [4] 梁如军.RedHat7.0 安装配置与管理[M].北京:清华大学出版社,2001. [5] RobertZiegler. 余青霞,周钢译.
Linux
防火墙[M].北京:人民邮电出版社,2000.10 [6] 黄允聪,严望佳,防火墙的选型、配置、安装和维护[M].北京:清华大学出版社,1999.45~108 [7] 原箐,卿斯汉.基于安全数据结构的防火墙[J]计算机科学,2001(8):56~60 5 作者简介(Author’s brief introduction): 1、宋文功(1966-),男,汉族,硕士(Male. Master.)。中南大学网络中心,工程师。 毕业院校:北京邮电学院。 研究方向:计算机通信(Researching for computer communications)。 通信地址:长沙市韶山南路22 号中南大学网络中心 邮编:510630 2、唐琎(1966-),男,汉族,博士(Male. Doctor.)。中南大学信息科学与工程学院,副教授。 研究方向:计算机应用 (Researching for computer applications)。 毕业院校:北京大学.
网络课程设计,使用交换机
利用华为交换机S3928 或S2116完成端口镜像 实现网络
包
的捕获 利用常见的协议分析软件对常见网络通信服务中使用的协议进行分析,针对分析对象设计相关应用软件。 3.1S2116交换机做接入层交换机,S3928做汇聚层交换机; 3.2 使用一台AR 28-11做核心层路由器,设该台路由器为KR,KR通过NAT的方式将一个网段上的数据
包
转发
到另一个网段上; 3.3 S2116上与S3928上的同一VLAN可以相互通信; 3.4 设与S2116相连的计算机为C1,与KR相连的计算机为C2,并且C1和C2处于两个完全不同的网段上(如C1的网址为192.168.1.3,而C2的网址为10.0.0.3)要求C1和C2之间可以进行通信,并且数据
包
均要流经S2116、S3928、KR。 在
Linux
平台上,使用Tomcat+mysql工具,搭建一个能够显示一个动态网页的简单的网站(动态内容必须从数据库中获取)。 在
Linux
系统下使用iptables构建网络防火墙。配置
包
括: •
内核
中开启IP
转发
功能; •分析数据过滤需以及
数据流
向; •根据分析结果设定iptables规则。
C语言嵌入式
Linux
编程第7期:
Linux
内核
常用的数据结构与面向对象思想
学习嵌入式一段时间了,开始学习
Linux
... 本期课程主要侧重于数据结构基本功的学习和
Linux
内核
中的面向对象思想。掌握了这两项技能,再去分析
Linux
内核
中复杂的子系统和驱动代码,相信你会跟以前有不一样的体验和收获。
Linux
系统数据
包
转发
出于安全考虑,
Linux
系统默认是禁止数据
包
转发
的。所谓
转发
即当主机拥有多于一块的网卡时,其中一块收到数据
包
,根据数据
包
的目的ip地址将
包
发往本机另一网卡,该网卡根据路由表继续发送数据
包
。这通常就是路由器所要实现的功能。 配置
Linux
系统的ip
转发
功能,首先保证硬件连通,然后打开系统的
转发
功能 less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示
深入理解
Linux
网络——
内核
是如何接收到网络
包
的
数据到来后的处理: 1. 数据进入网卡Rx FIFO,通过DMA写入内存的RingBuffer,向CPU发起硬中断 2. CPU响应硬中断,调用网卡启动时注册的中断处理函数 3. 中断处理函数中将驱动传来的poll_list添加到CPU对应的softnet_data的poll_list,发起软中断 4.
内核
线程ksoftirqd发现软中断请求,关闭硬中断 5. ksoftirqd线程根据软中断类型选择处理函数,调用驱动的poll函数收
包
6. poll函数摘下RIngBuffer上的skb,发到协议栈
Linux_Kernel
4,441
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章