规则(Rules)
iptables的每一条规则(rule),都是由两部分组成的,第一部分包含一或多个「过滤条件」其作用是检查包是否符合处理条件(任何条件都必须成立才算数) ;第而部分称为「目标」,用於決定如何处置符合条件的包。
对於每一条规则,iptables各维护两个计数器:一个计算符合条件的封包数,称为packet counter;另一个计算该规则所处理的总资料量,称为byte counter。每当有包符合特定规则的过滤条件,该规则的packet counter便会被累加一,並将该包的大小累加到该规则的byte counter。
规则能够只有「过滤条件」或「目标」(处置方式) 的其中之一;沒指定过滤条件时,则任何包都算符合条件;沒指定处置方式时,则放任让包继续其流程,也就是說。包本身不会有任何改变,只有该规则的两个 counters会累增而已。使用下列命令可将这种只有计数作用的空规则加入filter表格FORWARD链结:
iptables -t filter -A FORWARD
过滤条件(Matches)
iptables 可让您配置多种过滤条件,但是某些条件需要核心有提供相关功能才行。Iptables本身內建一般性的Internet Protocol (IP) 过滤条件,也就是說,实时沒载入任何扩充模组,您也能够用IP包标头的「传输协定类型」、「来源位址」、「目的地位址」等栏位为过滤条件。关於一般性的 IP过滤条件,请参閱《IPv4过滤条件》。
除了IP之外的其他协定,诸如ICMP、TCP、UDP等等,必须载入相关的扩充模组,才能够作为过滤条件。使用iptables的-m或- -match选项,指出载入特定协定的扩充模组。
任何关于过滤条件的扩充模组,几乎都上针对网络层(IP、ICMP)或传输层(TCP、UDP),唯一例外上mac模组,他能让您以Ethernet网卡的 MediaAccessController(MAC)位址为过滤条件【注解:Ethernet属于网络层之下的「资料连结层」(OSI Model)或「实体层」(IP Model)】。
目标(Target)
目标「(targets)决定如何处理符合过滤条件的包,或是当成链结的政策。iptables共内建四种目标(参阅《表8》),除此之外的其他目标,必须透过扩充模组来提供。
表8:iptables内建的目标

应用
本节简述各种包处理技术的观念,连同他们的应用。
包过滤(Packet filtering)
「包过滤」是最基本的封包处理方式:于核心网络程式的各交接点检查包內容,籍此决定包的后续处理流程(放行到下一阶段、不回复而逕行放弃、回复拒收讯息,诸如此类)。
累计(Accounting)
「累计」:使用各种包过滤条件的byte/package counter来监测网络交通量。
连線追蹤(Connection tracking)
「连線追蹤」:提供可用於判断包相关性的额外资讯。举例来說,一次FTP session同时需要两条分离的连線,控制和资料传输各一;用於追蹤FTP连線的扩充模组,运用对於FTP恊定的认知,从控制连線上流动的封包资料中,分析出足以便识资料连線的资讯(於何时建立、双方所用的TCP port),然后将查出的资讯提供给处理包的规则。
封包修改(Packet mangling)
「包修改」:修改包的标头栏位(通常是网路位址和通讯埠编号),或是其承载资料。
网址转译 (Network address translation,NAT)
NAT 是一种涉及修改来源位址,目的地位址、来源端口、目的地端口之特别「包修改」。对於只修改来源位址/通讯端口的操作,称为「Source NAT」(或简称为S-NAT或SN AT);若只修改目的地位址/通讯端口,则称为「Destination NAT」(或简称为D-NAT或DNAT)。某些形式的NAT需要运用「连線追蹤」来決定如何修改包。
偽装(Masquerading)
「偽装」是一种特别的SNAT操作:将来自其他电脑的包的来源位址改成自己的位址:请注意,由於入替的来源位址是自动決定的(执行SNAT的主机的IP位址)。所以,假如他改变了,仍在持续中的旧连線将会失效。「偽装」的主要用途是让多部使用private Ip的电脑(通常是透过DHCP动态取得)能够共用同一个public IP(固定或ISP动态分配)上网。
通讯埠转接(Port Forwarding)
「通讯埠转接」是一种特别的DNAT操作,其作用是让一部电脑(通常是防火牆)担任其他电脑的代理伺服器(proxy)。防火牆接收外界网络接传给他自己的包,然后改写包的目的地位址或目的端口,使其像是要送到內部网路其他电脑的樣子,然后才修改好的包送往新目的地。此外,来自內部网路的相关回复包,也会被防火牆改写成像是从防火牆自己发出的樣子,然后才送到外界电脑。
「通讯端口转接」通常用於提供內部网路的公开服务(像是web server或email server)给外界存取,而无需一个以上的public IP。对於外界而言,这些公开服务就像是代理主机(防火牆)所提供的,对於內部网路上的真实伺服器而言,就似乎任何的服务需要都来自代理主机。
负裁平衡(Load balancing)
「负戴平衡」的作用是将连線平均分散给一组伺服器,以充分利用资源。最简单的作法是利用「通讯端口转接」技术,使其以循环顺序选择目的地位址。
设定iptables的组态
各家Linux系统的iptables组态设定程式都不太相同,本节提供通用的作法,连同Red Hat 特有的设定方法。
「规则」的储存和回复
Red Hat Linu系统将iptables的「规则」储存于/etc/sysconfig/iptables档案,使用iptables initscript (通常是/etc/init.d/iptables)可将当时的规则储存于/etc/sysconfig/iptables,或将该档案裡的规则载入核心,如下:
/etc/init.d/iptables save (储存当时组态)
/etc/init.d/iptables restore (载入前次储存的组态)
使用Red Hat Linux的chkconfig命令,能够查出哪些runlevel会自动执行iptables:
chkconfig - - list iptables
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



