Username: Password:

ipchains参数介绍
来源:作者: 发布时间:2007-12-05 06:22:10

 
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包是相同的)。  MASQ 告诉核心伪装此包,他只对forward 链和user defined链起作用,想让他起作用, 编译核心时必需让 IP Masquerading 起作用。  REDIRECT只对input链和user defined链起作用。他告诉核心把无论应送到何处的包改送到一个本地端口. 只有 TCP 和 UDP 协议能够使用此指定. 任意用 ‘-j REDIRECT‘ 指定一个端口(名字或编号)能够使送往此的包被重定向到某个特别的端口, 即使他被标记为送到其他端口。想让他起作用,编译内核时,必须让CONFIG_IP_TRANSPARENT_PROXY起作用。  最后的一个目标指定是 RETURN, 他跳过他下面的任何规则, 直到链的末尾。  任何其他的目标指定表示一个用户自定义的链。包将在那个链中通过. 假如那个链没有决定此包的命运, 那么在那个链中的传输就完成了,包将通过当前链的下一个规则。


参数说明:

-A :--append 在所选链的链尾加入一个或多个规则。有时一个单命令行能影响多个规则. 有两种做法. 第一, 假如您配置一个能解析为多个 IP 地址(使用 DNS)的主机名, ipchains 将如同您对多个地址都配置了命令相同发生作用。假如主机名‘www.foo.com‘解析为三个 IP 地址, 主机名‘www.bar.com‘解析为两个 IP 地址, 那么命令 ‘ipchains -A input -j reject -s www.bar.com -d www.foo.com‘ 将在 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‘ 或 ‘www.linuxhq.com‘。第二种方法是指定 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 及其类似的连接。作为一个特例, 一个结尾是‘+‘的接口将适合任何此类接口(无论他们是否工作)。例如:设定一个规则适合任何的 PPP 连接, 能够用 -i ppp+ 来指定接口。此参数忽略时,默认符合任何接口。接口能够使用否定符‘!‘来匹配不是指定接口来的包。

[!] -f, --fragment 此规则指定fragmented packets的第二个和以后的分块。因为这样的分块没有源和目标端口信息(或 ICMP 类型),所以他不匹配一些指定他的规则。能够在他前面使用‘!‘,来指定一个不适用于第二个及其后续的片段包的规则。

-b, --bidirectional 双向模式。这个标志使 ipchains 象您输入命令两次相同工作,第二次是把 ‘-s‘ 和 ‘-d‘ 参数颠倒。

-v, --verbose 周详输出。他显示出对于您的命令, ipchains 是怎样响应的. 假如您使用的命令能够影响多个规则, 他是很有用的。

-n, --numeric 数字化输出。IP地址和端口号将以数字格式显示。缺省显示主机名和网络名,和服务名。当DNS不起作用时,此参数及其有用。

-l, --log 对匹配包实行内核纪录,当配置此参数时,Linux内核将通过printk()对于任何匹配包打印一些信息。

-o, --output [maxsize] 拷贝匹配的包到用户空间设备。主要由研发者使用。要使用此参数,编译内核时必须配置 CONFIG_IP_FIREWALL_NETLINK Set。

-m, --mark markvalue 标志匹配的包。包被一个32位的无符号整数标志。假如您不是个内核黑客,您不必关心这些。假如标志值以 ‘+’ 或 ‘-‘开头,那么这个值将会从当前包的标志值加或减(初始值为0)。

-t, --TOS and xormask 用于改变IP头的TOS域。当包匹配规则,他的TOS域首先和第一个掩码逐位相和,结果再和第二个掩码逐位异或,掩码将会被指定为8位16进制数。TOS的最低有效位必须没有被改变。TOS域的四个位是最小延时“Minimum Delay“, 最大吞吐量“Maximum Throughput“, 最大可靠程度“Maximum Reliability“和最小费用“Minimum Cost“。最常用的是把 telnet 和 ftp 的控制连接设为最小延时和把 FTP 数据设为最大吞吐量. 这样做:

ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08

假如这些太难理解, 使用下表:

TOS Name Value Typical Uses

Minimum Delay 0x01 0x10 ftp, telnet Maximum Throughput 0x01 0x08 ftp-data Maximum Reliability 0x01 0x04 snmp Minimum Cost 0x01 0x02 nntp

-x, --exact 展开数字,包和字节计数器显示时使用后缀 ‘K‘, ‘M‘, ‘G‘ 来表示1000 1,000,000 和 1,000,000,000。不管数值多大, 使用 ‘-x‘ 标志能够完全显示他们。这个参数只能够在 ?L 后使用。

[!] ?y, --syn 仅仅匹配配置了SYN位,清除了ACK、FIN位的的TCP包。这些包被用来请求初始化的TCP连接,阻止从接口来的这样的包将会阻止外来的TCP连接请求。但输出的TCP连接请求将不受影响。这个参数仅仅当协议类型配置为TCP时才能使用。此参数前能够使用!标志匹配任何的非请求连接的包。

--line-numbers 在使用列表规则时,在每行开头加行号,表示规则在链中的位置。 --no-warnings 去掉任何的警告信息。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