- 博客(11)
- 资源 (4)
- 收藏
- 关注
原创 基于Linux路由的访问控制
声明关于访问控制,人民已经讨论了很多的方案,但是千万不要觉得某种方案是放之四海而皆准的,没有这样的东西!RBAC根本不适宏内核协议栈的操作系统(UNIX,Linux,and so on...我可能在之前的文章把它们弄反了,...),但是这并不是每个人民中的一员都知道,包括我自己! 总之,数据包在内核协议栈的处理过程中一定要符合“快,爽”的风格,不能导致后续的数据包排队,因为不同的数据包
2014-04-26 20:47:44 6483 1
原创 令人作呕的OpenSSL
在OpenSSL心脏出血之后,我相信很多人都出了血,并且流了泪...网上瞬间出现了大量吐嘈OpenSSL的文章或段子,仿佛内心的窝火一瞬间被释放了出来,跟着这场疯闹,我也吐一下嘈,以雪这些年被OpenSSL蹂躏之辱,也许可以顺便展现一下我的无知与愚昧,但只是也许... 首先声明的一点是,我并没有恶意诋毁的意思,也并没有针对什么,比起生活中的大喜大悲,比起工作中的大起大落,比起追求理想过
2014-04-26 20:00:02 148608 106
原创 iptables规则绑定在端口而不是拦截在协议栈
是不是要重新设计Netfilter的HOOK点位置了?无疑这是一个没有意义的问题,因为你无法证明新的方案更好,你可能只是看上了另一个平台的方案而已,而这个方案和Netfilter的方案是不同的。事实上,我就是这样一个人。 Cisco的ACL可以被编译在端口上,事实上Cisco设备的网络端口角色是可以被定义的,Linux的理念和此完全不同,Linux内核认为定义角色这种事是用户态的职责,
2014-04-20 08:55:37 5554 1
原创 Linux路由表的抽象扩展应用于nf_conntrack
思想标准IP路由查找的过程为我们提供了一个极好的“匹配-动作”的例程。即匹配到一个路由项,然后将数据包发给该路由项指示的下一跳。如果我们把上面对IP路由查找的过程向上抽象一个层次,就会发现,其实它还可以有别的用。抽象后的表述为:以数据包的源地址或者目标地址为键值去查询一张表,查到结果项以后执行结果项指示的一个动作。一个结果项为:struct result_node { uint32
2014-04-19 12:26:34 5412
原创 利用nf_conntrack机制存储路由,省去每包路由查找
IP是无连接的,因此IP路由是每包一路由的,数据包通过查找路由表获取路由,这是现代操作协议协议栈IP路由的默认处理方式。但是如果协议栈具有流识别能力,是不是可以基于流来路由呢?答案无疑是肯定的。设计思想在Linux的实现中,nf_conntrack可以做到基于流的IP路由,大致思想就是,仅仅针对一个流的第一个正向包和第一个反向包查找标准的IP路由表,将结果保存在conntrack项中,后续的属于同
2014-04-19 11:57:45 7747 19
原创 如何任意扩展sk_buff而不重新编译内核
玩Linux网络的同好一定希望可以任意定义网络处理逻辑的行为,可谓协议处理的高端定制,最显而易见的办法就是在结构体里面加一个字段,事实上Linux的一个入口流控补丁IMQ就是这么做的,它简单的修改了Linux内核的sk_buff结构体的定义,增加了一个字段,增加了一个IMQ使用的字段,然后重新编译了内核... 通过重新编译内核,总是能满足任何的需求,但是噩梦本身就是重新编译内核!我特别
2014-04-13 15:45:21 9894 3
原创 USB,蓝牙,以太网,还是WIFI?
本文我们来关注一下硬件接口。声明在本文中,我没有严格按照IEEE 802来描述,比如我将以太网IEEE 802.3和IEEE 802.11混合在一起,并将后者看成前者的扩展(也有人说802.11是802.3的杀手...),事实上我这么理解是有道理的,因为毕竟是802.3独领风骚得时候,才有了802.11的舞台,而且二者现如今在一起非常融洽,不信看看自家的无线路由器。所以我把以太网(IEEE 802
2014-04-12 09:07:04 9339 1
原创 编程思想和网络协议处理
最近发生了4件事1.JAVA编程思想最近在看《JAVA编程思想》,赐予我思想吧,我要编程,字字珠玑,遍地思想啊!2.最近在实现一个协议如何判断一段数据是一个IP数据报,这个问题很简单,但是暴露的却是一个大问题。引发的是更多的思想。3.OpenSSL的心脏流血一个数据包的包头长度字段标识的长度并不是数据包的真实长度,关键是你为何凭空信任所谓的对端发来的数据。4.内存保护不要指望代码的行为是正常的,关
2014-04-12 09:05:14 4234 1
原创 ip_conntrack的extend机制以及扩展
ip_conntrack为无状态无连接的IP增加了一个流记录机制,你可以把任何和一个流相关的东西放进去,但是放在哪里呢?原则上ip_conntrack应该是一个可以无限扩展的东西,但事实上,内核的设计者或者说Netfilter的ip_conntrack设计者并没有给用户程序员留下任何可以扩展它的接口和机制,你只能用现有的连接跟踪机制,虽然可以通过nf_ct_extend_register接口注册一
2014-04-06 22:22:10 5394
原创 如何扩展Linux的ip_conntrack
Linux中有一个基于Netfilter的连接跟踪机制,即ip_conntrack,每一个conntrack表示的就是一个流,该流里面保存了大量的信息字段,这些字段本地有效,指导着数据包的转发策略,但是我觉得这些字段信息还不够详细,试想,一个nfmark字段好像就可以做到一切了,但是我如果想为一个数据流绑定一个字符串怎么办呢?也许你会说使用iptables+ipset+nfmark可以完成一切,这
2014-04-05 23:07:08 8101 3
原创 printf的归宿-数据打印到哪儿了
近日在一次测试Linux内核路由查找算法的过程中,发现一个printf语句竟然能将性能降低2/3。当然,使用“竟然”一词并不意味着这个问题是第一次发现,我的想法是,把它记录下来,让没有经验的同学对printf知其所以然,同时导出我对“性能攸关”的这类算法中记录日志的一个观点。声明我不会把大段的源代码贴在文章中,而只是希望能通过阐述原理把我的意思表达清楚。诚然,作为程序员没有代码好像一切都会很虚,不
2014-04-05 23:01:40 9538 4
一个iptables的stateless NAT模块实现
2014-12-27
模块化的nf-HiPAC
2014-11-21
关于linux内核以及其他个人体会的文集
2009-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人