|
我想很多人都想弄清楚到底怎样才能用iptables建立一个防火墙,我也为这个问题困惑了很久,但是,现在我把这个问题解决了,我终于学会了使用iptables做防火墙。下面我将尽我最大的努力向大家解释清楚其中的一些基础知识。
要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过我们的计算机。首先我们要弄明白,防火墙将怎么对待这些数据包。这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入INPUT链,从我们的计算机发出的数据包会经过OUTPUT链,如果一台计算机做一个网络的网关(现时和两个网络连接的计算机,分别处于两个网络的相台计算机相互通讯的数据包会经过这台计算机),可能会有很多数据经过这台计算机,那么这些数据包必经FORWARD链。明白了这些“链”的概念我们才能进一步学习使用iptables。
现在我们再来分析一下iptables规则是如何工作的,假如我们要访问网站www.yahoo.com,我们要对www.yahoo.com发出请求,这些数据包要经过OUTPUT链,在请求发出前,Linux的内核会在OUTPUT链中检查有没有相应的规则适合这个数据包,如果没有相应的规则,OUTPUT链还会有默认的规则,或者允许,或者不允许(事实上,不允许有两种,一种是把请求拒绝,告诉发出请示的程序被拒绝;还有一种是丢弃,让请求发出者傻等,直到超时)。如果得到允许,请求就发出了,而www.yahoo.com服务器返回的数据包会经过INPUT链,当然,INPUT链中也会有相应的规则等着它。
下面我们介绍几个iptable的命令
iptables -L [-t filter]
这条命令是显示当前有什么已经设置好的防火墙规则,可能的显示结果如下:
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
复制代码
从这里我们可以看出,filter中有个条链INPUT、FORWARD、OUTPUT。当本机与外面通讯,或者外界与本机时,信息就会从INPUT和OUTPUT中进、出,其中从括号中的policy ACCEPT我们还可以知道,本链当时的规则是ACCEPT,也就是说,在没有其它的规则的约束下,所有的信息包在通过本规则时是允许通过的。我们可以通过如下规则来修改
iptables -P INPUT DROP
这样,我们就把INPUT链的默认规则改成了DROP,即“丢弃”,我们可以再用iptables -L来查看,结果如下:
- Chain INPUT (policy DROP)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
复制代码
这样,所有进来的数据包在默认情况下都被丢掉了,除非有另外的规则允许通过,否则数据包是无法进入本机的。
现在我们用一个具体的例子来讲解iptables的使用,现在我们一台服务器,有两个网络连接,其中eth0连接internet,而eth1连接我们的局域网,我们相信局域网的一切连接,从internet上只能访问服务器的http服务。我们将设置如下:
iptables -P INPUT DROP (默认情况下,任何进入本机的数据包都会被丢掉)
iptables -A INPUT -p ALL -m state --state RELATED,ESTABLISHED -j ACCEPT (所有已经建立连接的数据包放行)
iptables -A INPUT -i eth1 -j ACCEPT (所有局域网的连接全部接受)
iptables -A INPUT -i eth0 -p tcp --dport http -m state --state NEW -j ACCEPT (所有从internet来的访问http服务的请求放行) |
|