Linux 下包过滤流程

合集下载

linux中grep命令的使用

linux中grep命令的使用

linux中grep命令的使⽤linux中grep命令的使⽤grep (global search regular expression(RE) and print out the line,全⾯搜索正则表达式并把⾏打印出来)是⼀种强⼤的⽂本搜索⼯具,它能使⽤正则表达式搜索⽂本,并把匹配的⾏打印出来。

Unix的grep家族包括grep、egrep和fgrep。

grep命令是⼀种强⼤的⽂本搜索⼯具,它能使⽤正则表达式搜索⽂本,并把匹配的⾏打印出来。

grep全称是Global Regular Expression Print,表⽰全局正则表达式版本,它的使⽤权限是所有⽤户。

ps -ef | grep httpd :检查httpd进程是否存在ps -aux |awk '2 /32651/′过滤可以⽤ps−aux|awk′2!~/32651/' grep 2567会显⽰出现2567这个字符串的所有⾏ ; | 这是⼀个管道,把输出的结果当作输⼊送给下⼀个命令。

awk和sed⽐grep强⼤多了,在讲unix的书上grep⼀般是略带提的,但awk和sed就会着重讲。

查找etc⽬录下含有字符串“wl0505”的⽂件:find /etc -name "*" |xargs grep "wl0505" > ~/thefilegrep -rn wl0505 /etc/*find / -name "*.*" | xargs grep "wl0505" >>/home/filename*.*是⽂件名和扩展名,>>是把结果重定向到后⾯路径的⽂件中去,不在终端上显⽰了。

"*" 表⽰匹配带*这个字符的⾏* 表⽰找出带有*的⽂件并打印⾏ find ./ -maxdepth 1 | grep "*"find ./ -maxdepth 1 | grep \*这两个命令才是等价的对于 grep来讲他只接受正则表达式匹配 * ? 这些字符需要加转义符 \linux下的find与grep命令的功能不同。

一种基于Linux的无线数据包过滤系统的实现

一种基于Linux的无线数据包过滤系统的实现
12 8 2 1 . 0 . 1数 据 过 滤
8 2 1 协议 提供 了 3 类 型的帧 : 类是 控 制 帧 , 类 是 管理 帧 , 类是 数 据 帧. 中每 一 类 帧包 含 0.1 种 一 一 一 其
* 收稿 日期 :0 00— 1 2 1-52
作 者简 介 : 永 哲 ( 9 5 ) 男 , 西省 武 功 县 人 , 师 , 士 , 究 方 向 : 件 理 论 及 软 件 开发 史 17一 , 陕 讲 硕 研 软
当前 网络 的运 行状 态进行 分 析. 文结合 I E 0 . l 的 结构 , C ( 制 流程 图) 本 E 82 1 帧 对 GF 控 的构 造 和 工作 原理
进 行 了分析 , 究 了基 于 8 2 1 协 议族 的无 线 过 滤 系统 的 框 架 以及 在 Ln x无 线 网络 驱 动程 序 中的实 研 0.1 iu 现, 并给 出了系 统 实现 中的关 键部 分 C G 的 自动 化建 立算 法 , 算法 可 以 自动 地建 立 C G, 态设 置过 F 该 F 动 滤条件 , 具有 较大 的灵 活性. 文最 后对 系统 的可用 性 和可靠性 进行 了测试 , 对测 试数 据进行 了分 析. 本 并
1 无线 包过滤 机 制描述 下 面利用 C G 的特 点 , F 对无 线 局域 网中 的无 线 帧过滤 机制 进行分 析.
1 1 CF 过 滤 模 型 的 描 述 . G
无环 控制流 图 C G是 一种 过滤模 型 , F 在通信 领域 有着 重 要 的应用 价 值. 于数 据 流 分析 的通信 优 化 基 是 以控制 流 图为 基础 的 , 回归测试 中 R t eme 算 法 和 Harl 法在 测 试 集 选 择上 使 用 的是 C G 本 oh r l rod算 F . 文使用 C G过 滤模 型的优 点在 于把对 数据 包 的分 析信 息 直接 建 立在 图 中 , 而 不 需 要重 复计 算 , 过 滤 F 从 将

Linux防火墙的配置与管理:防火墙的包过滤功能设置

Linux防火墙的配置与管理:防火墙的包过滤功能设置

Linux防火墙的配置与管理为了保护校园网的安全,需要使用防火墙。

防火墙位于网络边界,用于保护局域网(LAN)内网和DMZ区,免受来自因特网(WAN)的攻击。

防火墙的工作实质是报文过滤。

一、项目简介(一)含有DMZ区的防火墙概述防火墙通常有三个接口(端口),分别是WAN、LAN和DMZ。

如图表3-1所示。

图3-1 防火墙拓扑结构图在网络中,非军事区(DMZ)是指为不信任系统提供服务的孤立网段,其目的是把敏感的内部网络和其他提供访问服务的网络分开,阻止内网和外网直接通信,以保证内网安全。

含有DMZ的网络,包括六条访问控制策略。

1、内网可以访问外网内网的用户可以自由地访问外网。

因此防火墙需要进行源地址转换。

2、内网可以访问DMZ内网用户使用和管理DMZ中的服务器。

3、外网不能访问内网由于内网中存放的是公司内部数据,这些数据不允许外网的用户进行访问。

4、外网可以访问DMZDMZ中的服务器本身就是要给外界提供服务的,所以外网必须可以访问DMZ。

同时,外网访问DMZ需要由防火墙完成对外地址到服务器实际地址的转换。

5、DMZ不能访问内网很明显,如果违背此策略,则当入侵者攻陷DMZ时,就可以进一步进攻到内网的重要数据。

6、DMZ不能访问外网此条策略也有例外,比如DMZ中放置邮件服务器时,就需要访问外网,否则将不能正常工作。

(二)Linux防火墙简介Linux下的防火墙是iptables/netfilter。

iptables是一个用来指定netfilter规则和管理内核包过滤的工具,它为用户配置防火墙规则提供了方便。

与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换NAT等功能。

1、netfilter的组成netfilter主要包括三个表(table):filter、nat和mangle,分别用于实现报文过滤、网络地址转换和报文重构。

tc命令与iptables规则

tc命令与iptables规则

tc命令与iptables规则tc命令与iptables规则是两个非常重要的Linux命令工具,它们在网络管理和安全方面起到了关键作用。

本文将一步一步回答关于这两个主题的问题,从基础知识到实际应用进行详细介绍。

一、什么是tc命令?tc命令是Linux中的一个网络管理工具,全称为Traffic Control,用于控制和配置网络流量。

通过tc命令,可以实现带宽控制、流量整形和优先级设置等功能,从而确保网络资源的有效分配和优化。

1. tc命令的基本语法tc命令的基本语法如下:tc [options] action command [command-options]其中,options是一些可选的参数,action是指定具体的操作(如add、change、del等),command表示要执行的具体操作(如qdisc、class、filter等),command-options是操作相关的选项参数。

2. tc命令中的关键概念在使用tc命令时,有几个关键概念需要了解:- qdisc(Queueing Discipline):队列调度器,用于控制数据包的排队和调度。

常用的qdisc包括pfifo、sfq、htb等。

- class(分类):用于对数据包进行分类和分组。

每个分类可以应用不同的qdisc和过滤规则。

- filter(过滤器):用于根据特定的条件过滤数据包。

可以根据源IP、目标IP、协议、端口等进行过滤。

二、什么是iptables规则?iptables规则是Linux中的一个防火墙工具,用于配置和管理网络包过滤。

通过iptables规则,可以实现网络流量的过滤、转发和NAT等功能,从而保护网络资源的安全。

1. iptables规则的基本语法iptables规则的基本语法如下:iptables -t table_name command [command-options] [match] [target]其中,table_name表示所使用的表,常用的表包括filter、nat、mangle 等;command表示具体要执行的操作,常用的操作包括-A、-D、-I等;command-options是一些选项参数;match是匹配条件,用于指定要匹配的字段和条件;target是要执行的动作,比如ACCEPT、DROP、REJECT 等。

Linux命令行中的文件搜索和筛选技巧

Linux命令行中的文件搜索和筛选技巧

Linux命令行中的文件搜索和筛选技巧Linux操作系统以其高度定制性和强大的命令行功能而闻名,文件搜索和筛选是在Linux命令行中常见的任务之一。

无论您是初学者还是有经验的用户,掌握一些文件搜索和筛选的技巧都可以提高您的工作效率。

本文将介绍一些常用的Linux命令行中的文件搜索和筛选技巧,帮助您更好地利用Linux操作系统。

一、使用find命令进行文件搜索在Linux命令行中,find命令是用于搜索文件和目录的强大工具。

它可以按照指定的条件在文件系统中递归搜索文件,并将搜索结果返回给用户。

下面是一些find命令的常见用法:1. 搜索指定名称的文件:find /目录路径 -name "文件名"例如,要在整个文件系统中搜索名为"test.txt"的文件,可以运行以下命令:find / -name "test.txt"2. 按文件类型搜索:find /目录路径 -type 类型例如,要在当前目录中搜索所有的目录,可以运行以下命令:find . -type d3. 按文件大小搜索:find /目录路径 -size [+/-]大小例如,要在当前目录中搜索大于10M的文件,可以运行以下命令: find . -size +10M二、使用grep命令进行文件内容筛选除了按照文件名搜索文件,有时候我们需要根据文件内容来筛选文件。

在Linux中,grep命令是用于在文件中搜索指定的字符串模式的工具。

下面是一些grep命令的常见用法:1. 在文件中搜索指定字符串:grep "字符串" 文件名例如,要在文件"test.txt"中搜索"hello"字符串,可以运行以下命令: grep "hello" test.txt2. 对搜索结果进行行数统计:grep -c "字符串" 文件名例如,要统计文件"test.txt"中包含"hello"字符串的行数,可以运行以下命令:grep -c "hello" test.txt3. 忽略大小写进行搜索:grep -i "字符串" 文件名例如,要在文件"test.txt"中搜索"hello"字符串,忽略大小写,可以运行以下命令:grep -i "hello" test.txt三、使用ls命令进行文件列表筛选除了使用find和grep命令进行文件搜索和筛选,ls命令也可以根据指定的条件列出文件列表。

四表五链Linux-iptables防火墙

四表五链Linux-iptables防火墙

四表五链Linux-iptables防⽕墙⼀、iptables概述Linux 系统的防⽕墙: IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成主要⼯作在⽹络层,针对IP数据包。

体现在对包内的IP地址、端⼝等信息的处理上⼆、netfilter/iptables关系• 属于“内核态”(KernelSpace,⼜称为内核空间) 的防⽕墙功能体系• 是内核的⼀部分,由–些数据包过滤表组成,这些表包含内核⽤来控制数据包过滤处理的规则集• 属于“⽤户态”(User Space,⼜称为⽤户空间) 的防⽕墙管理体系• 是⼀种⽤来管理Linux防⽕墙的命令程序,它使插⼊、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables⽬录下三、四表五链规则表的作⽤: 容纳各种规则链规则链的作⽤: 容纳各种防⽕墙规则四表raw表:确定是否对该数据包进⾏状态跟踪。

包含两个规则链,OUTPUT、 PREROUTINGmangle表:修改数据包内容,⽤来做流量整形的,给数据包设置标记。

包含五个规则链,INPUT、 OUTPUT、FORWARD、PREROUTING、 POSTROUTINGnat表:负责⽹络地址转换,⽤来修改数据包中的源、⽬标IP地址或端⼝。

包含三个规则链,OUTPUT、PREROUTING、 POSTROUTING filter表:负责过滤数据包,确定是否放⾏该数据包(过滤)。

包含三个规则链,INPUT、 FORWARD、0UTPUT五链INPUT:处理⼊站数据包,匹配⽬标IP为本机的数据包OUTPUT:处理出站数据包,–般不在此链.上做配置FORWARD:处理转发数据包,匹配流经本机的数据包PREROUTING:在进⾏路由选择前处理数据包,⽤来修改⽬的地址,⽤来做DNAT。

相当于把内⽹服务器的IP和端⼝映射到路由器的外⽹IP 和端⼝上POSTROUTING:在进⾏路由选择后处理数据包,⽤来修改源地址,⽤来做SNAT。

Linux下iptables超详细教程和使用示例

Linux下iptables超详细教程和使用示例

Linux下iptables超详细教程和使⽤⽰例iptables的结构:iptables由上⽽下,由Tables,Chains,Rules组成。

⼀、iptables的表tables与链chainsiptables有Filter, NAT, Mangle, Raw四种内建表:1. Filter表Filter是iptables的默认表,它有以下三种内建链(chains):INPUT链 – 处理来⾃外部的数据。

OUTPUT链 – 处理向外发送的数据。

FORWARD链 – 将数据转发到本机的其他⽹卡设备上。

2. NAT表NAT表有三种内建链:PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。

它会转换数据包中的⽬标IP地址(destination ip address),通常⽤于DNAT(destination NAT)。

POSTROUTING链 – 处理即将离开本机的数据包。

它会转换数据包中的源IP地址(source ip address),通常⽤于SNAT(source NAT)。

OUTPUT链 – 处理本机产⽣的数据包。

3. Mangle表Mangle表⽤于指定如何处理数据包。

它能改变TCP头中的QoS位。

Mangle表具有5个内建链(chains):PREROUTINGOUTPUTFORWARDINPUTPOSTROUTING4. Raw表Raw表⽤于处理异常,它具有2个内建链:PREROUTING chainOUTPUT chain5.⼩结⼆、IPTABLES 规则(Rules)规则的关键知识点:Rules包括⼀个条件和⼀个⽬标(target)如果满⾜条件,就执⾏⽬标(target)中的规则或者特定值。

如果不满⾜条件,就判断下⼀条Rules。

⽬标值(Target Values)在target⾥指定的特殊值:ACCEPT – 允许防⽕墙接收数据包DROP – 防⽕墙丢弃包QUEUE – 防⽕墙将数据包移交到⽤户空间RETURN – 防⽕墙停⽌执⾏当前链中的后续Rules,并返回到调⽤链(the calling chain)中。

linux下各种服务进程之iptables详解(最新整理)

linux下各种服务进程之iptables详解(最新整理)

linux下IPTABLES配置详解开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[root@tp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationChain RH-Firewall-1-INPUT (0 references)target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.如果你在安装linux时没有选择启动防火墙,是这样的[root@tp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destination什么规则都没有.(2)清除原有规则.不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.[root@tp ~]# iptables -F清除预设表filter中的所有规则链的规则[root@tp ~]# iptables -X清除预设表filter中使用者自定链中的规则我们在来看一下[root@tp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destination什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.[root@tp ~]# /etc/rc.d/init.d/iptables save这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.[root@tp ~]# service iptables restart现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧(3)设定预设规则[root@tp ~]# iptables -p INPUT DROP[root@tp ~]# iptables -p OUTPUT ACCEPT[root@tp ~]# iptables -p FORWARD DROP上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.怎么办,去本机操作呗!(4)添加规则.首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链为了能采用远程SSH登陆,我们要开启22端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)如果做了WEB服务器,开启80端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT如果做了邮件服务器,开启25,110端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT如果做了FTP服务器,开启21端口[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT如果做了DNS服务器,开启53端口[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT如果你还做了其他的服务器,需要开启哪个端口,照写就行了.上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP允许icmp包通过,也就是允许ping,[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) [root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)允许loopback!(不然会导致DNS无法正常关闭等问题)IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.减少不安全的端口连接[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的elite 端口)上的服务。

linux arptables 用于管理arp包过滤的软件

linux arptables 用于管理arp包过滤的软件

linux arptables 用于管理arp包过滤的软件基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理.arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能放只本机病毒或错误程序向其他机器发起arp攻击.arptalbes用于建立、获取、修改内核的arp包处理表.有几个不同的表,每个表分别含有几条内建的处理链,同时允许用户自定义处理链每条链是一些规则的列表,每条规则匹配特定的包.每条规则指定一个对匹配的包的操作.这个操作也叫做‘目标’,这个目标也可是跳转到同一个表中的另外的链内建目标:ACCEPT, DROP, QUEUE, RETURN.是几个最基本的目标,ACCEPT指接受这个包,DORP指丢掉这个包,QUEUE指把包传到用户空间(如果内核指定了的话),RETURN指返回到上一条链,接着执行上一条链跳转过来哪条规则的下一个规则.每条链都有一个默认目标,当包经过所有规则都没被匹配,则发给默认目标表:一边至少有一个内建的表(filter表)-t常常用于指定要操作的表.filter表有两个内建的链,IN和OUT,IN用于处理目标为发给本机目标为本机的包,OUT处理本机发出去的包.参数分两类:一、命令类-A, --append chain rule-specification追加规则-D, --delete chain rule-specification删除指定规则-D, --delete chain rulenum删除指定位置的规则-I, --insert chain [rulenum] rule-specification插入规杂-R, --replace chain rulenum rule-specification替换规则-L, --list [chain]列出规则-F, --flush [chain]删除所有规则-Z, --zero [chain]清空所有计数-N, --new-chain chain新建链-X, --delete-chain [chain]删除链-P, --policy chain target指定默认目标-E, --rename-chain old-chain new-chain重命名链-h,帮助二、参数类-s, --source [!] address[/mask]源地址-d, --destination [!] address[/mask]目的地址-z, --source-hw [!] hwaddr[mask]源mac-y, --target-hw [!] hwaddr[mask]目的mac-i, --in-interface [!] name受到这个包的网卡-o, --out-interface [!] name要发送这个包的网卡-a, --arhln [!] value[mask]-p, --arpop [!] value[mask]-H, --arhrd [!] value[mask]-w, --arpro [!] value[value]-j, --jump target跳到目标-c, --set-counters PKTS BYTES计数实例1:=--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--====1. 安装arptablesarptables的图形下载页面是:/projects/ebtables/files/2.下载并安装:# wget -c/projects/ebtables/files/arptables/arptables-v0.0.3/arptables-v0.0.3-4.tar.gz# tar zxvf arptables-v0.0.3-4.tar.gz# cd arptables-v0.0.3-4# make# make install生成的命令是/usr/local/sbin/arptables、/usr/local/sbin/arptables-save、/usr /local /sbin/arptables-restore,系统启动脚本/etc/rc.d/init.d/arptables,这个脚本读的配置文件必须放在/etc/sysconfig/arptables里。

Linux 2.4内核下新型包过滤结构的使用

Linux 2.4内核下新型包过滤结构的使用

Linux 2.4内核下新型包过滤结构的使用一、包如何穿过(traverse)过滤内核从"filter"表格的三个列表(lists)开始,这三个列表叫做firewall chains(防火墙链)或就叫做chains (链)。

这三个链分别为INPUT、OUTPUT以及FORWARD。

这跟2.0和2.2内核有很大差别。

各链(chains)如下图所示:_____Incoming/ \ Outgoing-->[Routing ]--->|FORWARD|------->[Decision]\_____/ ^| |v _______/\/ \ |OUTPUT||INPUT| \____/\___/ ^||----> Local Process ----其中三个圈代表前述的三个链,当一个包抵达上图其中的一个链时,相应的链就会被检验(examined)以决定如何处理这个包。

如果链认为应该丢弃(DROP)这个包,则将该包丢弃;如果链认为应该接受(ACCEPT)该包,那么它将继续在图中穿越。

一个链(chain)其实就是众多规则(rules)钟的一个检查清单(checklist)。

每一条规则的形式就像这样:"如果包的头是这样,就这样处理该包"。

如果规则的设定和包不匹配,则交由链中的下一条规则继续处理。

直到最后没有余下的规则可以参考,那么内核就会根据链的策略(policy)以决定如何处理。

在一个安全性强的系统中,策略通常都会要求内核丢弃该包。

(1)当一个包进入时(假设通过Ethernet网卡),内核首先看包的目的地(destination):这被称为路由(routing)。

(2)如果目的地址为本机,这个包就按图时下行至INPUT链,如果能够通过,则进入后面的包处理过程。

(3)否则,如果内核没有启动转发功能,或者它不知道如何转发这个包,那么该包就会被丢弃。

一种Linux平台上基于包过滤的网络流量采集系统

一种Linux平台上基于包过滤的网络流量采集系统
b t e s r p c a d e e p c W mp e n e , s h t F y t m d a r a t ru h i e e o ma c ewe n u e s a e n k r l s a e a i l me t n s d o ta P C s se e h f
口处采集 网络流量信息 , 然后再进 一步对 采集到 的数据进行
分析处 理。另一方面 , 近年来 ,iu Lnx操作 系统因其开源 、 简单
易用等 特点得到广泛应用 , 并且 成为许多 网络产 品的开发平 台。因此 , 研究与开发在 Lnx平 台上 的 网络流 量采集 系 统 i u
墙、 认证计费系统 、 入侵检测系 统、 信息审计系统 、 网络流量 分
析系统 以及各种 网管软件 , 其工作 原理都 是首先要从 网络接
l )然后发送给集 中处理网络流量 信息 的数 据服务器 。在 fw , o
以上实现框架 中, 数据包 从 内核 缓冲 区拷 贝到用 户空间是 通 过频繁执行 I O中断调用来完成 的 , 然而 , I O中断调 用一般要 进行多次缓 冲区数据拷贝 , 开销 比较大 , 不仅影 响网络转发 的 性能, 而且当网络流量 增大 到一定 阈值时 ,O调 用 获取数 据 I 包 的速度就会低于操作系统 内核 中数据包流经网络接 口的速 度 , 一部 分数据包从 内核缓 冲区 中“ 出” 导致 溢 而无 法被采集
Fo oet ( F )W r oe .D t pc e ft iga dm ri e a zd i kre pc,adm mo hr g l Cl c r P C a po sd aa ak t l r eg gw r r le enl ae n e r sa n w l o s p en n i n eei n s y i

linux防火墙过滤规则

linux防火墙过滤规则

一、linux防火墙基础防火墙分为硬件防火墙和软件防火墙。

1.概述linux 防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。

包过滤机制:netfilter管理防火墙规则命令工具:iptablesnetfilter 指linux内核中实现包过滤防火墙的内部结构,不依程序或文件的形式存在,属于“内核态”的防火墙功能体系iptables 指管理linux防火墙的命令工具,属于“用户态”的防火墙管理体系2.iptables的规则表、链结构iptables的作用在于为包过滤机制的实现提供规则,通过不同的规则作出不同的反应. iptables管理4个表、以及他们的规则链filter,用于路由网络数据包。

INPUT 网络数据包流向服务器OUTPUT 网络数据包从服务器流出FORWARD 网络数据包经服务器路由nat,用于NAT表.NAT(Net Address Translation )是一种IP地址转换方法。

PREROUTING 网络数据包到达服务器时可以被修改POSTROUTING 网络数据包在即将从服务器发出时可以被修改OUTPUT 网络数据包流出服务器mangle,用于修改网络数据包的表,如TOS(Type Of Service),TTL(Time To Live),等INPUT 网络数据包流向服务器OUTPUT 网络数据包流出服务器FORWARD 网络数据包经由服务器转发PREROUTING 网络数据包到达服务器时可以被修改POSTROUTING 网络数据包在即将从服务器发出时可以被修改raw, 用于决定数据包是否被跟踪机制处理OUTPUT 网络数据包流出服务器PREROUTING 网络数据包到达服务器时可以被修改3.数据包过滤匹配流程1>.规则表之间的优先顺序依次应用:raw、mangle、nat、filter表2>.规则链之间的优先顺序入站数据流向转发数据流向出站数据流向3>.规则链内部各条防火墙规则之间的优先顺序二、管理和配置Iptables规则1.iptables的基本语法格式iptables [-t 表名] 命令选项 [链名] [条件匹配] [-] 目标动作或跳转表名链名用于指定iptables命令所做对象,未指定默认filter表,命令选项指于管理iptables规则的方式(插入、删除··);条件匹配指定对条件的符合而处理;目标动作或跳转指定数据包的处理方式。

linux下IPTABLES配置详解

linux下IPTABLES配置详解

linux下IPTABLES配置详解我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[root@tp~]#iptables-L-nChain INPUT(policy ACCEPT)target prot opt source destination Chain FORWARD(policy ACCEPT)target prot opt source destination Chain OUTPUT(policy ACCEPT)target prot opt source destination Chain RH-Firewall-1-INPUT(0 references)target prot opt source destinationACCEPT all--0.0.0.0/00.0.0.0/0ACCEPT icmp--0.0.0.0/00.0.0.0/0icmp type255ACCEPT esp--0.0.0.0/00.0.0.0/0ACCEPT ah--0.0.0.0/00.0.0.0/0ACCEPT udp--0.0.0.0/0224.0.0.251udp dpt:5353ACCEPT udp--0.0.0.0/00.0.0.0/0udp dpt:631ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:22ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:80ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:25REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.如果你在安装linux时没有选择启动防火墙,是这样的[root@tp~]#iptables-L-nChain INPUT(policy ACCEPT)target prot opt source destination Chain FORWARD(policy ACCEPT)target prot opt source destination Chain OUTPUT(policy ACCEPT)target prot opt source destination什么规则都没有.(2)清除原有规则.不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.[root@tp~]#iptables -F清除预设表filter中的所有规则链的规则[root@tp~]#iptables-X清除预设表filter中使用者自定链中的规则我们在来看一下[root@tp~]# iptables-L-nChain INPUT(policy ACCEPT)target prot opt source destination Chain FORWARD(policy ACCEPT)target prot opt source destination Chain OUTPUT(policy ACCEPT)target prot opt source destination什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.[root@tp~]#/etc/rc.d/init.d/iptables save这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.[root@tp~]#service iptables restart现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧(3)设定预设规则[root@tp~]#iptables-p INPUT DROP[root@tp~]#iptables-p OUTPUT ACCEPT[root@tp~]#iptables-p FORWARD DROP上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.怎么办,去本机操作呗!(4)添加规则.首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链为了能采用远程SSH登陆,我们要开启22端口.[root@tp~]#iptables-A INPUT-p tcp--dport22-j ACCEPT[root@tp~]#iptables-A OUTPUT-p tcp--sport22-j ACCEPT(注:这个规则,如果你把OUTPUT设置成DROP 的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:[root@tp~]#iptables-A OUTPUT-p tcp--sport80-j ACCEPT,其他同理.)如果做了WEB服务器,开启80端口.[root@tp~]#iptables-A INPUT-p tcp--dport80-j ACCEPT如果做了邮件服务器,开启25,110端口.[root@tp~]#iptables-A INPUT-p tcp--dport110-j ACCEPT[root@tp~]#iptables-A INPUT-p tcp--dport25-j ACCEPT如果做了FTP服务器,开启21端口[root@tp~]#iptables-A INPUT-p tcp--dport21-j ACCEPT[root@tp~]#iptables-A INPUT-p tcp--dport20-j ACCEPT如果做了DNS服务器,开启53端口[root@tp~]#iptables-A INPUT-p tcp--dport53-j ACCEPT如果你还做了其他的服务器,需要开启哪个端口,照写就行了.上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP允许icmp包通过,也就是允许ping,[root@tp~]#iptables-A OUTPUT-p icmp-j ACCEPT(OUTPUT设置成DROP的话)[root@tp~]#iptables-A INPUT-p icmp-j ACCEPT(INPUT设置成DROP的话)允许loopback!(不然会导致DNS无法正常关闭等问题)IPTABLES-A INPUT-i lo-p all-j ACCEPT(如果是INPUT DROP)IPTABLES-A OUTPUT-o lo-p all-j ACCEPT(如果是OUTPUT DROP)下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.减少不安全的端口连接[root@tp~]#iptables-A OUTPUT-p tcp--sport31337-j DROP[root@tp~]#iptables-A OUTPUT-p tcp--dport31337-j DROP有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的elite端口)上的服务。

实验十五 LINUX iptables 防火墙(理论部分)

实验十五 LINUX iptables 防火墙(理论部分)

防火墙原理一.iptables简介从1.1内核开始,linux就已经具有包过滤功能了,在2.0的内核中我们采用ipfwadm 来操作内核包过滤规则。

之后在2.2内核中,采用了大家并不陌生的ipchains来控制内核包过滤规则。

在2.4内核中我们不再使用ipchains,而是采用一个全新的内核包过滤管理工具—iptables。

这个全新的内核包过滤工具将使用户更易于理解其工作原理,更容易被使用,当然也将具有更为强大的功能。

iptables只是一个内核包过滤的工具,iptables可以加入、插入或删除核心包过滤表格(链)中的规则。

实际上真正来执行这些过滤规则的是netfilter(Linux内核中一个通用架构)及其相关模块(如iptables模块和nat模块)。

netfilter提供了一系列的“表(tables)”,每个表由若干“链(chains)”组成,而每条链中有一条或数条规则(rule)组成。

我们可以这样来理解,netfilter是表的容器,表是链的容器,链又是规则的容器。

netfilter系统缺省的表为“filter”,该表中包含了INPUT、FORW ARD和OUTPUT 3个链。

每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。

当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件:如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。

最后,如果该数据包不符合该链中任一条规则的话,系统就会根据预先定义的策略(policy)来处理该数据包。

图1 网络数据包在filter表中的流程数据包在filter表中的流程如图1所示。

有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有三种情况:(1)如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统就会将这个包丢掉。

Linux平台下数据包过滤防火墙的研究与实践

Linux平台下数据包过滤防火墙的研究与实践

目的端 口以及连接 状态等信 息。 Ne l rpa ls 与最新 的 2 . 本 Ln x内核 集 t t/ t e 是 i f eI b .X版 4 i u 成 的 I 息包过 滤系统 。 P信 如果 Lnx系统连接 到 L N 和 iu A 或因特 网和代理服务 器 , 则该 系统有利 于在 Ln x系统 上 iu 更好地控制 I P信 息 包过 滤 和 防火 墙 配置 。Ne t 是 ml r e Ln x核 心 中一个 通用架 构 , i u 用于扩展 各种服 务 的结构化
T e R s ac n rcc fP c e i r g Frwa a e n te Pa r fL u h e e rh a d Pa t e o a k tFt i i i l n e e l B s d o h I m o i x l n
Han Y an
( ) 火 墙 策 略 , 置 防 火 墙 F R A D 链 的 策 略 为 8防 设 O W R
DR0 P
下 面 是 在 Ln x平 台 下 ,使 用 Neftrpa l 建 立 iu tl / t e i eI b s 的 一 些 典 型 包 过 滤 防 火墙 的 应 用 。
( ) WW 服 务 , 置 Eh 6W 设 to允 许 目的 为 内 部 网 W WW
服务 的数据 包。
itbe A ORW ARD - o — d S pa ls- F p tp WW W - ERVER S

3 N tl r pal 防火墙的应用 e t / tb s i f eI e
121811121 81 0 j C P 9 . . .9 . .. 0-AC E T 6 . 6 2 ( )封 杀 B 4 T类 的 P P软 件 ,限 制 网络 用 户 使 用 B 2 T

在Linux环境下用Iptables建立包过滤型防火墙

在Linux环境下用Iptables建立包过滤型防火墙
一般来说防火墙是一台位于专有网络和公共网络之间的安全的可信任的主机通过它可以隔离风险区域即或有一定风险的网络与安全区域局域网的连接同时不会妨碍人们对风险区域的访问
2 0 0 6年第2 期 2 0 0 6年 6月



ቤተ መጻሕፍቲ ባይዱ

第2 6卷 总第 1 0 5期

L � � � �环
境 下 用
I � � � � � �建 �
收稿日期: 2 0 0 6 0 2 2 9 作者简介: 舒云川 ( , 男, 重庆市人, 工程师, 主要从事网络管理和开发工作。 1 9 7 0 -)
5 5
网段的终 端开通 � 管理网 段的终端 可以 � � 服务, 主机。 P � � � 3 . 1 定义符号常量 “ : ” P O R T S E 1 0 2 4 6 5 5 3 5 “X / ” N E T I P E X X . X X X . X X X. X X X X X “X ” M Y I P E X X. X X X . X X X . X X X “ L O O P B A C K I N T E R F A C E EL O” 定义非特 权端口、 管理网 段地址、 本机 I P地 址、 回环接口。 3 . 2 定义默认策略 � � � � � � � �F � � � � � � �PI N P U TD R O P � � � � � � � �PO U T P U TD R O P � � � � � � � �-PF O RW A R DD R O P � 清除所有规则链, 定义指定规则链缺省策略, 这里所有规则链为禁止。 3 . 3 启用回环接口 � � � � � � � � -AI N P U T -�$L O O P B A C K I N T E R F A C E�A C C E P T � � � � � � � � -A O U T P U T -� $L O O P B A C K I N T E R F A C EC C E P T �A 启用本地网络服务, 如XW � � � � � 系统等。 3 . 4 激活 W � �服务 / � � � � � � �AI N P U T� � � � � � 0� 0 0-� � � � � � �� $ P O R T S�$M Y I P-� � � � 8 0A C C E P T � � � � � � � � � �-A O U T P U T -�� � � -�� � � 0 -� / $MY I P - -� � � � �8 0 - � 00 - - � � � � � ! $P O R T S -� � ��A C C E P T 允许所有网段的远程终端通过非特权端口发 起对本机 网络接 口 ( , ) 的 � � � 0 I P 地 址为 $MY I P 允许通 过本机网 络接口 T C P 8 0 端 口 的 访 问; ( , ) 的T � � � 0 I P 地址为 $MY I P C P8 0 端口对所有 网段的远程终端的非特权端口发出响应, 但不允许 本机向外发出连接请求。 3 . 5 激活 S S H 服务 � � � � � � �-A I N P U T� � � � � � 0�$N E T I P � � �-� � � �$P O R T S-�$M Y I P --� � � � 2 2� � C C E P T �A � � � � � � �-AO U T P U T� � � � � � 0�$M Y I P � � �! -� � � � � 2 2�$N E T I P-� � � � �$P O R T S � � �� A C C E P T 只允许管理网段的终端通过 S S H 登录主机。 3 . 6 激活� � �服务 � � � � � � �-A I N P U T� � � � � � 0�$N E T I P � � �5 6

简述包过滤技术

简述包过滤技术

简述包过滤技术什么是包过滤技术包过滤技术(Packet Filtering)是网络安全中的一种重要技术,用于根据一定的规则或者策略来对网络通信中的数据包进行过滤和控制。

通过对数据包的源地址、目的地址、协议类型、端口号等信息进行检查,可以实现对网络流量的监控、筛选和控制,从而提高网络的安全性和性能。

包过滤技术的分类包过滤技术主要分为两种类型:有状态包过滤和无状态包过滤。

有状态包过滤(Stateful Packet Filtering)是基于网络连接的状态进行过滤,能够对传输的数据包进行有效的监控和筛选。

而无状态包过滤(Stateless Packet Filtering)则是根据每个数据包的独立属性进行过滤,无法准确地了解整个连接的状态信息。

包过滤技术的原理包过滤技术通过设置规则和策略,实现对数据包的过滤和控制。

它可以根据源地址、目的地址、协议类型、端口号等属性来判断数据包是否需要被允许通过或者被屏蔽。

其主要原理如下:1.根据规则匹配:管理员可以设置一系列的过滤规则,这些规则定义了允许通过或者屏蔽的数据包。

当网络设备接收到一个数据包时,会逐一匹配过滤规则,直到找到一个与数据包匹配的规则。

如果找到匹配规则,则决定该数据包的处理方式,否则按默认策略处理。

2.基于请求和响应:有状态包过滤技术可以实现基于请求和响应的数据包过滤。

它会对网络连接进行跟踪,并记录连接的状态信息。

当一个请求数据包进入网络设备时,会自动建立一个相关的会话表项;而当响应数据包到达时,会与会话表项匹配,从而确认该响应数据包是属于哪个请求的。

3.检查数据包的属性:包过滤技术可以根据数据包的属性进行过滤,如源IP地址、目的IP地址、传输协议、端口号等。

管理员可以根据实际需求,设置不同的规则来控制特定类型的流量。

例如,可以屏蔽某个特定IP地址的数据包,或者只允许某个特定端口的数据包通过。

包过滤技术的优点和缺点包过滤技术有其独特的优点和缺点,下面将详细介绍。

linux安全组出人规则

linux安全组出人规则

linux安全组出人规则
一、过滤规则
1.1目的:对数据包进行过滤,允许或阻止特定数据包的传输。

1.2常见协议:TCP、UDP、ICMP等。

1.3配置方式:使用iptables命令进行配置。

二、转发规则
2.1目的:对网络数据包进行转发,实现网络层的数据转发功能。

2.2配置方式:使用iptables命令进行配置。

三、连接限制规则
3.1目的:限制与服务器建立的TCP连接数,防止DoS攻击。

3.2配置方式:使用iptables命令进行配置。

四、安全审计规则
4.1目的:对网络流量进行审计,发现异常流量并报警。

4.2配置方式:使用iptables命令进行配置。

以上是Linux安全组出人规则的主要内容,不同的规则适用于不同的场景,需要根据实际情况进行配置。

同时,还需要定期进行安全审计,确保网络的安全性。

Linux下Libpcap源码分析和包过滤机制分解

Linux下Libpcap源码分析和包过滤机制分解

libpcap是unix/Linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。

Libpcap 可以在绝大多数类unix平台下工作,本文分析了libpcap在linux 下的源代码实现,其中重点是linux 的底层包捕获机制和过滤器设置方式,同时也简要的讨论了 libpcap使用的包过滤机制 BPF。

网络监控绝大多数的现代操作系统都提供了对底层网络数据包捕获的机制,在捕获机制之上可以建立网络监控(Network Monitoring)应用软件。

网络监控也常简称为sniffer,其最初的目的在于对网络通信情况进行监控,以对网络的一些异常情况进行调试处理。

但随着互连网的快速普及和网络攻击行为的频繁出现,保护网络的运行安全也成为监控软件的另一个重要目的。

例如,网络监控在路由器,防火墙、入侵检查等方面使用也很广泛。

除此而外,它也是一种比较有效的黑客手段,例如,美国政府安全部门的"肉食动物"计划。

包捕获机制从广义的角度上看,一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。

不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。

数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。

而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。

值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。

对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。

这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。

包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。

Libpcap应用程序框架Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void __init ip_init(void)
{
dev_add_pack(&ip_packet_type);
。。。。。。。
}
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
int nf_register_hook(struct nf_hook_ops *reg)
struct nf_hook_ops结构:
struct nf_hook_ops
{
struct list_head list; /* User fills in from here down. */
3 NF_IP_FORWARD
4 NF_IP_POST_ROUTING
5 NF_IP_LOCAL_OUT
内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如下值:
NF_ACCEPT 继续正常传输数据报
它的五个参数将由NFHOOK宏传进去。
步骤:
STEP 1. static unsigned int sample(unsigned int hooknum,struct sk_buff **skb, const struct net_device *in, const struct net_device *out,int (*okfn)(struct sk_buff *)) //具体操作
{
......
return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,
ip_rcv_finish);
......
}
etipv4Ip_output.c :
int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,u32 saddr, u32 daddr, struct ip_options *opt)
{
.......
return NF_HOOK(PF_INET, NF_IP_LOCAL_IN, skb, skb->dev, NULL,
ip_local_deliver_finish);
}
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
}
2. 一个数据包按照如下图所示的过程通过Netfilter系统
--->[1]--->[ROUTE]--->[3]--->[4]--->
| ^
| |
| [ROUTE]
v |
1、取包:
static struct packet_type ip_packet_type =
{
__constant_htons(ETH_P_IP),
NULL, /* All devices */
ip_rcv, /*IP层取包函数*/
(void*)1,
NULL,
};
其HOOK上。其中list项总要初始化为{NULL,NULL};由于一般在IP层工作,pf总是
PF_INET;hooknum就是HOOK点;一个HOOK点可能挂多个处理函数,谁先谁后
,便要看优先级,即priority的指定了。netfilter_ipv4.h中用一个枚举类型指定了内
置的处理函数的优先级;
{ 。。。。。。。。。
return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,ip_rcv_finish);
/*调用NF_HOOK宏,如果有防火墙则调用勾子函数,再调用ip_rcv_finsish();*/
。。。。。。。。。
nf_hookfn *hook;
int pf;
int hooknum; /* Hooks are ordered in ascending priority. */
int priority;
};
现生成一个struct nf_hook_ops结构的实例,并用nf_register_hook将
{
......
return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,ip_queue_xmit2Ip_forward.c :
ip_forward()
{
......
{
......
return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
output_maybe_reroute);
}
__inline__ int ip_finish_output(struct sk_buff *skb)
return NF_HOOK(PF_INET, NF_IP_FORWARD, skb, skb->dev, dev2,ip_forward_finish);
......
}
4. 自己的包过滤实现:
通过dev_remove_pack()先将把ip_packet_type卸载掉了,再用dev_add_pack()在自己的处理函数中调用ip_recv()接受真包;
hook是提供的处理函数,其原型为:
unsigned int nf_hookfn(unsigned int hooknum,struct sk_buff **skb, const struct net_device *in, const struct net_device *out,int (*okfn)(struct sk_buff *));
输出的挂载和lkm的手法一样,更改dev->hard_start_xmit。
[2] [5]
| ^
| |
v |
local
从图中可以看到IPv4一共有5个钩子函数,分别为:
1 NF_IP_PRE_ROUTING
2 NF_IP_LOCAL_IN
NF_DROP 丢弃该数据报,不再传输
NF_STOLEN 模块接管该数据报,不要继续传输该数据报
NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理)
NF_REPEAT 再次调用该钩子函数
如果我们想加入自己的代码,便要用nf_register_hook函数,其函数原型为:
STEP 2. staticstructnf_hook_opsiplimitfilter={{NULL,NULL},sample,PF_INET,NF_IP_PRE_ROUTING,NF_IP_PRI_FILTER-1};
STEP 3. int init_module(void) { return nf_register_hook(&iplimitfilter); }
STEP 4. void cleanup_module(void) { nf_unregister_hook(&iplimitfilter); }
3、Linux 中钩子函数的分布(主要讨论IPV4):
etipv4Ip_input.c :
int ip_local_deliver(struct sk_buff *skb)
......
/*NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,newskb->dev, ip_dev_loopback_xmit);*/
......
}
int ip_queue_xmit(struct sk_buff *skb)
{
......
return NF_HOOK(PF_INET, NF_IP_POST_ROUTING, skb, NULL, dev,
ip_finish_output2);
}
int ip_mc_output(struct sk_buff *skb)
{
......
NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,newskb->dev,ip_dev_loopback_xmit);
相关文档
最新文档