巧用iptables建立Linux防火墙
时间:2009-04-20 来源:wang39013
你可以从下面的链接得到此工具的详细信息或下载此工具:
http://www.linux.org.uk/apps/lokkit.shtml
不过,你可能对一个GUI(图形用户界面)的工具更感兴趣,而不是使用命令行工具来对iptables作出改变。如果你喜欢图形化的工具,现在互联网上有不少这样的工具。不妨到freshmeat.net找一下。
Iptables简介
对于那些不知道或不清楚iptables的人来说,这个Linux工具可以控制网络数据包,允许你借助于一套规则来对网络相关的事项执行精细控制,此工具本身已经出道有一段时间了。
在你用iptables命令开始创建规则之前,你还需要知道如果服务器重启的话,你创建的规则会丢失。由于这个原因,多数服务器管理员将其所用的iptables命令运用于一个服务器每次重启时运行的命令过程。对于某些Linux版本,你还可以像下面这样来运行一个命令:
service(服务) iptables save(保存)
这就保证可以保存你的配置,并且在启动时自动加载。.
开始工作
要使用iptables,你应当将规则运用于进入或发出的网络数据包,或者通过你的服务器转发的数据包。
要查看目前运用于服务器的数据包,键入命令:
iptables -L
iptables基础
构建可正常发挥功能的防火墙规则依赖于你对服务器是如何运行的一些知识。
对于一个安全的服务器而言,最好先建立一个可以禁止所有进入通信的规则。一旦你这样做了,那么你可以建立一些明晰的规则,使其只允许如80号端口等例外端口的请求。这样做比你设法过滤想阻止的内容更加容易理解,也更容易配置,因为那样的话你可能会遗漏一些重要或者危险的东西,例如一个开放的可被用于攻击你的服务器的端口。
此外,将iptables与一个硬件防火墙结合使用也是很有益的,因为这会提供多层安全,并会减少你在配置中遗漏某些东西的可能性。
记住,你可以用命令man iptables得到所有的语法信息。
使用防火墙规则
下面让我们看三个示例性的规则及其核心部分。不过,需要注意,我们文章中的一些较长的命令有自动换行,因此你要确保键入了一个完整的命令,而不是仅仅一行命令。
iptables -P INPUT DROP
这个命令很容易,并且很安全。它对iptables工具进行了初始化,然后对所有进入(input)的数据包设置了一个策略(Policy(-P))。这个策略就是丢弃所有的数据包。非常安全。注意,你只能将策略用于iptables的内建命令。
iptables -A INPUT -i lo -j ACCEPT
这条规则比较实用,因为它允许发生在你的本地接口上的网络通信。注意添加的(-A)选项,因为这不是内建于策略中的一部分。这条新的规则被添加到所有进入的将要到达本地接口(interface:-i)的数据包上。这条规则要准许所有这些数据包(-j ACCEPT)。通常情况下,如果你碰到配置和安装应用程序方面的问题,这将开始于你准许本地主机的连接性,如下所示:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
这个命令还将一条规则添加(-A)到所有通过以太网接口(-i eth0)进入(INPUT)的数据包中。不过它只应用于使用TCP协议(-p tcp)的数据包。此规则特别针对进入指定的80号端口(--dport 80)的数据包,而且设置为允许这些数据包通过(-j ACCEPT)。
如果你将这三条规则集成到一个脚本命令过程中,就会得到:1. 一个可以阻止每一个进入的连接的服务器。
2. 不过它允许通过本地接口的内部主机的连接。
3. 同时还允许80号端口所有进入的 tcp请求得以通过。
通过指定一个特定的IP地址,你还可以得到更加精细的控制,例如:iptables -A INPUT -d 196.1.1.2 –i eth0 –p tcp --dport 80 -j ACCEPT
示例脚本命令
你的选择几乎无限,不过你需要当心。下面我们给出一段基本的脚本命令过程,借此你会发现它对于开始你的防火墙设置是很有用的。在复制这段脚本时,你要记住较长的命令在这里已经被分成了几行:
#!/bin/bash # # iptables firewall settings for linux server # ### DEFAULT POLICY iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP ### ESSENTIAL RULES # Allow internal host packets on local interface iptables -A INPUT -i lo -j ACCEPT ### PROTOCOL LEVEL RULES # Allow PORT 80 TCP packets on ethernet interface iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT # LOG ALL OTHER PACKETS # Logging for any failed packets for troubleshooting use iptables -A INPUT -j LOG --log-prefix "INPUT: " |