Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2088777
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 18:27:34


  Ipchains被用来安装、维护、检查Linux内核的规则。规则可以分成四类:IP input链、IP output链、IP forward链、user defined链。
  
  一个规则指定包的格式和目标。当一个包进来时,核心使用input链来决定它的命运。如果它通过了,那么核心将决定下一步包该发往何处(这一步叫)。假如它是送往另一台机器的,核心就运用forward链。如果不匹配,进入目标值所指定的下一条链,那有可能是一条user defined链,或者是一个特定值:ACCEPT,DENY,REJECT,MASQ,REDIRECT,RETURN。
  
  ACCEPT意味着允许包通过,DENY 扔掉包就象没有收到过一样,REJECT也把包扔掉,但(假如它不是ICMP包)产生一个ICMP回复来告诉发包者,目的地址无法到达(请注意DENY和REJECT对于ICMP包是一样的)。
  
  (中科红旗 2001年08月17日 10:29)
  
  MASQ告诉核心伪装此包,它只对forward链和user defined链起作用,想让它起作用,编译核心时必需让IP Masquerading起作用。
  
  REDIRECT只对input链和user defined链起作用。它告诉核心把无论应送到何处的包改送到一个本地端口。只有TCP和UDP可以使用此指定。任意用“-j REDIRECT”指定一个端口(名字或编号)可以使送往此的包被重定向到某个特殊的端口,即使它被标记为送到其它端口。想让它起作用,编译内核时,必须让CONFIG_IP_TRANSPARENT_PROXY起作用。
  
  最后的一个目标指定是RETURN,它跳过它下面的所有规则,直到链的末尾。
  
  任何其它的目标指定表示一个用户自定义的链。包将在那个链中通过,假如那个链没有决定此包的命运,那么在那个链中的传输就完成了,包将通过当前链的下一个规则。
  
  参数说明
  
  
  -A :--append
  
  在所选链的链尾加入一个或多个规则。有时一个单命令行能影响多个规则,有两种做法:第一,假如你设置一个能解析为多个IP地址(使用 DNS)的主机名,ipchains将如同你对多个地址都设置了命令一样发生作用。假如主机名“”解析为三个IP地址,主机名“”解析为两个IP地址,那么命令“ipchains -A input -j reject -s -d ”将在input链中追加6条规则。-D(-I,-R)的语法与-A完全相同。当在一个链中有多个相同的规则时,只有第一个被删除。
  
  -D,--delete
  
  从所选链中删除一或多条规则。我们可以用两钟方法中的任何一钟删除此规则。首先如果我们知道它是链中的唯一规则,我们可以使用编号删除,输入:
  
  # ipchains -D input 1
  
  来删除进入链的编号1规则。第二条路是-A命令的镜象,但是用-D代替-A. 当你不愿意去数繁多的规则时,这是一个有用的方法。这种情况下,我们使用:
  
  # ipchains -D input -s 127.0.0.1 -p icmp -j DENY
  
  -R,--replace
  
  在所选链中替换一条规则,如果源和目标目标名解析到多个地址,命令将失败。
  
  -I,--insert
  
  以给出的规则号在所选链中插入一条或多条规则。如果规则号是1,插入的规则在链的头部。
  
  -L,--list
  
  列出指定链的所有规则。如果没有指定链,将列出所有链的规则。-L有三个可选项:“-n”(数值)项非常有用,它阻止 ipchains 去查找IP地址,假如你的DNS没有正确设置,或你已经过滤掉了 DNS 请求,这将造成很大延时。它还会导致端口用数字而不是名字被显示出来。“-v”选项显示规则的所有详细信息,如包和字节计数器,TOS掩码,接口,和包标记,用其它的方法这些项都会被忽略。
  
  -F,--flush
  
  使用“-F”命令可以清除一个链中的所有规则。
  
  # ipchains -F forward
  
  假如你不指定链,那么所有链都将被清空。
  
  -Z,--zero
  
  重置计数器。但有时你想在重置计数器前知道它们的值。你可以同时使用“-L”和“-Z”命令,读计数器的同时重置它们。不幸的是,假如你这样做,你不能只操作一个链,你不得不列表和清零所有的链。
  
  -N,--new-chain
  
  以给定的名字创建一条新的user defined链。不能与已有链同名。
  
  -X,--delete-chain
  
  删除链必须满足两个条件:它们是空的,并且不是任何规则的目标. 但你不能删除3个内置链中的任何一个。
  
  -P,--policy
  
  改变内置链政策。
  
  -M,--masquerading
  
  允许观察当前IP伪装的连接(与-L一起)。或者设置内核IP 伪装的参数(与 -S 一起)。
  
  -S,--set tcp tcpfin udp
  
  设置伪装的超时值,“-S” 后跟三个以秒表示的超时值: TCP sessions,FIN 包到后的TCP sessions,和对于UDP包的。假如你不想改变这些值,给个“0”值即可。
  
  默认值在“/usr/include/net/ip_masp.h”文件中,目前分别是15分,2分和5分。仅允许和“-M”一起使用。
  
  -C,-- check
  
  有时你想知道一个确定的包进入机器后会发生什么事情,比如调试防火链时。ipchains的“-C”命令提供与核心检查真实包完全相同的程序来让你做这件事。
  
  你可以指定让哪个链来检测包,把链的名字放在“-C”参数后即可。鉴于核心总是从input,output或forward链开始,特许你从需要的链开始。
  
  包的细节用与设置防火墙规则相同的语法设定。 在个别时,包的(“-p”),源地址(“-s”),目的地址(“-d”),和接口(“-i”)必须有。假如是TCP或UDP,那么必须指定一个源地址和一个目的端口,对于ICMP协议必须指定类型和代码。(除非使用了“-f”标志指定了一个片段规则,在那种情况下这些选项是不合法的)。
  
  假如协议是TCP(并且没有“-f”标志),可以使用“-y”标志设置包的SYN位。
  
  这有一个例子,一个TCP SYN包,它从192.168.1.1端口60000到192.168.1.2 www端口,进入eth0接口,进入“input”链。(这是一个与WWW建立连接的典型例子)
  
  # ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
  packet accepted
  #
  
  -h,--help
  
  帮助。
  
  -p,--protocol[!] protocol
  
  用“-p”来指定协议。协议可以用编号(假如你知道 IP 的数字化协议值)或名字“TCP”,“UDP”,“ICMP”,“ALL”(0等价与ALL),大小写无关,“tcp”与“TCP”一样。协议名前面可以加前缀“!”,来否定它,比如:“-p ! TCP”。
  
  -s,--source [!] address[/mask] [!][port[:port]]
  
  有四种方法指定源头(-s)和目的(-d) IP 地址。最常用的方法是使用全称,比如“localhost”或“”。第二种方法是指定 IP 地址,如“127.0.0.1”。第三种和第四种方法是指定 IP 地址集,比如“199.95.207.0/24”“199.95.207.0/255.255.255.0”。这两种方式都指定了从192.95.207.0到192.95.207.255的所有IP地址;“/”后的数字表示 IP 地址的哪部分(或“位”)被指定。默认是“/32”或“255.255.255.255”(与所有IP地址匹配)。完全指定所有IP地址用“/0”。对于特殊的TCP和UDP协议,还有额外的参数可以指定,即它们的端口号或端口的范围。范围用“:”表示,比如“6000:6010”,它包含从6000到6010的11个端口,如果没有下限,默认是0。如果没有上限,默认是65535。 所以指定1024以下端口来的 TCP 连接,表示为“-p TCP -s 0.0.0.0/0 :1023”。端口号也可以用名字指定,如“WWW”。端口指定也可以用“!”参数来否定它。ICMP也可以有参数,但是它没有端口(ICMP 有类型和代码),它们有不同的含义。可以在“-s”参数后放它们的 ICMP 名字来指定(使用 ipchains -h icmp 来列出这些名字)。或使用 ICMP 类型和代码的数字编号。类型跟在“-s”后。代码跟在“-d”后。ICMP名相当长:你只需输入足够长的字母能区分它们即可。
  
  注意:目前,ICMP 名的前面不能用“!”。等价于--src。
  
  --source-port [!] [port[:port]]
  
  用来分开源端口范围,等价与-sport。
  
  -d,--destination [!] address[/mask] [!] [port[:port]]
  
  指定目标,用法与-s相同。等价于-dst。
  
  --destination-port [!] [port[:port]]
  
  指定目标端口范围,等价于-dport。
  
  --icmp-type [!] typename
  
  允许指定icmp类型(使用 -h icmp 看有效的icmp类型名)。可以方便的在指定目标的后面使用。
  
  -j,--jump target
  
  指向规则的目标,例如,包匹配规则后怎么办。目标可以是一个user defined 链(非本规则所在链),也可以是一个可以立即决定包命运的特定的目标。最简单的情况是不指定目标。这种类型的规则(通常叫记数规则)常用来做某种类型包的简单记数。无论规则匹配与否,核心将继续检查此链中的下一个的规则。但规则计数器将增加。
  
  -i,--interface [!] name
  
  用“-i”参数指定接口名字。接口是包进进出出的物理设备。用于包进入(包通过进入链 )的接口被认为是进入接口,同样地,用于包外出(包通过外出链)的接口被认为是外出接口。用于包中转的接口也被认为是外出接口。
  
  指定一个目前不存在的接口是完全合法的。规则直到此接口工作时才起作用,这种指定是非常有用,对于PPP及其类似的连接。作为一个特例,一个结尾是“+”的接口将适合
【责编:admin】

--------------------next---------------------

阅读(266) | 评论(0) | 转发(0) |
0

上一篇:用好Linux的启动盘

下一篇:剖析NUTCH爬虫

给主人留下些什么吧!~~