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

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

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

对上面的例子应该考虑再全面些,现在更有一个问题没解决,就是防火墙自己要访问HTTP服务器时会发生什么,能正常访问吗?您觉得呢:)很可惜,现在的配置还是不行,仔细想想就明白了。我们这里讨论的基础都是假设机子访问的是HTTP服务器的外网地址,但这个外网地址其实就是防火墙对外的地址,所以当防火墙访问这个外网地址时,就是访问他自己。防火墙上假如有HTTP服务,那客户机就会看到页面内容,但是这不是他想看到的(他想要的在DNAT上了),假如没有HTTP服务,客户就只能收到错误信息了。前面给出的规则之所以不起作用是因为从防火墙发出的请求包不会经过那两条链。还记得防火墙自己发出的包经过哪些链吧:)我们要在nat表的OUTPUT链中添加下面的规则:

iptables -t nat -A OUTPUT --dst $INET_IP -p tcp --dport 80 -j DNAT \ --to-destination $HTTP_IP

有了最后这条规则,一切都正常了。和HTTP服务器不在同一个网的机子能正常访问服务了,和他在一个网内的机子也能够正常访问服务了,防火墙本身也能正常访问服务了,没有什么问题了。这种心情,套用《大话西游》里的一句话,就是“世界又清净了”。(不要说您不知道什么是《大话西游》)

Note

我想大家应该能明白这些规则只说明了数据包是如何恰当地被DNAT和SNAT的。除此之外,在 filter表中还需要其他的规则(在FORWARD链里),以允许特定的包也能经过前面写的(在POSTROUTING链和 OUTPUT链里的)规则。千万不要忘了,那些包在到达FORWARD链之前已在PREROUTING链里被DNAT过了,也就是说他们的目的地址已被改写,在写规则时要注意这一点。


6.5.3. DROP target

顾名思义,假如包符合条件,这个target就会把他丢掉,也就是说包的生命到此结束,不会再向前走一步,效果就是包被阻塞了。在某些情况下,这个target会引起意外的结果,因为他不会向发送者返回任何信息,也不会向路由器返回信息,这就可能会使连接的另一方的sockets因苦等回音而亡:) 解决这个问题的较好的办法是使用REJECT target,(译者注:因为他在丢弃包的同时还会向发送者返回一个错误信息,这样另一方就能正常结束),尤其是在阻止端口扫描工具获得更多的信息时,能够隐蔽被过滤掉的端口等等(译者注:因为扫描工具扫描一个端口时,假如没有返回信息,一般会认为端口未打开或被防火墙等设备过滤掉了)。还要注意假如包在子链中被DROP了,那么他在主链里也不会再继续前进,不管是在当前的表还是在其他表里。总之,包死翘翘了。


6.5.4. LOG target

这个target是专门用来记录包地有关信息的。这些信息可能是非法的,那就能够用来除错。LOG会返回包的有关细节,如IP头的大部分和其他有趣的信息。这个功能是通过内核的日志工具完成的,一般是syslogd。返回的信息可用dmesg阅读,或能够直接查看syslogd的日志文档,也能够用其他的什么程式来看。LOG对调试规则有很大的帮助,您能够看到包去了哪里、经过了什么规则的处理,什么样的规则处理什么样的包,等等。当您在生产服务器上调试一个不敢确保100%正常的规则集时,用LOG代替DROP是比较好的(有周详的信息可看,错误就容易定位、解决了),因为一个小小的语法错误就可能引起严重的连接问题,用户可不喜欢这样哦。假如您想使用真正地扩展日志地话,可能会对ULOG target有些兴趣,因为他能够把日志直接记录到MySQL databases或类似的数据库中。

Note

注意,假如在控制台得到的信息不是您想要的,那不是iptables或Netfilter的问题,而是 syslogd 配置文档的事,这个文档一般都是/etc/syslog.conf。有关这个问题的更多信息请查通过man syslog.conf查看。

LOG现在有5个选项,您能够用他们指定需要的信息类型或针对不同的信息设定一些值以便在记录中使用。选项如下:

Table 6-17. LOG target options

Option--log-level
Exampleiptables -A FORWARD -p tcp -j LOG --log-level debug
Explanation告诉iptables syslog使用哪个记录等级。记录等级的周详信息能够查看文档syslog.conf,一般来说有以下几种,他们的级别依次是:debug,info,notice,warning,warn,err,error,crit,alert, emerg,panic。其中,error和err、warn和warning、panic和emerg分别是同义词,也就是说作用完全相同的。注意这三种级别是不被赞成使用的,换句话说,就是不要使用他们(因为信息量太大)。信息级别说明了被记录信息所反映的问题的严重程度。任何信息都是通过内核的功能被记录的,也就是说,先在文档 syslog.conf里配置kern.=info /var/log/iptables,然后再让任何关于iptables的LOG信息使用级别info,就能够把任何的信息存入文档/var/log/iptables内。注意,其中也可能会有其他的信息,他们是内核中使用info 这个等级的其他部分产生的。有关日志的周详信息,我建议您看看syslog

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