netfilter
TCH_world
记录职业生涯的点滴
展开
-
netfilter之nat代码分析
nat主要在PRE_ROUTING、OUTING、LOCAL_IN、POST_ROUTING四个链上注册了hook函数,PRE_ROUTING、OUTING这个两个链上做DNAT,LOCAL_IN和POST_ROUTING链上做SNAT。nat表没有LOCAL_IN链,但在LOCAL_IN上注册了钩子函数nf_nat_fn,主要作用是修改数据包的源端口。static struct nf_ho...原创 2018-12-12 23:53:52 · 1314 阅读 · 0 评论 -
netfilter之链接跟踪做nat
上一节我们将了NAT是基于链接跟踪实现的,当一条链接跟踪建立要改变它的tuple的reply方向才能做nat,这个链接跟踪的nat是函数nf_nat_setup_info实现1、nf_nat_setup_infonf_nat_setup_info对链接跟踪的做NAT,只会改变链接跟踪reply方向的ip、端口,不会改变数据包的ip、端口,数据包的DAT在上一节已经介绍了是在PRE_ROUT...原创 2018-12-14 00:01:02 · 1211 阅读 · 0 评论 -
netfilter连接跟踪主要数据结构
linux协议栈中netfiler框架对数据包做过滤处理基本上都是基于连接跟踪来做的,比如snat、dnat等,连接跟踪就是记录数据流在协议栈中的两个方向,不同的协议有不同的特征,tcp/udp就是五元组(源ip、目的Ip、源端口、目的端口、协议号),icmp协议就是ip、id、type、code。1、struct nf_connstruct nf_conn结构体是连接跟踪的抽象结构,其中...原创 2018-12-09 16:19:22 · 1187 阅读 · 0 评论 -
netfilter连接跟踪初始化
连接跟踪的初始化主要有三个地方(1)连接跟踪本身初始化。(3)在对应的Hook上注册连接跟踪的处理函数。(4)初始化连接跟踪和三层协议、四层协议相关的函数。1、连接跟踪本身初始化连接跟踪本身初始化函数是nf_conntrack_net_init主要做两件事情:为连接跟踪分配slab缓冲、初始化后proc文件系统1.1、nf_conntrack_net_initnf_co...原创 2018-12-09 17:18:21 · 535 阅读 · 0 评论 -
netfilter链接跟踪实现之nf_conntrack_in函数
1、数据包方向要分析连接链接跟踪的实现我们就要先分析数据包在协议栈中的方向,总的来说主要分为三个方向:本机转发的数据包、本机接受的数据包、本机产生的数据包,我们之前分析了连接跟踪只在四个链上注册了钩子函数,分别是PRE_ROUTING链、OUT链、LOCAL_IN链、POST_ROUTING链。PRE_ROUTING链上注册的是ipv4_conntrack_in,OUT链上注册的是ipv4_c...原创 2018-12-10 00:02:52 · 3218 阅读 · 0 评论 -
netfilter链接跟踪实现之ipv4_confirm函数
ipv4_confirm函数注册在LOCAL_IN链、POST_ROUTING链,这个是netfiler的两个出口,从函数名字看得出函数的功能是链接跟踪确认,下面来分析这个函数。static struct nf_hook_ops ipv4_conntrack_ops[] __read_mostly = {... { /*数据包最后出去在POSTROUTING链上连接跟踪确认*/ ...原创 2018-12-11 20:51:11 · 1339 阅读 · 0 评论 -
netfilter之nat初始化
nat功能是我们使用非常广泛,包括SNAT、DNAT,很多功能是基于NAT实现。(1)SNATSNAT简称源地址转换,比如一个公司只有一个共有IP,公司下面有许多私有设备,私有设备都分配了私有地址,私有地址不能在互联网中传递,那么就要做源地址转换,私有设备要访问互联网就会把源地址转换为公司的共有IP,通过这个共有IP访问互联网。(2)DNATDNAT简称目的地址转换,也就是把目的地...原创 2018-12-11 22:32:14 · 661 阅读 · 0 评论