使用iptables轻松建立防火墙

由 dragonman 在 04-11-2004 22:07 发表:

使用iptables轻松建立防火墙

又一篇(转贴)

在Internet上,不同变种蠕虫的横行使得众多的受害者叫苦不迭。而作为Linux用户,这时心里自然要踏实得多,因为,这些变种的攻击对象主要是基于Windows的机器。但是Linux用户也非完全幸免,比如Nimda病毒就会影响到Linux用户。如果在子网内部有Windows 98、NT和2000这些易被感染的机器,那么它们感染上Nimda后,就会吞噬大量的带宽,从而影响到同一子网中的Linux机器。

要解决这些问题,我们可以通过修改防火墙规则来避免这种影响。下面的例子不是为你创建起一个非常完美的防火墙,但可以提醒系统管理员的注意,以使自己的系统免遭一些非常明显的攻击。本例要求使用2.4以上的内核。

为什么要使用2.4内核和iptables?

Iptabels(NetFilter)应用程序,被认为是Linux中实现包过虑功能的第四代应用程序。第一代是Linux 内核1.1版本所使用的Alan Cox从BSD UNIX中移植过来的ipfw。在2.0版的内核中,Jos Vos和其它一些程序员对ipfw进行了扩展,并且添加了ipfwadm用户工具。在2.2版内核中, Russell和Michael Neuling做了一些非常重要的改进,也就是在该内核中,Russell添加了帮助用户控制过虑规则的ipchains工具。现在,Russell又完成了其名为NetFilter的内核框架。

NetFilter的目的是为用户提供一个专门用于包过滤的底层结构,并且用户和开发人员可以将其内建在Linux内核中。Iptables是一个内建在NetFilter框架中的模块,它可以让用户访问内核过滤规则和命令。如果你了解ipchains,你就会发现,事实上iptables和ipchains非常的相似。

在Linux 2.2内核中,一般使用ipchains应用程序来控制防火墙(参见我发表于中国计算机世界网上的文章: http://www.ccw.com.cn/htm/app/linux/admin/01_8_31_2.asp )。作为一个标准的防火墙,使用ipchains的确是一个非常不错的办法。并且它也是我们现在比较常用的一种方法,事实上,和2.4内核相比,使用基于2.2内核的机器来创建防火墙有它自己的优点,因为2.4内核在高负载的情况下会出现一些稳定性方面的问题。

当然,虽然有缺点,但2.4内核却是提供了很多功能强大的网络功能,而这一点2.2内核相对来说比较欠缺。这其中就包括非常完整的防火墙和稳定、高性能的服务选项。使用2.4内核和iptables的防火墙代码,我们甚至可以建立起一个可以CheckPoint相媲美的、复杂的防火墙。

使用iptables

要执行iptables命令非常的简单,我们只需以root的身份登录,然后输入iptables,就会得到和以下类似的信息:

[root@jd root]# /sbin/iptables

iptables v1.2.1: no command specified

Try `iptables -h' or 'iptables --help' for more information

[root@jd root]#

在使用过程中,如果想查看iptables提供的选项,可在运行该命令时加上-h参数,这样,你将得到和以下类似信息:

[root@jd root]# /sbin/iptables -h

iptables v1.2.1

Usage: iptables -[ADC] chain rule-specification [options]

iptables -[RI] chain rulenum rule-specification [options]

iptables -D chain rulenum [options]

iptables -[LFZ] [chain] [options]

………

Commands:

Either long or short options are allowed.

--append -A chain Append to chain

--delete -D chain Delete matching rule from chain

………

在本文中,我不对各选项做详细的介绍,如果想了解更进一步的用法,建议参阅Linux 2.4 Packet Filtering HOWTO:

http://netfilter.samba.org/unreliab...iltering-HOWTO/

在创建一个个人或者桌面防火墙时,我们有一个非常简单的规则,那就是如果你不打算使用的端口,就不要打开它。比如,如果不是Web站点,就没有必要打开80端口,如果不准备使用telnet(事实上,现在我们已经没有必要再使用它),就不要打开23端口。

要做到这一点,最简单的方法就是输入以下所示的命令:

/sbin/iptables -A INPUT -p tcp --syn -j DROP

这行命令使得一个普通的用户可以使用所有Internet的常用功能,可以使用Web浏览、使用ICQ聊天等。而作为外部网,如果想通过TCP/IP连接到这个Linux服务器上,则会被完全拒绝。这对于大部分计算机来说,应该是一个比较合理的解决办法。

不过,Linux最大的好处之一就是远程管理能力,而现在最流行的远程管理的方式是通过SSH套件。SSH默认使用的是22端口,所以我们只要打开22端口,而其它的所有端口依然关闭即可。要做到这一点,我们可以使用以下的命令:

/sbin/iptables -A INPUT -p tcp --syn --destination-port 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --syn -j DROP

除非是公共服务器,否则最好不要让所有的人都可以通过22端口连接你的服务器。我们可以进行一下限制,只让指定的地址可以访问该机器。这做到这一点,只需加上-s选项,具体命令如下:

/sbin/iptables -A INPUT -p tcp --syn -s 192.168.1.110/32 --destination-port 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --syn -j DROP

增加的-s 192.168.1.110/32将只让IP地址为192.168.1.110的远程机器可以连接到这台被保护的主机上。

当建好一个基于iptables的防火墙之后,上述的每一行就会被依次读入。我们以上所做的是建一个防火墙,使得主机只能通过SSH来访问。一般来说,运行公共的Web服务器时,我

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus