使用iptables的limit模块防御暴力破解登录攻击

刚刚把上一篇文章iptables NAT+pptp-VPN发布异地位于内网的服务器写完,正准备收工,临时登录到Demo服务器上去例行检查了一下,差点被登录日志给吓尿了,这台内网的Demo机通过我VPS上的iptables3389服务发布出去才几个小时,现在windows事件日志里面就已经上千条的登录失败审核日志了;典型的3389暴力破解登录攻击;采用密码字典暴力破我的administrator帐号密码;不知道哪那么多无聊的人,天天就在那不停的扫端口,然后挂字典不停地暴力破,真实无聊至极;administrator帐号早就被我禁用了;虽然没什么大的风险,但看到不停疯长的登录日志,还是非常不爽;于是就想怎么来防御;

3389暴力攻击日志

本想直接在这台windowsDemo机上进行阻挡这些尝试暴力探测的IP地址,但发现有些不太现实,因为iptables发布的关系,在这台Demo机上看到的尝试登录的来源IP地址都变成了iptables的虚拟IP 192.168.0.1;所有到3389连接请求,包含攻击的和正常客户请求的,都是以192.168.0.1地址来连接的;所以无法按IP来屏蔽;那么也只能在VPS上想办法了屏蔽了,iptables上是能看到所有真实的请求来源IP地址的;

经过一番查询和研究,终于让我找到了iptables的一个新的功能特性,可以实现我的需求;

因为是需要在iptables上控制从Internet请求的数据包是否允许转发到Demo192.168.0.102的数据包,所以需要在 filter表的FORWARD链中进置规则,

使用iptableslimit模块,可以限制数据包在单位时间内通过的数量,超过设定的阀值,数据包将被丢弃;但因为3389的协议在正常连接成功后,传输桌面图形数据,会在一个TCP连接中持续发送大量的数据包,所以不能简单的限制访问3389端口的所有数据包,这样会影响正常的远程桌面操作;

通常暴力破解行为会持续建立多个tcp连接,并且不停的进行认证和TCP连接过程;因此可以限制访问3389端口的TCP连接中的第一个握手SYN数据包,一个SYN包代表一个新的TCP连接;所以可以限制访问3389端口SYN包在5分钟内只能建立3个连接 ,超过3个连接则判断为在进行暴力破解攻击,从第4个SYN包开始丢弃掉后面所有的SYN包,禁止建立新的TCP连接;这样就控制了暴力破解的频率,在5分钟内,最多只能建立3次连接,大大降低探测的次数!

我的iptables FORWARD链规则如下:

//记录每一个与3389端口建立新的连接的SYN数据包,记录级别为7 debug级别
#iptables -A FORWARD -p tcp -m tcp -m state --state NEW -m tcp --dport 3389 -j LOG --log-level 7

//匹配所有访问192.168.0.102的3389端口的新连接SYN数据包,并限制5分钟内,最多只能建立3个有效连接
#iptables -A FORWARD -d 192.168.0.102/32 -p tcp -m state --state NEW -m tcp --dport 3389 -m limit --limit 5/min --limit-burst 3 -j ACCEPT

//最后拒绝所有其它未知的转发数据包
#iptables -A FORWARD -j REJECT

好了,现在不仅可以从/var/log/message日志文件中看到那些访问192.168.0.102的3389端口的数据包记录了,而且Demo机那边的登录日志虽然还是产生登录失败的记录,但已经比之前频率降低了好多,差不多都是3~5分钟才出现一条记录!

Last modification:November 30th, 2017 at 07:35 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment