⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0250simple_firewall.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		可以使用我的 WWW 服务吗?呵呵!答案是『否~』想通了吗? ^_^ <br /><br />

		<hr /><li><span class=text_import1>iptables 的表格与链 (chain)</span><br />
		<div class=block2>
		事实上,那个图五所列出的规则仅是 iptables 众多表格当中的一个链 (chain) 而已。
		什么是链呢?这得由 iptables 的名称说起。为什么称为 ip"tables" 呢?
		因为<span class=text_import2>这个防火墙软体里面有多个表格 (table) ,每个表格都定义出自己的预设政策与规则,
		且每个表格都用途都不相同</span>。我们可以使用底下这张图来稍微了解一下∶<br /><br />

		<center>
		<img src="0250simple_firewall/iptables_02.png"
		title="iptables 的表格示意图" alt="iptables 的表格示意图"><br />
		图六、iptables 的表格示意图</center><br />

		刚刚<span class=text_import2>图五的规则内容仅只是图六内的某个 chain 而已</span>!
		而预设的情况下,咱们 Linux 的 iptables 
		至少就有三个表格,包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其他电脑) 的 nat 、
		管理特殊旗标使用的 mangle (较少使用) 。更有甚者,我们还可以自订额外的链呢!
		真是很神奇吧!每个表格与其中链的用途分别是这样的∶<br />

		<ul>
		<li><span class=text_import1>filter</span>∶主要跟 Linux 本机有关,这个是预设的 table 喔!
			<ul><li><span class=text_import2>INPUT</span>∶主要与封包想要进入我们 Linux 本机有关;
			<li><span class=text_import2>OUTPUT</span>∶主要与我们 Linux 本机所要送出的封包有关;
			<li><span class=text_import2>FORWARD</span>∶这个咚咚与 Linux 
			本机比较没有关系,他可以封包『转递』到后端的电脑中,与 nat 这个 table 相关性很高。</ul></li><br />
		<li><span class=text_import1>nat</span>∶这个表格主要在用作来源与目的之 IP 或 port 的转换,
			与 Linux 本机较无关,主要与 Linux 主机后的区域网路内的电脑较有相关。
			<ul><li><span class=text_import2>PREROUTING</span>∶在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
			<li><span class=text_import2>POSTROUTING</span>∶在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
			<li><span class=text_import2>OUTPUT</span>∶与发送出去的封包有关</ul></li><br />
		<li><span class=text_import1>mangle</span>∶这个表格主要是与特殊的封包的路由旗标有关,
			早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。
			由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。
		</ul>

		那么各个表格与链的相关性可以使用下图来表示∶<br /><br />

		<center>
		<img src="0250simple_firewall/iptables_03.png"
		title="iptables 内建各表格与链的相关性" alt="iptables 内建各表格与链的相关性"><br />
		图七、iptables 内建各表格与链的相关性</center><br />

		上面的图示很复杂喔!不过基本上你依旧可以看出来,我们的 iptables 可以控制两种封包的流向∶<br />
		<ul><span class=text_import2>
		<li>如上图的 A ,封包主要是要读取我们 Linux 本机内的资料,会经过 filter 的 INPUT 链,
			而资料的输出则是经过 filter 的 OUTPUT 链;
		<li>如上图的 B ,封包主要是要透过防火墙而去后端,也就是说,该封包的目标并非我们的 Linux 本机。
			主要经过的链是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。
		</span></ul>

		由于 mangle 这个表格很少被使用,如果将图七的 mangle 拿掉的话,那就容易看的多了∶<br /><br />

		<a name="fig_08"></a><center>
		<img src="0250simple_firewall/iptables_04.png"
		title="iptables 内建各表格与链的相关性(简图)" alt="iptables 内建各表格与链的相关性(简图)"><br />
		图八、iptables 内建各表格与链的相关性(简图)</center><br />

		透过图八你就可以更轻松的了解到,事实上与本机最有关的其实是 filter 这个表格内的 INPUT 与 OUTPUT
		这两条链,如果你的 iptables 只是用来防备 Linux 主机本身的话,那 nat 
		的规则根本就不需要理他,直接设定为开放即可。<br /><br />

		不过,如果你的防火墙事实上是用来管制 LAN 内的其他主机的话,那么你就必须要再针对
		filter 的 FORWARD 这条链,还有 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 进行额外的规则订定才行。
		nat 表格的使用需要很清晰的路由概念才能够设定的好,建议新手先不要碰!
		最多就是先玩一玩最阳春的 nat 功能『IP 分享器的功能』就好了! ^_^!
		这部份我们在本章的最后一小节会介绍的啦!<br />
		</div>
	</div>

	<hr /><a NAME="netfilter_syntax"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">本机的 iptables 语法</span><br />
	<div class=block2>
		理论上,当你安装好 Linux 之后,系统应该会主动的帮你启动一个阳春的防火墙规则才是。
		不过如果您是依照鸟哥的建议来安装 Linux 时,那么安装完毕后,你的系统应该是没有防火墙的啦。
		另外,某些早期的版本 (例如 Red Hat 9) 本身同时提供 iptables 及 ipchains 这两个防火墙模组,
		不过这两个模组是无法同时存在的!所以你仅能启动其中一个,那当然是启动 iptables 才对啊!
		如果不小心启动了 ipchains 的话 (新版的 Linux 都不会有这个困扰) ,那请使用 rmmod 来移除吧!<br /><br />

		不过,在开始进行底下的练习之前,鸟哥这里有个很重要的事情要告知一下。
		因为 iptables 的指令会将网路封包进行过滤及抵挡的动作,所以
		<span class=text_import2>请不要在远端主机上进行防火墙的练习</span>,因为您很有可能一不小心将自己关在家门外!
		尽量在本机前面登入 tty1-tty6 终端机进行练习,否则常常会发生悲剧啊!
		鸟哥以前刚刚在玩 iptables 时,就常常因为不小心规则设定错误,导致常常要请远端的朋友帮忙重新开机...<br /><br />

		刚刚提到咱们的 iptables 至少有三个预设的 table (filter, nat, mangle),较常用的是本机的 filter 表格,
		这也是预设表格啦。另一个则是后端主机的 nat 表格,至于 mangle 较少使用,所以这个章节我们并不会讨论 mangle。
		由于不同的 table 他们的链不一样,导致使用的指令语法或多或少都有点差异。
		在这个小节当中,我们主要将针对 filter 这个预设表格的三条链来做介绍。底下就来玩一玩吧!<br />

		<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen">		防火墙的设定主要使用的就是 iptables 这个指令而已。而防火墙是系统管理员的主要任务之一,
		且对于系统的影响相当的大,因此『只能让 root 使用 iptables 』,不论是设定还是观察防火墙规则喔!
		</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
		<a name="netfilter_syntax_clean"></a><hr /><li><span class=text_import1>规则的清除与观察</span><br />
		<div class=block2>
		如果你在安装的时候选择没有防火墙的话,那么 iptables 在一开始的时候应该是没有规则的,不过,
		可能因为你在安装的时候就有选择系统自动帮您建立防火墙机制,那系统就会有预设的防火墙规则了!
		无论如何,我们先来看看目前本机的防火墙规则是如何吧!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>iptables [-t tables] [-L] [-nv]</span>
