CSDN博客

img bjbs_270

使用iptables

发表于2004/9/29 19:27:00  1626人阅读

 

使用iptables


原文出处:http://www.unixreview.com/articles/2001/0104/0104l/0104l.htm
作者:Joe "Zonker" Brockmeier
编译:ideal <ideal@linuxaid.com.cn>

在上一篇文章中我们讨论了在Linux2.4内核中如何实现对Netfilter框架和iptables的支持,在这一篇文章中我们将继续讨论iptalbes的基本语法和如何创建一个基本的防火墙。

如果你仍然在使用linux2.2.x内核,你将不能使用iptalbes工具,然而也许你希望了解更多的关于iptables方面的知识以为迁移到2.4内核作准备。当前,稳定的最新版本内核为2.4.5,iptables的最新稳定版本为1.2.2。

另外可以在以下地址访问netfilter框架的主页:netfilter.samba.org/netfilter.gnumonks.orgnetfilter.filewatcher.org。同时在四月一六日发布了一个对ip_conntrack_ftp安全弱点的补丁希望的到关于这个安全弱点的完全描述可以在 http://netfilter.samba.org/security-fix/index.html处得到,并下载补丁程序。

开始工作

毫无疑问用户需要以root身份登录系统来使用iptables工具,以root身份登录进入系统以后,你也许首先希望查看当前防火墙系统中有哪些设置,通过命令"iptables -L"来察看当前设定的防火墙规则,若希望了解防火墙设置的查看详细信息,可以使用"iptables --list"命令来查看。

若没有任何规则链被加载,则输出将如下图所示:

默认情况下,系统有三条规则链:INPUT、OUTPUT和FORWARD,所有规则链的策略都为ACCEPT。也就是说在配置任何规则以前,系统是完全开放的。

若你希望将你的系统作为防火墙使用,那么你需要打开IP转发开关:

echo "1" > /proc/sys/net/ipv4/ip_forward.

添加规则

如果没有任何规则,iptables则不会产生任何效应,下面我们就向现存的规则链中添加一些规则。若你不希望别人通过ping工具来探测你的主机,你可以使用下面的规则来限定:

iptables -A INPUT -p icmp -j DROP

参数"-A INPUT"设定iptables在INPUT链后添加该规则,参数"-p icmp"指示该规则是施用于icmp协议,参数"-j DROP" 指示匹配该规则的数据报应该被丢弃。现在向该服务器发送的ping数据,该服务器将会丢弃这些数据,因此的不到响应。其中协议名"icmp"是和大小无关的,可以是"icmp"也可以是"ICMP"。

若需要删除该规则,使服务器响应ping命令,则使用下面命令:

iptables -D INPUT 1

"-D"参数指示iptables工具删除INPUT规则链中的第一条规则。若你的规则链中有多条规则,则该命令不会影响到规则。这时候你也许希望清除前面所有命令定义的规则而从头开始,可以使用命令:

iptables -F INPUT

该命令指示iptables清空INPUT规则链中的所有规则。

阻塞telnet连接

现在我们来尝试一个稍微复杂一些的例子。我们希望阻塞来自外部网络到服务器的SSH连接但是允许内部网络的SSH连接。为了防止用户的用户名和密码外泄,因此组织所有的连接外部网络的telnet连接。

首先在INPUT规则链中设置一条允许内部网络ssh连接服务器的规则:

iptables -A INPUT -s 198.168.0.0 -p tcp --destination-port ssh -j ACCEPT

参数"-s"指定该规则适用于哪些源地址的连接。"--destination-port"指定TCP连接端口。

下面的规则阻塞所有来自外部网络对内部服务器的SSH连接:

iptables -A INPUT -s ! 198.168.0.0 -p tcp --destination-port ssh -j DROP

该命令和上面的命令是几乎是同一条命令,除了它定义的是阻塞外部网络的SSH连接。若你希望在外部网络中能连接内部服务器则不要定义该规则。要使定义的规则发挥作用,定义规则的主机必需是路由器,所有的数据都经过该服务器才能实现控制,否则这些规则无法发挥作用。同时注意上面规则定义中“!”和后面网络地址之间必须有个空格。

最后,为了阻塞连向外部的telnet连接,向OUTPUT规则链添加如下规则:

iptables -A OUTPUT -p tcp --destination-port telnet -j DROP

这一次定义的规则是添加到INPUT链中。当该规则被定义,用户试图通过telnet链接出去时,将会被阻塞,用户将得不到响应。这可能会引起用户以为是目标服务器出现了问题,因此我们修改该规则,不丢弃telnet数据,而是拒绝该数据:

iptables -F OUTPUT
iptables -A OUTPUT -p tcp --destination-port telnet -j REJECT

清空OUTPUT链接以后,我们将使用一个类似的命令,只是规则目标动作变为"REJECT"。这时候用户telnet外部服务器时会得到链接被拒绝的错误。

若希望允许telnet链接内部服务器,则清空OUTPUT规则链然后重新设定规则:

iptables -A OUTPUT -p tcp --destination-port telnet -d 198.168.0.0 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port telnet -d ! 198.168.0.0 -j REJECT

你也许现在会施用"iptables -L"命令来查看当前定义的规则,确保规则输入正确,输出就如下图所示:

总结

在本文中我们讨论了iptables的基本使用方法,正如你所看到的那样iptables并不是想像中的那么复杂和难以使用,但是它非常强大和灵活。目前iptables仍然处于不断的发展和成熟之中,如果有任何相关问题可以参加邮件列表 http://lists.samba.org/pipermail/netfilter/0进行咨询。

资源链接

The Netfilter Project Homepage (http://netfilter.samba.org/)
Netfilter Mailing List (http://lists.samba.org/pipermail/netfilter/)

阅读全文
0 0

相关文章推荐

img
取 消
img