iptables 的 DROP和reject的区别

在学习iptables的时候,我们知iptables在处理数据包的时候,常用的方式有ACCEPT\DROP\REJECT。ACCEPT这个很好理解,可是DROP和REJECT都是拒绝。这两个的区别是什么呢?带着这个问题。我配置了两种方式,通过抓取数据包来分析查看下他们的区别。

案例

最近全球范围内遭遇大规模的勒索敲诈木马病毒的攻击,黑客利用NSA 黑客武器库的工具进行了变种。专门针对windows操作系统的文件共享服务(samba)服务的远程代码植入漏洞进行攻击。samba服务的端口是139和445,其中445端口是用来进行数据传输的。黑客利用这个漏洞可以攻击任意开启该服务的windows漏洞,并通过非对称加密技术对系统内所有文件进行加密。以目前的技术是根本没什么办法对数据进行恢复的。其实早在今年年初,微软就发布了该漏洞的补丁,但由于国内你懂的原因,大部分使用Windows的都是盗版,这其中包括一些学校和企业,所以。一般这类系统都是禁止Windows更新的。当然,如果是正版的,没有打补丁,也会遭遇该木马病毒的攻击。

1

好了。以上面这个案例,我们要在Linux上通过iptables 对445端口进行禁止,谈一谈DROP和reject的区别

DROP

1.我们直接在Linux主机上输入

root@raspberrypi:/home/pi# iptables -A INPUT -p tcp --dport 445 -j DROP 

2.然后通过telnet 445端口,并且抓包

2

我们发现,DROP后,连接Linux主机,目标主机没有任何数据包的回复,客户端发起了SYN,然后就没有然后了。
3

REJECT

我们删除DROP规则

root@raspberrypi:/home/pi# iptables -D INPUT -p tcp --dport 445 -j DROP 

改成

root@raspberrypi:/home/pi# iptables -A INPUT -p tcp --dport 445 -j REJECT 

然后再次通过telnel 445端口,进行抓包,我们发现客户端在于服务器直接还有几个ICMP的包,虽然是目标主机不可达。

4

从上述对比中我们可以很明显的看出了区别,那么什么时候会用DROP 什么时候用REJECT呢?
其实对于到底是使用DROP还是REJECT,从很久以前开始就非常多的人提出这方面的疑问。REJECT其实就比DROP多返回一个ICMP错误信息包,两个策略各有优劣,简单总结如下:
DROP比REJECT好在节省资源,而且延缓黑客攻击的进度(因为不会给黑客返回任何有关服务器的信息);坏在容易让企业的网络问题难以排查,而且在DDoS攻击的情况容易耗尽所有的带宽。
REJECT比DROP的好处在于容易诊断和调试网络设备或防火墙造成的问题;坏处上面也说了,你给骗子回个电话,相当于暴露了自己的服务器信息。
所以一般的建议是在上游防火墙中使用REJECT,在比较危险的面向外网的基础防火墙上,使用DROP要相对安全一些。

写在后面

上面所说的漏洞,对于Linux主机没有影响,不过如果希望禁止samba服务,可以

-A INPUT -p tcp -m tcp --dport 135:139 -j DROP
-A INPUT -p tcp -m tcp --dport 445 -j DROP

对于Windows主机,可以打开控制面板,找到防火墙,添加入站规则,阻止端口的数据通信。