<span class=term_say>参数∶
-t ∶后面接 table ,例如 nat 或 filter ,若省略此项目,则使用预设的 filter
-L ∶列出目前的 table 的规则
-n ∶不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v ∶列出更多的资讯,包括通过该规则的封包总位元数、相关的网路介面等</span>

<span class=term_hd>范例∶列出 filter table 三条链的规则</span>
[root@linux ~]# <span class=term_command>iptables -L -n</span>
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

<span class=term_hd>范例∶列出更多的资讯</span>
[root@linux ~]# <span class=term_command>iptables -L -nv</span>
Chain INPUT (policy ACCEPT <span class=term_write>5748 packets, 746K bytes</span>)
 pkts bytes target     prot opt in     out     source               destination
<span class=term_say>....底下省略....</span>
</pre></td></tr></table>

		仔细看到上面表格的输出,因为没有加上 -t 的参数,所以预设就是 filter 这个表格内的 INPUT, 
		OUTPUT, FORWARD 三条链的规则棉。由于没有规则嘛!所以每个链内部的规则都是空的。
		同时注意一下,在每个 chain 后面括号内的 policy 项目,那就是『预设动作(政策)』咯!以上面来看,
		虽然我们启动了 iptables ,但是我们没有设定规则,然后政策又是 ACCEPT,
		所以是『任何封包都会接受』的意思喔!至于如果加上 -v 的参数时,
		则连同该规则所通过的封包总位元数也会被列出来啊。底下则是 nat 表格的规则项目∶ <br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>iptables -t nat -L -n</span>
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
</pre></td></tr></table>

		瞧!与 fiter 表格一模一样吧!只是三条链的内容不同棉!要注意啊! ^_^!
		以后当你设定每一条防火墙的规则时,记得瞧一瞧设定先!好,那如何清除规则?这样做就对了∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>iptables [-t tables] [-FXZ]</span>
