如何即时封锁想要用“暴力密码”破解 SSH 的入侵者
本程式无法处理 IPv6 的问题,请改用功能更强大、更完整的 Fail2Ban,请参考本站文章:
粉久之前写了一支 Log 分析的程式,可以统计、分析前一天系统的 Log,在这一份报表里面,总是会看到有一些人使用“暴力法”,尝试以各种帐号、密码,借由 SSH 或 FTP 入侵服务器! 而我只能看着“前一天”的报表,分析他们用过哪些帐号、统计他们尝试了几次…实在有点不是滋味。
我一直在找这样的程式,这个程式的功能,就是可以及时把使用“暴力法”的入侵者给封锁掉。我找这样的程式已经很久了,我也认为应该会有这样的程式才对,可是就是找不着! (如果你用过这样的程式,请不要笑我)
程式原理
于是我就自己用 Perl 写了一支程式,程式的原理,并不是每隔五分钟就去分析系统 Log,因为我觉得这样对系统太操了,我希望可以在用户准备登入时,才去分析该用户最近的登入状况。
这整个流程,首先借由 TCP_Wrappers 的机制 (hosts.deny 及 hosts.allow) 在用户登入时触发本程式,然后程式会分析该用户最近这一小时登入的状况,对于登入失败 10 次的用户,直接以防火墙封锁其 IP,然后程式会寄出一封电子邮件通知管理者。
安装步骤
- 下载 block_ssh.pl,将档案存放在 /usr/bin/,并将权限设为 755:
cd /usr/bin wget http://here.vixual.net/files/source/block_ip/block_ssh_pl mv block_ssh_pl block_ssh.pl chmod 755 block_ssh.pl
- 编辑 /etc/hosts.allow,加入:
sshd : ALL : spawn (/usr/bin/block_ssh.pl %c %d)
- 这样就完成了,如有必要,请自行修改 block_ssh.pl 里相关的参数。
程式缺点
- 目前只有针对 ssh 做分析。
- 遇到不断变换 IP 的骇客就没辄了。
SSH 的安全设定
建议修改 /etc/ssh/sshd_config,做以下设定:
#只允许用户使用 SSH2 协定登入 Protocol 2 #禁止 root 使用 SSH 登入 PermitRootLogin no #最多可以同时开启 10 个连线要求 MaxStartups 10
感谢大大分享,
小弟也受惠良多。
THanks You, I 'll try it!
你好,我想要尝试用你的方式抵挡ssh 攻击,但是目前找不到 block_ssh.pl 的档案可以下载?
想请问能否mail 一份给我试试看,谢谢囉^^
WECHI 您好:
文章我已经更新过了,照着步骤执行即可下载到 block_ssh.pl。
由secure.log去分析然后加入iptable drop的方式应该算是简单而传统的方式
如果资料量多的话 会拖慢连线速度吧 因为iptables变长了
再者 最近发现 try的不是连续试 而是1-2小时才试一次
一直在用knockd的方法,但却一直不成功 =.=
你好
已经有这种程式囉
监看log档然后搭配iptable来阻挡暴力法入侵
这程式名子叫fail2ban
教学可参考下列网址
http://gentoo-wiki.com/HOWTO_fail2ban
满好用的
可以阻挡的项目也很多
例如ssh, ftp, sasl...等
满不错用的
大家参考一下^^