手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Iptables 指南 1.1.19(中文版)(四)

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

我们拒绝SYN/ACK包以NEW状态进入的原因也是很简单的,深入的说明在附录常见问题和解答NEW状态的SYN/ACK包 里。基本上,我们这样做是出于对其他主机的好意,因为我们为他们预防了序列号预测攻击(sequence number prediction)。


7.2.6.2. allowed链

假如包是从$INET_IFACE进入的,而且是TCP包,那他就要经过tcp_packets 链的检验。假如这个连接就是冲着被允许通过的端口来的,我们还要对他进行一些检查,以确定是否真的要接受他。这些“最后的审判”都是在allowed链里进行的。

首先,我们看看这个包是否是SYN包,假如是,他很可能是新连接的第一个包,我们当然接受了。假如不是,那就看看包是否来自某个ESTABLISHEDRELATED状态的连接,是的话,就接受。ESTABLISHED状态的连接是那种在两个方向上都有流量存在的连接。依据状态机制的观点,这个连接一定处于是ESTABLISHED状态的,因为我们现在能看到这个包,说明以前肯定收到了相应的SYN包。最后一条规则将DROP任何其他的包。当包到达最后这条规则,就几乎意味着任何连接都不会有双向的交流,也就是说,我们不会回应 SYN包。当试图用非SYN包开始新的连接时,包也会走到这条规则。不用SYN包建立新连接没有什么实际的用处,当然,端口扫描要排除在外。就我知道的而言,现在没有什么有用的TCP/ IP程式会使用SYN包以外的包来打开一个TCP连接。因此,我们要把这样的包DROP掉,我有99%的把握说他们是端口扫描用的。


7.2.6.3. 处理TCP的链

tcp_packets链指定了哪些端口可从Internet访问。但我们还要对进入的包做更多的检查,因此,每个包都会被发送到上面提到的allowed链。

-A tcp_packets告诉iptables要在哪条链里增加规则,规则被放在指定链的末尾。-p TCP指定要匹配的是TCP包,-s 0/0说明要匹配的源地址是从网络掩码为0.0.0.0的地址0.0.0.0开始的,换句话说,就是任何的地址。这实际上是默认值,我写出来只是尽可能使您更明白。--dport 21指定目的端口,也就是说假如包是发往端口21的,就会被匹配。假如任何的标准都匹配了,包就要被送往allowed链。

TCP的21号端口也是允许访问的,也就是FTP的控制端口,他能够控制FTP连接,前面提到过,我还允许任何RELATED状态的连接通过。这样,我们也就能够使用PASSIVE(主动)和ACTIVE(被动)的连接了,当然,要事先装载ip_conntrack_ftp模块。假如我们不想再提供 FTP服务,就卸载ip_conntrack_ftp模块,并把$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed 这一行从文档 rc.firewall.txt里删掉。

22号端口是SSH使用的。假如您允许外网的如何人都能通过telnet(使用23号端口)访问您的机子,那您还是使用SSH吧,他的安全性要好很多。注意,您操作的是防火墙,把任何访问权分配给除您自己之外的人都不是什么好主意。防火墙总是应该尽量少地暴露自己。

80是HTTP端口,也就是说您在防火墙上运行了网页服务。假如您不提供网页服务,就删掉这条规则吧。

最后我们还提供了IDENTD服务,端口是113。这个服务对某些协议是必须的,如IRC。注意,假如您NAT一些在内网里的主机的话,软件oidentd也值得一用,他会把 IDENTD请求中继给内网里正确的机子。

假如没有匹配上面任何一条规则,包就会被送回tcp_packets链的父链,也就是把他发到 tcp_packets链的那条规则所在的链。假如您想打开更多的端口,只要对tcp_packets链里的任何一行使用“复制、粘贴大法”,再修改一下端口号即可。


7.2.6.4. 处理UDP的链

假如我们在INPUT链中碰到了UDP包,就把他发送到udp_packets链。在那里,我们只处理UDP包,所以要用-p UDP来指定相应的协议。我们接受来自任何地址的包,故有-s 0/0,这其实就是源地址选项的默认值,但为了更明确,我们还是把他写出来了。此外,我们只接受发往特定端口的包,这些端口是我们想对Internet开放的。注意,我们无需依据发送端的源端口来决定是否打开某个端口,这个工作是由状态机制完成的。假如我们想运行某个使用 UDP端口的服务(如DNS),只要开放相应的端口,其他的端口无需打开。那些处于 ESTABLISHED状态、正在进入防火墙的包在到达包含--state ESTABLISHED,RELATED的规则(这是 INPUT链里那些“处理来自Internet的包的规则”中的第一条规则)之后就会被接受了。

我们不接受外来的以53号端口为目的的UDP包,也就是说,我们不想接受外来的DNS查询。其实,规则已写好了,我只是把他给注释掉了。假如您想把防火墙作为一台允许Internet访问的DNS 服务器,那就把注释符号去掉。

就我个人而言,我会打开123号端口,他对应的协议是network time protocol,简称NTP 。我们能够利用这个协议和某台具备精确时间的时间服务器联系,以配置本机的时间。您们中的大部分可能用不到此协议,所以我也把他注释掉了,虽然我已写出了规则。

我打开了2074号端口,他是某些实时的多媒体应用程式使用的。比如speak freely ,您能够用这个程式通过音箱、麦克风或耳麦和其他人进行实时交谈。假如您无需,就把这条规则注释掉吧。

端口4000相应的协议是ICQ协议,由ICQ使用,世界上使用最广泛的聊天程式之一,“地球人都知道”。Linux上至少有2-3种不同的ICQ克隆。我想不必解释为什么要开放这个端口了吧。(译者注:国产的聊天程式,常见的是QQ(端口8000),现在又有了UC(端口3001)等。)

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!