<span class=term_say>参数∶
-F ∶清除所有的已订定的规则;
-X ∶杀掉所有使用者 "自订" 的 chain (应该说的是 tables )棉;
-Z ∶将所有的 chain 的计数与流量统计都归零</span>

<span class=term_hd>范例∶清除本机防火墙 (filter) 的所有规则</span>
[root@linux ~]# <span class=term_command>iptables -F</span>
[root@linux ~]# <span class=term_command>iptables -X</span>
[root@linux ~]# <span class=term_command>iptables -Z</span>
</pre></td></tr></table>

		由于这三个指令会将本机防火墙的所有规则都清除,但却不会改变预设政策 (policy) ,
		所以如果你不是在本机下达这三行指令时,很可能你会被自己挡在家门外 (若 INPUT 设定为 DROP 时)!
		要小心啊!<br /><br />

		一般来说,我们在重新定义防火墙的时候,都会先将规则给他清除掉。还记得我们前面谈到的,
		<span class=text_import2>防火墙的『规则顺序』是有特殊意义的</span>,所以棉,
		当然先清除掉规则,然后一条一条来设定会比较容易一点啦。底下就来谈谈定义预设政策吧!<br /><br />
		</div>

		<a name="netfilter_syntax_policy"></a><hr /><li><span class=text_import1>定义预设政策 (policy)</span><br />
		<div class=block2>
		清除规则之后,再接下来就是要设定规则的政策啦!还记得政策指的是什么吗?『
		<span class=text_import2>当您的封包不在您设定的规则之内时,则该封包的通过与否,以 Policy 
		的设定为准</span>』,在本机方面的预设政策中,假设您对于内部的使用用者有信心的话,
		那么 filter 内的 INPUT 链方面可以定义的比较严格一点,而 FORWARD 与 OUTPUT 
		则可以订定的松一些!通常鸟哥都是将 INPUT 的 policy 定义为 DROP 啦,其他两个则定义为 ACCEPT。
		至于 nat table 则暂时不理会他。<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]</span>
<span class=term_say>参数∶
-P ∶定义政策( Policy )。注意,这个 P 为大写啊!
ACCEPT ∶该封包可接受
DROP   ∶该封包直接丢弃,不会让 client 端知道为何被丢弃。</span>

<span class=term_hd>范例∶将本机的 INPUT 设定为 DROP ,其他设定为 ACCEPT</span>
[root@linux ~]# <span class=term_command>iptables -P   INPUT DROP</span>
[root@linux ~]# <span class=term_command>iptables -P  OUTPUT ACCEPT</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -