ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:47.36KB ,
资源ID:5444186      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5444186.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(IPFW中文手册.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

IPFW中文手册.docx

1、IPFW中文手册IPFW中文手册ipfw是FreeBSD下的一个用户界面,它用来控制ipfw防火墙和流量整形。ipfw的配置,也叫做规则集,它是由一系列的规则组成的,这些规则的编号是从1到65535。通过ipfw的数据包可以来自协议栈的许多各个的地方(这主要依赖于数据包的来源和目的,某些数据包很可多次经过防火墙)。数据包在通过防火墙的时候,要和防火墙规则集逐条对比。如果发现匹配的规则,则执行相应规则的动作。在特定的规则动作和系统设置下,数据包在匹配完一个规则后,可能在某些规则之后重新进入防火墙。一个ipfw规则集总是包含一个默认的规则(编号为65535),这个默认规则匹配所有的数据包,不能修改

2、或删除。根据内核配置的不同,这个默认规则或者是拒绝所以数据包通过,或者是允许所有数据包通过。如果规则集中存在一个或多个包含有keep-state(状态保持)或limit(限制)的规则,那么ipfw就表现为状态保持。例如:当这种规则匹配了一个数据包时,ipfw将创建一个动态规则,让后来的,同这个数据包的地址和端口参数严格一致的数据包,与这个动态规则相匹配。这些动态规则,都有一个有限的生存期。生存期在第一次遇到check-state、keep-state或者是limit规则时被检查。这些动态规则的典型应用,是用来保证合法的数据包在通过时开启防火墙。查看下面的“状态防火墙”和“示例”章节,获取更多关

3、于状态保持的信息。包括动态规则在内的所有规则,都有几个相关的计数器:一个包计数器,一个字节计数器,一个记录计数器和一个用来提示最后匹配时间的时间戳。这些计数器都可以被ipfw命令显示和清零。可以用add命令来添加规则;可以用delete命令来删除单个或一组规则;可以用flush命令来删除所有的规则(set 31除外);可以用show和list命令来显示包括计数器在内的信息。最后,计数器可以被zero和resetlog命令清零。并且,每个规则隶属于32个不同的规则集中的一个。有一些ipfw的命令可以独立地操作这些规则集,例如:启动、禁止、交换规则集;把一个规则集中的所有规则移动到另一个规则集;删

4、除一个规则集中的所有规则。这对于安装临时配置,或者是测试配置是非常有用的。查看“规则的规则集”一节,获取更多关于set的信息。 以下是ipfw命令可以利用的选项:-a使用 list 时,列出数据包的计数器,show命令包含这个选项。-b只显示动作和注释,不显示规则体。包含-c选项。-c进入或显示规则时,用紧凑格式输出。例如:在没有任何附加意义的情况下,不显示“ip from any to any”字符串。-d在list时,在显示静态规则的同时,显示动态规则。-e在list时,如果指定了-d选项,则显示过期的动态规则。-f对于有些会导致问题的命令,不要提出确认的询问。例如:flush命令。哪果一

5、个进程没有相关的tty,这个是默认被包含的选项。(译注:没看懂这句话的意思,好像是如果不是在tty中输入的命令,比如在scripts中,默认是有-f的。)-n只检查命令的语法,不真正执行命令。-N尝试在输出中,解析地址和服务名。-q 当新增 (add)、归零(zero)、重置日志(resetlog)或清除(flush) 时,不要显示任何回应信息(就像使用-f选项一样)。这对于在脚本里利用ipfw命令来调整防火墙规则(例如执行“sh /etc/rc.firewall”脚本)、或者是处理与一个远程登录相关的有多条ipfw命令的,是非常有用的。同时,它防止无意间,在规则中加入或删除一个列表而导致的错

6、误。(译注:没看懂,好像下面是一个例子。)在正常的模式,默认内核配置下,一个flush命令会输出一个信息。因为所有的规则都被清除掉,这个消息又不能传送到登录的进程中,脚本后面的规则将无法执行,所以将导致远程连接中断。这时,只好回到计算机前去工作了。-S 当列出一个规则的时候,显示每条规则的规则集号。如果没有指定这个标识,则被禁止的规则不再显示。-s field 当显示pipe时,按照四个计数器之一排序显示。(对于所有的数据包、当前数据包或者是字节数)-t 当列出时,显示最后匹配的时间戳。(显示用ctime()转化后的时间)-T 当列出时,显示最后匹配的时间戳。(从新纪元到现在的秒数)。这个格式

7、更容易被脚本处理。为了使配置更容易,规则可以写到一个文件里供ipfw处理,语法规则参照大纲栏最后一行(译注:指本文最前面的语法部分最后一行,即:“ipfw -cfnNqS -p preproc preproc-flags pathname”)。注意必须是绝对路径。这个文件会被逐行读取并且将作为ipfw工具的参数处理。 作为选择,你还可以使用-p preproc参数来使用预处理程序,其中路径是用管道来传入的。可以使用的预处理程序包括cpp和m4。如果preproc不是以/开头,那么将搜索PATH里的路径。在使用它的时候,要谨慎,因为在很多时候,ipfw启动时,系统文件可能没有挂接(比如:文件系统

8、是通过NFS挂接的)。一旦使用了 -p参数,所有其它的参数,都被传送到预处理程序去等待处理。ipfw的pipe和queue命令用来配置流量整形,你可以下面的“TRAFFIC SHAPER (DUMMYNET) CONFIGURATION”节看到看到相关内容。如果系统的world和内核不能保持一致,ipfw的ABI将失效,以防你加入任何规则。这样能保证你的顺利地完成启动过程。你可以利用ipfw临时禁止的机会登录你的网络,来修复你的问题。PACKET FLOW(数据包流程)一个数据包在几个内核变量的控制下,在协议栈的多个地方被防火墙检查。这些地方和变量如下图所示,要在头脑中保持下图,它对于规划一下

9、正确的规则集是非常重要的。 到上层 V | | +-+ V ip(6)_input ip(6)_output net.inet(6).ip(6).fw.enable=1 | | V ether_demux ether_output_frame net.link.ether.ipfw=1 | | +-bdg_forward-+ net.link.bridge.ipfw=1 V | 到设备 |如图所示,根据数据包的源和目的,以及系统配置的不同,同一个数据包穿过防火墙的次数在0和4之间变化。需要注意的是,在包通过不同栈的时候,头会被加上或剥离,可能会导致这些包被检查不到。例如:当ipfw被ether

10、_demux()调用的时候,进入的包将包括MAC头;而当ipfw被ip_input()或者ip6_input()调用的时候,同一个数据包的MAC头将被剥离。还需要注意的是:不论检查发生在什么地方,也不论数据包源自哪里,每个数据包也整个规则进行对照。(译注:是整个规则集吗?有时候只对照一部分的时候就中止检查)。如果一个规则包含的一些匹配模型或动作不符合某处的要求(比如:在ip_input或ip6_input处匹配MAC头),那么匹配模型将不会被匹配。然而,带有not前缀操作符的匹配模型,总是可以和这些数据包相匹配。所以,如果有必要,在有很多地方可以选择的时候,有能力的程序员可以为写出的规则集选择

11、一个合适的位置。skipto规则在这儿是非常有用的。例如: # packets from ether_demux or bdg_forward ipfw add 10 skipto 1000 all from any to any layer2 in # packets from ip_input ipfw add 10 skipto 2000 all from any to any not layer2 in # packets from ip_output ipfw add 10 skipto 3000 all from any to any not layer2 out # packet

12、s from ether_output_frame ipfw add 10 skipto 4000 all from any to any layer2 out (对,在这儿,没有办法区别ether_demux和bdg_forward)SYNTAX(语法规则)通常,每个关键字或者参数都是作为独立的命令行参数来提供的,前后都不能有空格。关键字是区分大小写的,而参数按照它们本身的含义,可以是,也可以不是区分大小写的。(例如,udi要区分大小写,而hostname没有必要区分大小写)在ipfw2中,为了提高可读性,可以在逗号后面加上一个空格。当然,你也可以把整个命令(包括参数)当作一个参数来处理(译

13、注:就是加上双引号,作为一个字符串放到某个命令中)。例如,以下几种格式效果相同: ipfw -q add deny src-ip 10.0.0.0/24,127.0.0.1/8 ipfw -q add deny src-ip 10.0.0.0/24, 127.0.0.1/8 (译注:127前面有个空格)RULE FORMAT(规则格式)ipfw的规则格式如下: rule_number set set_number prob match_probability action log logamount number altq queue tag | untag number body规则的 bo

14、dy 部分用来设定包过滤的信息,具体细节如下: Layer-2 header fields 第二层头段,什么时候可用 IPv4 and IPv6 Protocol TCP, UDP, ICMP, 协议等 Source and dest. addresses and ports 源和目的。地址和端口 Direction 数据包的流向,见“流量整形”一节 Transmit and receive interface 传输和接收界面,用名字或地址表示 Misc. IP header fields 组合IP头字段,包括版本、服务类型、报文长度、唯一标识、分段标志、生存期 IP options IP选项

15、字段 IPv6 Extension headers IPv6扩展头,包括分片报头、中继选项报头、路由报头、路路由选择报头、IP层安全服务选项、Source routing rthdr0, Mobile IPv6 rthdr2(译注:最后两项不知道怎么翻译) IPv6 Flow-IDIPv6的流量标识 Misc. TCP header fields 组合tcp头字段,有TCP标志(syn,fin,ack,rst等)、序列号、回复号,窗口等。 TCP optionsTCP的选项 ICMP types ICMP包 ICMP6 types ICMP6包 User/group ID 本地栈所归属的用户和

16、组 Divert status 是不是源自一个divert接口(例如:natd(8)需要注意,上面的很多信息中,比如源MAC和IP地址、TCP/UDP端口等,是比较容易伪造的,所以只对这些信息进行过滤不能保证达到预期的效果。 rule_number每个规则都有规则号,规则号从165535。65535是保留的默认规则。ipfw将按规则号的顺序依次检查这些规则。可以有多个规则用同一个规则号,在这种情况下,将按照它们的添加顺序依次检查或列出。如果一个规则没有指定规则号,内核将自动赋于一个规则号,使它成为默认规则前的最后一个规则(即小于65535)。自动添加的规则号有个步进值,在不大于65535的情况

17、下,每次添加规则时,都自动加上这一步进值。它默认是100,对应于net.inet.ip.fw.autoinc_step这个内核变量。 set set_number每个规则都对应于一个规则集编号,规则集编号取值为:031。规则集可以单独地被禁止或启用,所以,它对于规则集的原子操作是至关重要的。它还可以轻松地删除掉一组规则。如果一个规则没有指定规则集编号,它默认的规则集编号就是0。规则集编号31是个特殊的规则集,它不能被禁止,也不能用ipfw的flush命令删除,它是默认规则的规则集。规则集编号31可以用ipfw delete set 31命令删除。(译注:这在远程调试排斥式防火墙时特别有用,防止

18、把自己锁在外面。)prob match_probability这个语句只用来指定可能性(从0到1之间浮点值)。这在很多随机丢包的应用中,或者(在同dummynet联用的情况下)模拟多路径条件下无序包传递的效果中,是非常有用的。注意:在检查时,这个条件比其它所有条件都先被检查,包括会有副作用的keep-state或者check-state。log logamount number当一个包匹配到一个有log关键字的规则时,一条消息会被syslogd记录到一个LOG_SECURITY设备中。记录动作只会在同时满足下面两个条件时才发生:1、内核选项net.inet.ip.fw.verbose等于1(当

19、编译内核时带着IPFIREWALL_VERBOSE参数时,这是默认值);2、所记录的包数量还达不到logamount number所指定的数量。如果没有指定logamuont,则记录的包的上限受内核变量net.inet.ip.fw.verbose_limit的限制。在这两种情况中,logamount取值为零时,则取消记录数量的限制。当记录数量达到上限时,可以通过重置记录计数器或包计数器的方式再重新开始记录。详细情况请查看resetlog命令。 注意:记录的时间是在所有的包检测条件都完成之后,并且在采取相应的动作(接受、拒绝等)之前。tag number当一个包和一个带有tag关键字的规则相匹配

20、时,一个指定的数字标签就被附加到这个包上,数字标签的范围是1-65534。这个标签作为一个内部的记号(它不会从线路上发送出去),以便后来可以区分这些数据包。这有时候非常有用,比如:提供接口之间相互信任和开启一个基于安全的过滤。一个包可以同时有多个标签。标签是“顽固的”,意思就是只要标签被应用到某个数据包上,那么它就一直存在,直到被明确地解除为止。这个标签在内核中一直存在,但是一旦数据包离开内核,标签就会消失。例如:在当把数据包发送到网络或者发送到divert栈时,标签就会消失。要检查已经存在的标签,可以用tagged规则选项,要删除存在的标签,用untag关键字。注意:既然标签是在内核空间内一

21、直存在的,所以它们就可以被内核的网络子系统(使用mbuf_tags设备)设置或者是取消,而不仅仅依靠ipfw的tag和untag关键字。例如:可以存在一个netgraph(4)节点做流量分析,并且给数据包打上标签,以供后面的防火墙进行检查。 untag number当一个数据包匹配一个带有untag关键字的规则时,将在这个数据包所附加的标签中查找untag number所指定的标签号,如果找到,则将其删除。对于数据包上的其它标签号,则原封不动。 altq queue(译注:交错队列, Alternate Queuing,参见PF文档)当一个数据包匹配了一个带有altq关键字的规则时,将被附加上

22、一个指定队列(见altq(4))的ALTQ标识符。注意,ALTQ标签只适用于从ipfw“向外出”的数据包,而不是被防火墙拒绝或者准备到divert界面的数据包。还要注意的是,当处理数据包的时候,如果没有足够内存,那么数据包将不会被打上标签,所以,一个明智的做法,是使你的“默认”ALTQ队列规则记录下这种情况。如果有多个altq规则匹配于同一个数据包,那么只加上第一条规则的ALTQ类别标签。那样做的效果是:在规则集中靠前的altq队列规则能起到流量整形的作用,而靠后的规则只达到过滤的效果。例如:把还有ALTQ标签的、check-state和keep-state规则放到规则集的后部,有提供真正的包

23、过滤的作用。在IPFW使用altq的名字来检查队列之前,你必须用pfctl(8)工具来设置队列。一旦重置ALTQ命令,那么包含队列标识符的规则将过期,需要被重新读取才能生效。过期的队列标识符将会产生错误的分类。所有的ALTQ系统进程都可以被ipfw的enable altq和disable altq命令启用或关闭。ALTQ流量整形有真实规则动作,永远附加在ALTQ标签之后,和net.inet.ip.fw.one_pass毫无关系。 RULE ACTIONS(规则动作)一个规则可以和下面动作中的一个或多个相关联,如果数据包匹配了规则体,那么这些动作将被执行。 allow | accept | pa

24、ss | permit 允许匹配规则的数据包通过,规则搜索中止。 check-state将数据包和动态规则集里的规则进行对照。如果找到,则执行产生这条动态规则的那个规则相关联的动作,如果没找到,则进行下一条规则。check- state没有规则体。如果在规则集里没有找到check-state,则在第一次出现keep-state或者limit规则时,检查动态规则集。 count 更新和本条规则相匹配的所有数据包的计数器。继续进行下一条搜索。 deny | drop 抛弃和本条规则相匹配的数据包。搜索中止。 divert port 把和本条规则相匹配的数据包转向到divert(4)栈所绑定的端口。

25、搜索中止。fwd | forward ipaddr | tablearg,port修改匹配数据包的下一跳地址,有可能是一个IP地址,也有可能是一个主机名。当使用tablearg关键字时,下一跳地址可以不是一个明确的地址,它可以从最后的数据包检查表中获取。如果匹配本规则,搜索中止。(译注:tablearg是FreeBSD7.0的ipfw新增功能,它可以使查表的结果作为规则的一部分来使用,可以用来优化一些规则集,或实现基于策略的路由,在使用时,要配合table命令使用。)如果指定的ipaddr是一个本地地址,所匹配数据包将被传递到本地机器的相应端口(如果在规则中没有指定端口,则是数据包中的端口号)

26、。如果ipaddr不是一个本地地址,那么端口号(如果指定的话)将被忽略,数据包将会根据本机的路由表被转发到远程地址。一个fwd规则不会和一个二层的数据包(用ether_input,ether_output或者bridged接受)相匹配。fwd不会修改数据包中的任何数据,特别是目的地址。所以,除非在目的系统中有相应的规则接受这些数据包,否则,被转发到目的系统的数据包将被拒绝。对于被转发到本地的数据包,将把本地地址作为它的原始目的地址。这将使netstat(1)看起来有些古怪,但是,对于透明代理服务器来说,却是有用的。要使用fwd,必须在内核中使用IPFIREWALL_FORWARD选项,并重新编

27、译内核。 nat nat_nr Pass packet to a nat instance (for network address translation, address redirect, etc.): see the NETWORK ADDRESS TRANSLATION (NAT) Section for further information.将数据包传送到一个nat界面(用来做地址转换或地址重定向等):详细信息,请查看NETWORK ADDRESS TRANSLATION (NAT)一节。 pipe pipe_nr将数据包传送到一个dummynet(4)的“管道”(用来实现流量整

28、形,延迟等)。详细信息请查看TRAFFIC SHAPER (DUMMYNET) CONFIGURATION一节。如果匹配,则搜索中止。但是,在离开管道的时候,并且内核变量net.inet.ip.fw.one_pass没有设置,数据包将被送回到防火墙的下一条规则。 queue queue_nr 将数据包传送到一个dummynet(4)的“队列”(用WF2Q+实现流量整形) reject (Deprecated).不可到达的同义词。 reset 丢掉和本规则相匹配的数据包,如果是一个TCP数据包,则发送一个重置(RST)消息。搜索中止。 reset6 丢掉和本规则相匹配的数据包,如果是一个TCP数

29、据包,则发送一个重置(RST)消息。搜索中止。 skipto number跳到指定的规则,忽略掉比指定规则号小的规则。搜索从指定的规则号继续。 tee port将相匹配的数据包复制一份到divert(4)所绑定的端口。搜索继续。 unreach code丢弃和本规则相匹配的包,并且尝试发送一条编号为指定编号的不可到达的ICMP消息。编号范围是0255,或者使用下列别名之一:net, host, protocol, port, needfrag, srcfail, net-unknown,host-unknown, isolated,net-prohib, host-prohib, tosnet

30、, toshost, filter-prohib,host-precedence orprecedence-cutoff。搜索中止。 unreach6 code丢弃和本规则相匹配的包,并且尝试发送一条编号为指定编号的不可到达的ICMPv6消息。编号为0,1,3,4或者是下列别名之一:no-route, admin-prohib, address or port。搜索中止。 netgraph cookie使用指定的cookie把数据包转向到netgraph。搜索中止。如果稍后数据包众netgraph返回,则受内核变量net.inet.ip.fw.one_pass的影响,或者被接受,或者从下一条规

31、则继续。 ngtee cookie将数据包复制一份,转发到netgraph,原始的数据包则受net.inet.ip.fw.one_pass的影响,或者被接受,或者从下一条规则继续。查看ng_ipfw(4)可以获取更多关于netgraph和ngtee动作的信息。RULE BODY(规则体)规则体包括零个或多个匹配模式(比如指定源和目的的地址或端口,协议选项,进入和流出的界面等。),这些匹配模式必须按顺序对数据包进行识别。通常,匹配模式之间用一个隐含的“和”操作连接,比如:所有规则中的模型都必须去和数据包进行匹配。单个的模型可以使用“not”操作符作为前缀,用来表示相反的匹配结果,就象在下例中:ipfw add 100 allow ip from not 1.2.3.4 to any特别的,当用来表示二选一的“或”模型时,可以使用一对小括号“()”或一对大括号“”括起来的“or”操作符,比如:ipfw add 100 allow ip from x or not y

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1