服务器 频道

深入Linux网络核心堆栈之一

  【IT168 服务器学院】目录

  1 - 简介
    1.1 - 本文涉及的内容
    1.2 - 本文不涉及的内容
  2 - 各种Netfilter hook及其用法
    2.1 - Linux内核对数据包的处理
    2.2 - Netfilter对IPv4的hook
  3 - 注册和注销Netfilter hook
  4 - Netfilter 基本的数据报过滤技术[1]
    4.1 - 深入hook函数
    4.2 - 基于接口进行过滤
    4.3 - 基于地址进行过滤
    4.4 - 基于TCP端口进行过滤
  5 - Netfilter hook的其它可能用法
    5.1 - 隐藏后门的守护进程
    5.2 - 基于内核的FTP密码嗅探器
  5.2.1 - 源代码 : nfsniff.c
  5.2.2 - 源代码 : getpass.c
  6 - 在Libpcap中隐藏网络通信
    6.1 - SOCK_PACKET、SOCK_RAW与Libpcap
    6.2 - 给狼披上羊皮
  7 - 结束语
  A - 轻量级防火墙
    A.1 - 概述
    A.2 - 源代码 : lwfw.c
    A.3 - 头文件 : lwfw.h
  B - 第6节中的源代码

  --[ 1 - 简介

  本文将向你展示,Linux的网络堆栈的一些怪异行为(并不一定是弱点)如何被用于邪恶的或者是其它形形色色的目的。在这里将要讨论的是将表面上看起来合法的Netfilter hook用于后门的通信,以及一种使特定的网络通信在运行于本机的基于Libpcap的嗅探器中消声匿迹的技术。
  Netfilter是Linux 2.4内核的一个子系统,Netfiler使得诸如数据包过滤、网络地址转换(NAT)以及网络连接跟踪等技巧成为可能,这些功能仅通过使用内核网络代码提供的各式各样的hook既可以完成。这些hook位于内核代码中,要么是静态链接的,要么是以动态加载的模块的形式存在。可以为指定的网络事件注册相应的回调函数,数据包的接收就是这样一个例子。

  ----[ 1.1 - 本文涉及的内容

  本文讨论模块编写者如何利用Netfilter hook来实现任意目的以及如何将将网络通信在基于Libpcap的应用程序中隐藏。虽然Linux 2.4支持对IPv4、IPv6以及DECnet的hook,但在本文中将只讨论关于IPv4的话题,虽然如此,大部分关于IPv4的内容都同样可以运用于其它几种协议。出于教学的目的,附录A提供了一个可用的、提供基本的包过滤的内核模块。本文中所有的开发和试验都在运行于Intel主机上的Linux 2.4.5中完成。对Netfilter hook功能的测试在环回接口、以太网接口以及调制解调器点对点接口上完成。

  本文也是出于我对Netfilter完全理解的尝试的兴趣而写的。我并不能保证文中附带的任何代码100%的没有错误,但是我已经测试了所有在这里提供的代码。我已经受够了核心错误的折磨,因此真诚的希望你不会再如此。同样,我不会为任何按照本文所述进行的操作中可能发生的损害承担责任。本文假定读者熟悉C语言编程并且有一定的关于可加载模块的经验。

  欢迎对本文中出现的错误进行批评指正,我同时开诚布公的接受对本文的改进以及其它各种关于Netfilter的优秀技巧的建议。

  ---- [ 1.2 - 本文不涉及的内容

  本文不是一个完全的关于Netfilter的细节上的参考资料,同样,也不是一个关于iptables的命令的参考资料。如果你想了解更多的关于iptables的命令,请参考相关的手册页。

  好了,让我们从Netfilter的使用介绍开始 ...
  

0
相关文章