LINUX iptable应用手册(二)

第二篇


规则(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


假设你想在runlevels3、4、与5启动iptables,使用下列命令:

chkconfig - -levels 345 iptables on

你也可以自己启动iptables(从/etc/sysconfig/iptables档案载入规则,与/etc/init.d/iptables restore等效):

service iptables start

下列命令可以使其失效(清洗掉核心当时的规则):

service iptables stop

对于Red Hat Linux之外的其它系统,可使用iptables-save与iptables-restore达到储存、回复规则的效果。关于这两个工具程式,请参阅《辅助工具》。

其它相关組態檔

透过/proc档案系统下的虚拟档案,可以监测、控制核心的一般网络功能,以及iptables的行为。《表9》列出最常用的档案。





核心对于iptables的支援

iptables与Linux核心的版本息息相关。在Red Hat Linux系统上,使用uname -r 命令可查出当时核心的版本。你会见到类似以下面的讯息:
2.4.20-20.9

当初用来建构核心的组态档,其名称应该含有核心的版本与机器类型(可使用uname -a查出来),例如:

/usr/src/linux-2.4.20-2.9/configs/
kernel-2.4.20-i686.config

与iptables功能有关的组态项目,其名称多半是以CONFIG_IP_NF_为首。以下是至少必须具备的基本要项:


●CONFIG_PACKET(透过网络界面直接通讯)

●CONFIG_NETFILTER(提供iptables所需要的核心基础机制)

●CONFIG_IP_NF_CONNTRACK(支援NAT与伪装)

●CONFIG_IP_NF_FILTER(支援filter表格)

●CONFIG_IP_NF_IPTABLES(使userspace的iptables工具能够设定kernel-space里的Netfilter)

●CONFIG_IP_NF_MANGLE(支援mangle表格)

●CONFIG_IP_NF_NAT(支援nat表格)


********************************

警告:
你或许会很想要打开CONFG_NET_FASTROUTE,因为「fast routing」听起来是很适合用在防火墙的功能。别这么做!因为「fast routing」的原理其实是绕过Netfilter的各个拦截点。

********************************


如果需要能够与旧版防火墙技术(2.0时代的ipfwadmin,以及2.2时代的ipchains)相容,请加入下列两个选项:

●CONFIG_IP_NF_COMPATHAINS

●CONFIG_IP_NF_COMPAT_IPFWADM


______________________________

缺窍

有 一组专为添增新功能到Netfiiter的核心修补程式,称为「patch-o-matic」在Netfilter主網站的 《NetfilterExtensions HOWTO》(位於http: //www.netfilter.org/documenIation/HOWTO/netfilter.extensions.HOWTO.html) 可以找到关於这组修补程式的說明。Patch-o-matic本身並非隨附iptables一起發行.而必须另外从ftp: /ftp.netfiher.org/pub/patch-o-matic/下载。

______________________________


当你修补核心时,必须特別谨慎,尤其是对於实验性的Netfilter扩充模组。有些模组甚至不能同时编译,有些甚至即使可编译也不能夠执行。总之,对於新建好的核心,应该事先於无关紧要的环境下进行测试,而不要贸然安装在实际的防火墙上。

连線追蹤(Connection Tracking)
有 能力找出不同封包之間的邏輯關連性,所属的逻辑连線;逻辑连線的概念甚至也适用於某的UDP封包(虽然UDP本身是一种沒有连線概念的协定)。为了做到这 点,核心必须记錄连線的生命週期进度追蹤资讯提供给conntrack mateh extension(【注译:match extension是可讓iptables使用特殊條件來过滤封包的扩充模组】)。

TCP实际的连線搭建程序与状态维护机制颇为复杂,所为此,線追蹤逻辑将连線的整个生命期简化为四个阶段(四种状态),对於个別TCP包,必定是属於道四种状态的连線之一。请参閱《表10》:





对于每一条连线(包括具体TCP连线,以及广义的UDP连线),连线線追蹤逻辑各维护三个位元的状态资讯。《表11》列出这些态代码的名称(可用於 - -ctstatus选项)。






iptables的連線追蹤邏輯,可容许外挂模组来辅助辨识新连线与旧有连线之间的关系。
当你的防火墙(或闸道器)需要转接多连线式的协定时间 、,你将需要使用相关追踪的主要连线形式。
在使用它们之前,必须先用modprobc将相关模组载入核心。请参閱《helper过滤条件》。





累计(Accounting)
对於每一条规则,核心各自设置两个专属的计数器,用于累计符合该条件的封包数,以及这些封包的总位元组数。这两项资讯可用於统计网路用量。

举例来說,假设有一台Internet闸道器路,eth0接内部网络,eth1接Internetinux联盟收集整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值