ipfw规则( 三 )


ipfw add 100 allow ip from { x or not y or z } to any
只有扩号内一种模式被允许 。要小心,有一些内核对扩号有特殊的含义,所以明智的办法就是放一个斜杠“”在他们前面来杜绝这种情况 。
一个规则的躯干通常必须有来源和目的地址,关键字"any"可用在不同的地方标示,满足的条件是任意的 。
规则的躯干有下列格式:
[proto from src to dst] [options]
第一部分(protocol from src(源) to dst(目的))是用ipfw1兼容的 。在ipfw2,任何匹配模式(包括MAC地址,IPv4 protocols,,地址和端口)可以在选项部分被指定 。
规则部分有以下含义:
proto: protocol | { protocol or ... }
一个IPv4 协议(或一个,或多个)由号码或名字指定(察看/etc/protocols) 。ip或所有的关键字意味着将匹配所有的协议 。
src and dst: ip-address | { ip-address or ... } [ports]
一个单独的ip地址,一个或包含多个的,由端口设置决定他们的走向 。
ip-address:
一个指定的地址(或地址设置)在下列方法的其中一个里由非操作项控制 。
any 匹配任何ip 。
me 匹配系统接口的任何ip 。在数据包被分析的时候,会查询ip列表的 。
numeric-ip | hostname
匹配一个单独的ip地址或主机名,主机名也可以添加防火墙列表的 。
addr/masklen
匹配所有的ip地址或主机名(带掩玛的ip段)例如,1.2.3.4/25,将匹配所有的ip从1.2.3.0到1.2.3.127 。
addr/masklen{num,num,...}
还有一种如下例:1.2.3.4/24{128,35,55,89},此规则则匹配以下ip地址:
1.2.3.128 1.2.3.35 1.2.3.55 1.2.3.89 .
这种格式是特殊用于处理单独规则里面少量的地址 。
ports: [not] {port | port-port} [,...]
支持端口号的协议(例如:TCP and UDP),随意的端口号可以被指定,一个,多个,胡哦这是一个范围,用“,”隔开(不能有空格),并且一个随意的没有具体的项 。“-”符号指定带边界的范围 。
服务器(from /etc/services)的名字可以用数字的端口值代替 。端口的长度被限制到30,或一个范围内,尽管这个范围在规则里很大 。
""可以劈开用"-"在shell里的冲突(有的服务器有自己的定义) 。
ipfw add count tcp from any ftp-data-ftp to any
一个非零的包的碎片(也就是不是第一段的)将不匹配规则规则 。看关于碎片设置的详细资料 。
RULE OPTIONS (匹配模式)
附加的匹配模式可以被用在规则里面 。0或者其他所谓的设置都可以出现在规则里,前置由非操作数和可能的区域里的组决定 。
以下匹配模式可以使用:
bridged
指匹配过渡的数据包 。
dst-ip ip address
匹配ip包,看谁的目的地址是清单里的其中一个 。
dst-port source ports
匹配ip包,看谁的目的端口是清单里的其中一个 。
established
匹配那些有RST or ACK bits设置的TCP包 。
frag 匹配那些片断或者不是第一段的ip数据包,注意,这些包不具备下一个协议头(e.g. TCP, UDP),所以这些玄想不能被匹配 。
gid group
匹配所有被组(组可以是指定的名字或数字)承认的TCP or UDP包 。
icmptypes types
匹配所有的列在ICMP类表里的ICMP包 。列表可以是一个指定的范围,或者是逗号隔开的个别类型 。这里支持的ICMP类型有:
echo reply (0), destination unreachable (3), source quench (4),
redirect (5), echo request (8) , router advertisement (9), router
solicitation (10), time-to-live exceeded (11), IP header bad
(12), timestamp request (13), timestamp reply (14), information
request (15), information reply (16), address mask request (17)
and address mask reply (18) .
in | out
分别的匹配进出的包,进和出是互斥的(实际上,出就是执行不进) 。
ipid id
匹配IP包里的Id值 。
iplen len

推荐阅读