Linux服务器老是被暴力破解,用这个工具来加强防护
背景
在云计算时代大力发展的今天,不少企业纷纷将自家的业务迁到云端,不仅如此,个人用户也可以买到非常便宜的ECS(Elastic Compute Service 弹性计算服务)或VPS(Virtual Private Server 虚拟专用服务器),后者也被亲切的称为"小鸡",特别是指那种128M256M的小内存VPS,使得人人上云的成本越来越小。
举个例子,近期的双十一,船长也是白嫖到一台一年的国内轻量云服务器,不仅仅没花钱甚至还赚了,就问你敢不敢信?!比如某国内的云厂商的活动,新用户一年才60元,相当于60块租了一年云端的电脑,妥妥的白菜价!
言归正传,如果把上云称为搬家,VPS(或其它云服务器的称呼)就是它的家,我们手里的ssh密钥或登录凭证就是打开这扇门的钥匙。有家自然就有盗贼惦记,原理就是不断的猜测你服务器的密码,直到猜对为止。如果确实想要保护服务,请将服务配置为基于公/私钥的身份验证方式。
复现
猜测密码的过程可能是你的ssh密码,也有可能是你的邮箱密码。我这里以常用的ssh演示。
# 实时查看日志[root@blog ~]# tail -f /var/log/secure我在另一台电脑上,尝试用错误的密码来登录,可以看到我每输错一次,就会有一条失败日志产生。
当有大量的电脑发起登录请求时,不断地猜测密码不仅会有猜出密码的风险,甚至会大量消耗CPU资源。
处理
做为一名优秀地管理员,这种问题不应该等到机器瘫痪了再来,该出手时就出手。
1.简单处理
如果经常是同一个IP来爆破,可以使用防火墙加入黑名单中。
永久配置:--permanent--add-source=网段地址--add-service=协议# 例子# 拒绝网段或单个IP访问firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24firewall-cmd --permanent --zone=block --add-source=172.34.4.207firewall-cmd --permanent --zone=block --add-service=httpfirewall-cmd --permanent --zone=block --add-service=ftp# 重载生效firewall-cmd --reload# 删除不需要的firewall-cmd --permanent --zone=block --remove-source=172.34.4.207或者把IP访问/etc/hosts.deny文件中,你再用此ip登录就不行了。
vim /etc/hosts.deny # 以如下的形式添加内容sshd:213.136.88.159sshd:207.154.196.169sshd:167.172.188.48sshd:45.133.1.78sshd:206.81.23.148……稍微高级的点的方法,也可以使用脚本分析日志,当IP失败设定次数时,加到此文件中。此种方法可参照我前面的文章。
2.faill2ban
使用fail2ban来自动化处理异常登录请求。安装它使用以下命令:
# ubuntusudo apt-get install fail2ban# centos/rhelsudo yum -y install fail2ban常用的配置选项:
root@ubuntu:~# fail2ban-client --helpUsage: /usr/bin/fail2ban-client [OPTIONS] <COMMAND>Option: -c <DIR> 设置配置目录,服务端在启动时将从该目录下搜索并加载配置文件。 -s <FILE> 设置服务端套接字文件路径。 -p <FILE> 设置服务端启动时应该创建的进程文件路径。 -d 转储配置,用于调试,使用该选项则会将配置信息显示到屏幕上。 -i 以交互的方式操作Fail2ban。 -v 较详细的显示操作信息。 -q 较少的显示操作信息。 -x 设置服务端在启动前将删除套接字文件。 -b 设置服务端将在后台运行。 -f 设置服务端将在前台运行。 -h, --help 显示帮助信息。 -V, --version 显示版本信息。Command: start 启动服务端和所有监禁(jail)。 reload 重载所有配置。 reload <JAIL> 重载指定的监禁(jail)配置。 stop 停止服务端和所有监禁(jail),当Fail2ban服务交 由"systemctl"托管时,使用该命令将会导致服务端重启。 status 获取当前监禁(jail)的运行状态。 ping 测试服务端的活跃状态。helpreturn this output version 显示服务端的版本。应用实例
配置文件路径:
[root@blog ~]# vim /etc/fail2ban/jail.local.conf# 拷贝默认配置sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo vim /etc/fail2ban/jail.local# 只关注sshd这部分,其它的原理类似,自成一个板块[sshd]enabled = true# 是否开启动filter = sshd # 过滤sshd协议port = 22 # 监控端口22,根据自己服务器修改ssh端口 action = %(action_mwl)s # 执行动作logpath = /var/log/secure # 监控日志来源maxretry = 5 # 最大尝试次数bantime = 18000 # 禁止IP地址的持续时间(“ m”代表分钟)。如果键入的值不带“ m”或“ h”(代表小时),则将其视为秒。值-1将永久禁止IP地址。要非常小心,不要将自己永久锁定在自己的面前。findtime = 1800 # “尝试失败次数过多”的值。如果要把自己的IP加入到白名单,请ignoreip后面加上自己的IP。
[DEFAULT]
ignoreip = xxx.xxx.xxx.xxx
启动运行
# 设置开机自启动sudo systemctl enable fail2ban# 启动sudo systemctl start fail2ban# 查看运行状态sudo systemctl status fail2ban测试一下
任意找一个IP测试一下(注意:不要自己把自己关在外面了!!!)
# 查看状态sudo fail2ban-client status# 查看sshd监控状态sudo fail2ban-client status sshd可以看到,我在执行多次失败操作后,我的成ip被成功禁止登录了。
被禁止后有提示被拒绝登录,至此!
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据