LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1497|回复: 8

使用iptables轻松建立防火墙[zt]

[复制链接]
发表于 2004-2-25 09:23:38 | 显示全部楼层 |阅读模式
使用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服务器时,我们就可以通过以下命令来实现:
/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 --destination-port 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -j DROP
我在这儿只介绍了iptables的一个简单应用,并没有介绍防火墙的一些关键应用,主要目的是让读者对iptables有一个大概了解。总之,如果你使用的Linux内核是2.4以上的,那么你就应该好好认识一下iptables。
发表于 2004-6-1 14:01:46 | 显示全部楼层
支持~
发表于 2004-6-2 02:05:43 | 显示全部楼层
支持
发表于 2004-6-18 13:51:28 | 显示全部楼层

我的这个命令怎么不能用呢!

我在终端 iptables
说是没有这个命令
可是我安装了阿!
发表于 2004-6-22 11:00:30 | 显示全部楼层
好!我来试
发表于 2004-6-23 12:14:58 | 显示全部楼层
/sbin/iptables -A INPUT -p tcp --syn -j DROP

我将端口都关闭了,要怎样打开他们(80,10000)
发表于 2004-6-23 16:13:24 | 显示全部楼层
iptables -A INPUT -p tcp 80 -j ACCEPT
iptables -A INPUT -p tcp 10000 -j ACCEPT
发表于 2004-6-29 03:10:35 | 显示全部楼层
最初由 pinksnoopy 发表
iptables -A INPUT -p tcp 80 -j ACCEPT
iptables -A INPUT -p tcp 10000 -j ACCEPT


这个有问题吧,port之前应该有什么--dport之类的吧
发表于 2004-6-29 08:54:33 | 显示全部楼层
80前加--sport

斑竹忙。。。。。。可能每看清
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表