一系列的标志,分为两个串,第一个串表示哪些标志是要检查的;第二个串表示哪些标志是1(其他则为0)。
例如:
# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY
表示ALL(SYN,ACK,FIN,RST,URG,PSH’)的标志都要被检查,但是只有设置了SYN和ACK的才匹配。
--syn
等同于--tcp-flags SYN,RST,ACK SYN(100)
--source-port或者 --sport
描述源端口,要么用数字,用么用/etc/services文件中的名字。可以用m:n来表示一组端口。
--destination-port 或者 –dport
描述目的端口
--tcp-option
检查一个包是否有相应的tcp选项,如果没有的话,包将被drop掉。
l TCP标记的一个解释
有时候只允许一个单向的TCP连接。例如,你只需要访问外部的WWW的服务器,而不允许外部访问你内部的WWW服务器。朴素的方法是阻塞所有从你的服务器发出的包,但是TCP连接需要一个双向的交流。解决的方法是只需要阻塞请求连接的包。这些包叫做SYN包。通过阻塞这些包,我们可以达到上面的目的。
标志—syn将被使用。他仅仅适用于TCP协议。例如:
-p TCP -s 192.168.1.1 --syn
这条规则描述所有从192.168.1.1发起的连接。
l UDP扩展
如果-u udp 被描述,所有扩展自动装载。他提供与TCP类似的选项--source-port, --sport, --destination-port, --dport。
l ICMP扩展
如果选项-p icmp被描述,所有的扩展自动装载。他只提供一个选项:
--icmp-type
看名字就知道是指类型,具体的名字参看-p icmp –help提供的帮助信息。
l 其他匹配扩展
这些选项可以用-m来启动。
Mac
这个模块可以用-m mac或者--match mac来启动。用于匹配输入包的MAC地址,因此之用于PREROUTING and INPUT chains。他只提供一个选项:--mac-source
例如:--mac-source 00:60:08:91:CC:B7
limit
可以用-m limit或者--match limit来启动。用于限制机器,如压缩log信息等等。
Owner
只用于output chain中,并且有些包没有owner(如icmp包),因而没有匹配。
--uid-owner userid包的产生进程的有效用户id等于userid
--uid-owner groupid包的产生进程的有效组id等于groupid
--pid-owner processid 包的产生进程的进程的id等于processid
--sid-owner sessionid 包的产生进程的session id 等于sessionid
unclean
提供随机的安全检查
l 状态匹配
最有用的匹配规则是由状态扩展来提供的。因此推荐用模块ip_conntrack。描述-m state允许一个附加的—state选项。是一个逗号分开的状态列表,这些状态有:
NEW
包建立了一个新的连接
ESTABLISHED
包属于一个已经存在地连接
RELATED
一个包与某个连接有关,但是不属于这个连接。
INVALID
包无法定义,通常这些包会被drop
11.目标描述
现在我们已经知道了怎么检查包,下一步就是决定对匹配的包做什么动作。这一步叫做规则的目标。
两种基本的目标是DROP和ACCEPT。我们已经很清楚了。
但是还有的目标:扩展、用户定义的chains。
用户定义的chains
iptables从ipchains继承的一个重要的特性就是用户可以自定义新的chains(除了3个内建的INPUT, FORWARD和OUTPUT)。
当一个包在用户定义的chain中进行规则匹配时,将遍历chain中的所有规则。直到找到匹配。
下面考虑两个2个chain:INPUT(内建)、test(用户定义)。
`INPUT’ `test’
--------------------------------------------------------
| Rule1: -p ICMP -j DROP || Rule1: -s 192.168.1.1|
|--------------------------||--------------------------|
| Rule2: -p TCP -j test|| Rule2: -d 192.168.1.1|
|--------------------------|----------------------------
| Rule3: -p UDP -j DROP|
----------------------------
假设一个包来自192.168.1.1,其目的地址是1.2.3.4。他首先进入INPUT chain,规则1不匹配。规则2匹配并且其目标是test,因此下一个检查的规则是test的第一个规则。规则1匹配,但是没有描述目标,因此规则2被检查。规则2不匹配,到达chain的末尾。于是返回INPUT chain,这里我们已经检查过规则2,于是检查规则3,不匹配。因此包的检查路径是:
v__________________________
`INPUT’| /`test’v
------------------------|--/-----------------------|----
| Rule1 | /|| Rule1| |
|-----------------------|/-||----------------------|---|
| Rule2 /|| Rule2| |
|--------------------------|-----------------------v----
| Rule3 /-- ___________________________/
------------------------|---
v
用户定义的chains也可以把目标设为用户定义的chains。但是不要形成环。
Iptables的扩展:新的目标
新的目标包括一个内核模块和一个可选的扩展选项(新的命令选项)。在netfilter的发行版本中有下面的几个扩展:
LOG
这个模块使得内核可以记录匹配的包的日志。
上一页12 下一页
www.itfly.org