【有关新概念运维】在日常的系统管理运维工作中,每个人对于系统、工具、应用、命令、架构等方面都会有自己的理解。理解方式的不同也意味着不同的认知,因此,这种理解方式的交流,也可能碰撞出更多思维的火花,让每个人从另一个角度了解自己每天从事的工作。51CTO系统频道从日常和运维人员的交流中收集这些理解方式,组合成短文集,名为《新概念运维》。
iptables这个防火墙工具,相信运维朋友们几乎都在使用。大家都知道iptables对于进来的信息包有三种处理方法,那就是ACCEPT、DROP、REJECT。ACCEPT很容易理解,而REJECT和DROP的区别是什么?某天听到Sery的解释,感觉说的很容易理解:
“就好象骗子给你打电话,drop就是直接拒收。reject的话,相当于你还给骗子回个电话。”
其实对于到底是使用DROP还是REJECT,从很久以前开始就非常多的人提出这方面的疑问。REJECT其实就比DROP多返回一个ICMP错误信息包,两个策略各有优劣,简单总结如下:
DROP比REJECT好在节省资源,而且延缓黑客攻击的进度(因为不会给黑客返回任何有关服务器的信息);坏在容易让企业的网络问题难以排查,而且在DDoS攻击的情况容易耗尽所有的带宽。
REJECT比DROP的好处在于容易诊断和调试网络设备或防火墙造成的问题;坏处上面也说了,你给骗子回个电话,相当于暴露了自己的服务器信息。
所以一般的建议是在上游防火墙中使用REJECT,在比较危险的面向外网的基础防火墙上,使用DROP要相对安全一些。
再说个跟这事儿有点关系的故事。话说某IT运维群中制定了这样一条群规:
工作时间 闲聊 drop 非工作时间 闲聊 accept 违反规定 Any kill
可能因为IT运维是男性居多的缘故,隔了几天,发现群规被修改成了:
露点图片 any accept 工作时间 闲聊 drop 非工作时间 闲聊 accept 违反规定 Any kill
执行了几天之后,群主被迫踢出了很多成员,甚至很多老成员也被波及。于是商讨之后,现在的群规是:
anytime anytalk accept
经笔者跟群主商讨,群主表示欢迎感兴趣的ITers加入该群一起讨论技术、讨论人生。群号是158144617,能遵守初始版群规的人员优先录取~
更新:由于第一个群已满,群主正在协调部分人员转移到新群,群号为 154743972。
《新概念运维》栏目接受投稿,有意者请联系 yangsai@51cto.com 。
#p#
【相关资料】netfilter/iptables的工作原理
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的 链(chain)中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter和 iptables 组成。
netfilter 组件也称为 内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为 用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
通过使用用户空间,可以构建自己的定制规则,这些规则存储在内核空间的信息包过滤表中。这些规则具有 目标,它们告诉内核对来自某些源、前往某些目的地或具有某些协议类型的信息包做些什么。如果某个信息包与规则匹配,那么使用目标 ACCEPT 允许该信息包通过。还可以使用目标 DROP 或 REJECT 来阻塞并杀死信息包。对于可对信息包执行的其它操作,还有许多其它目标。
根据规则所处理的信息包的类型,可以将规则分组在链中。处理入站信息包的规则被添加到 INPUT 链中。处理出站信息包的规则被添加到 OUTPUT 链中。处理正在转发的信息包的规则被添加到 FORWARD 链中。这三个链是基本信息包过滤表中内置的缺省主链。另外,还有其它许多可用的链的类型(如 PREROUTING 和 POSTROUTING ),以及提供用户定义的链。每个链都可以有一个 策略,它定义“缺省目标”,也就是要执行的缺省操作,当信息包与链中的任何规则都不匹配时,执行此操作。
建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。当信息包到达防火墙时,内核先检查信息包的头信息,尤其是信息包的目的地。我们将这个过程称为 路由。
如果信息包源自外界并前往系统,而且防火墙是打开的,那么内核将它传递到内核空间信息包过滤表的 INPUT 链。如果信息包源自系统内部或系统所连接的内部网上的其它源,并且此信息包要前往另一个外部系统,那么信息包被传递到 OUTPUT 链。类似的,源自外部系统并前往外部系统的信息包被传递到 FORWARD 链。
接下来,将信息包的头信息与它所传递到的链中的每条规则进行比较,看它是否与某条规则完全匹配。如果信息包与某条规则匹配,那么内核就对该信息包执行由该规则的目标指定的操作。但是,如果信息包与这条规则不匹配,那么它将与链中的下一条规则进行比较。最后,如果信息包与链中的任何规则都不匹配,那么内核将参考该链的策略来决定如何处理该信息包。理想的策略应该告诉内核 DROP 该信息包。
netfilter/iptables信息包过滤流程(来源)
【编辑推荐】