新概念运维之REJECT和DROP的区别

原创
运维 系统运维
大家都知道iptables对于进来的信息包有三种处理方法,那就是ACCEPT、DROP、REJECT。ACCEPT很容易理解,而REJECT和DROP的区别是什么?REJECT比DROP多返回一个ICMP错误信息包,这到底是什么意思呢?本期新概念运维,你将看到一个非常容易理解的解读。

【有关新概念运维】在日常的系统管理运维工作中,每个人对于系统、工具、应用、命令、架构等方面都会有自己的理解。理解方式的不同也意味着不同的认知,因此,这种理解方式的交流,也可能碰撞出更多思维的火花,让每个人从另一个角度了解自己每天从事的工作。51CTO系统频道从日常和运维人员的交流中收集这些理解方式,组合成短文集,名为《新概念运维》。

iptables这个防火墙工具,相信运维朋友们几乎都在使用。大家都知道iptables对于进来的信息包有三种处理方法,那就是ACCEPT、DROP、REJECT。ACCEPT很容易理解,而REJECT和DROP的区别是什么?某天听到Sery的解释,感觉说的很容易理解:

“就好象骗子给你打电话,drop就是直接拒收。reject的话,相当于你还给骗子回个电话。”

[[31593]]

其实对于到底是使用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 该信息包。

图 1. 信息包过滤过程
netfilter/iptables信息包过滤流程(来源

【编辑推荐】

  1. IT运维 那些不为人知的辛苦工作
  2. 51CTO电子杂志《Linux运维趋势》第8期发布
  3. 新概念运维之强迫症会害死系统管理员
  4. 新概念运维之No news is good news
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2011-04-22 11:00:17

运维

2011-06-14 09:12:12

管理员文件

2012-09-27 10:18:25

机房运维监控

2011-07-13 17:45:14

新概念运维备份

2011-05-04 09:27:45

系统管理员强迫症

2019-03-15 10:13:10

运维云计算运营

2011-08-05 14:11:28

技术周刊

2011-07-11 12:13:47

2009-06-28 21:09:16

IT云计算物联网

2009-10-13 15:53:43

机房管理系统

2014-08-04 10:10:35

IT运维自动化运维

2018-11-20 15:18:00

SDN传统网络网络运维

2020-12-30 05:34:25

监控PrometheusGrafana

2016-10-24 13:45:18

2009-08-31 22:52:26

IT运维管理网络设备摩卡软件

2020-05-07 15:58:50

运维云计算运维传统运维

2014-09-17 11:16:42

2011-11-14 09:17:14

Linux运维ClusterShel

2014-09-17 10:34:47

2011-05-24 09:28:17

点赞
收藏

51CTO技术栈公众号