分享

LINUX iptable应用手册(一)

 cupid 2015-03-16
  防火牆(Firewall)、网址转换(NAT)、数据包(package)记錄、流量统计,这些功能全是Linux核心裡的Netfilter子系統所提供的,而iptables是控管Netfilter的唯一工具程式。iptables的介面很可能是Linux有史以來最精緻的,它使得Linux成為最有彈性的網路過濾系統。iptables將許多组繁复的规则集成组织成容易控管的形式,以便管理员可以进行分组测试,或关闭、啟动某组规则集。

iptable能够为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptable只读取数据包头,不会给信息流增加负担,也无需进行验证。要想获得更加好的的安全性,可以将其和一个代理服务器(比如sqiud)相结合。

每当有人紧急要求你开放或关闭特定通讯端口(为了让某种重要的网路通讯能通过防火牆,或是阻挡某种攻擊),或是请你在防火牆设置某种功能,本文将能协助你尽速解決问题。本文以直接的语法和务实的范例,帮助你记忆iptables的各种用法,並提供一些适当的意见,让你的防火牆尽可能保持安全。我们将iptables的选项分成「防火牆」、「流量统计」、「NAT」三类,以适合实务查询的方式编排,帮助管理员在最短时间內找到相关选项的语法和說明。



操作范例如下:

让我们来一个简单的iptables命令:

iptables -t nat -A PREROUTING -i ethl -p tcp - -dport 80
-j DNAT - - to -destination 192.168.1.3:8080

(表1)是解释这个iptables命令的意义。







▓ 概念

Linux核心的包处理流程中,共设置了五个(鱼钩)拦截点(hook points),分别是PREROUTING、INPUT、FORWARD、POSTROUTING以及OUTPUT。內建链结只能作用在这些拦截点;你可以针对个別拦截点设置一系列处理规则,每条规则各代表一次影响(或监测)包处理流程的机会。


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

▓ 诀窍

我们常看到很多說明文件有着『...nat表格的PREROUTING串链...』这樣的說法,隐喻著链结是属于表格。然而,链结与表格两者之间並沒有统属关系,最多只有隐讳的关联性而已。链结(chains)的真正含意是「包(package)径路上的拦截点」而表格(tables)则是象征「处理效果」。然而,为了措词上的方便,本文仍免不了出现『...某表格的某链结...』之类的說法请读者注意。

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


※ 图1、2、3分別展示了表格与链结的三种有效组合,以及各种组合所象征的包处理流程。其中《图l》是包经过「网址转换系统」(NAT)的流程,相关链结是作用於nat表格。







※ 图2: 是包流经「包过滤系统」的流程,相关链结是作用于filter(过滤)表格。








※ 图3: 是包流经「包内容调整系统」的流程,相关链结是作用于mangle表格。







表2》說明五种拦截点(链结)的作用,以及各拦截适合处理的包类型。






注解:
混杂模式(promiscuous mode):Ethernet网卡的一种特殊作业模式,在此模式下,即使目的地MAC位址不是指向自己的Ethernet包,也会被收下来。Ethernet网卡通常是在非混杂模式下作业,也就是只接受MAC指向自己的Ethernet包。

*************************************
诀窍
好奇的读者,可从核心原始程式的/usr/include/linux/netfilter_ipv4.h标头档查出各拦截点的定义;它们的名称类似NF-IP_FORWARD、NF_IP_LOCAL_{IN,OUT}、和NF_IP_{PRE,POST}_ROUTING。
*************************************


规则应该设置於哪个表格的哪个链结,取決於规则本身的功能性,以及包的性质。比方說,若你要设置的一条用於过滤离境包的规则,则应该将该规则设置於「filter表格」(因为功能性是「过滤」)的「OUTPUT链结」(因为包性质是「离境包」)虽然要离境的包,其最后一关应该是at表格的POSTROUfING链结(参閱《表4》与《表6》),但由於nat表格管不到POSTROUTING链结,所以你不能将出境包过滤规则设置在那裡。


表格(Tables)

iptables內建三个表格:filter、mangle以及nat每个表格都被预先设置了一或多个代表各拦截点的链结(请参閱《表2》、《图1》、《图2》、《图3》)。这三个內建筛表的作用,请参閱《表3》。






iptables将适当的链结设置於上述三个内建表格,当系统收到包时,便依据包的来源(本机行程或网络)来源主机的位址、目的地位址来判断包的性质(穿越、输入、输出、绕回),然后依照包的性质,分別以《表4》到《表7》所列的程式之一来处理该类包。

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

诀窍

图1-3只是个别相关功能的示意流程,而非包的实际旅程。表4-7所描述的顺序,才是包真正的旅程。

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


链结(Chains)

每个表格都预设了相关拦截点的链结,当系统刚开机时,所有链结都是空的:为此,回复iptables套件另外提供了两个辅助工具 – iptables-save與iptables-restore - 可供你儲存、回復所有规则(參閱《輔助工具》)。每个链结各代表一个拦截点,《表2》是各拦截点的說明,《表3》列出各表格预设的链结。

除了內建链结之外,你也可以建立自己的链结来组织你的规则。

若包能通过链结裡的每一条规则而下受影响,最后将由链结的政策(policy)決定包的命运。內建连接只能以「內建目标」(参閱《表8》) - ACCEPT与DROP – 为政策:预设政策为ACCEPT所有自订链结的政策都固定是RETURN,不能改变。

如果要为內建链结制定更复杂的政策,或是希望自订连接改用RETURN之外的其它政策,唯一办法是在链结末端添加一条通适规则(任何包都符合条件的规则),並将你要的任何目标设定於该规则。

你不能直接修改已经设置到链结裡的现有规则,如果发现某规则有误,唯一办法是刪除掉旧规则(使用-D)、然后将正确的新规则加回去(使用-A或-I)。


包(package)的流程

当包流经链结时,必须依序通过该链结裡每一条规则的检验。若包符合某条规则的「筛选条件」(match),则将包交给该规则的「目标」(target)来处理,否则,就继续由同链结裡的下一条规则予以检验。倘若包顺利通过链结裡的所有规则(不符合任何规则的筛选条件),则以链结的「政策」(policy,参閱《链结(Chains)》来決定其去向。

包实际会经过哪些链结,取決於包本身的性质(转交、输入、输出、绕回),《表4》到《表7》分別列出各种性质的包的旅程顺序。《图1》《图2》和《图3》是单看特定筛表时,包如何通过该筛表各链结的详细流程。

















<附錄)描绘filter过滤表格的详细处理流程。



注解: Package : "包","套件"或称呼"封包"
Chain : "链结"或称呼"串链"



To be continued...........


(http://www.)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多