学习于:
起因
巡查站点时,发现主机CPU长时间占用100%,查日志几小时内xxxx次错误登录信息:
There were xxxx failed login attempts since the last successful login.
找日志参考资料:
Linux系统的日志,都保存在/var/log目录下:
/var/log/boot.log:记录了系统在开机引导过程中(开机自检过程显示在屏幕上)发生的事件
/var/log/lastlog:记录最后一次用户成功登陆的时间、登陆IP等信息
/var/log/messages:记录Linux操作系统常见的系统和服务错误信息
/var/log/secure:Linux系统安全日志,记录用户和工作组变化情况、用户登陆认证情况
/var/log/btmp:记录系统登陆失败的用户、时间以及远程IP地址
/var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看
/var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看
/var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件
/var/log/syslog或/var/log/messages 存储所有的全局系统活动数据,包括开机信息。基于 Debian 的系统如 Ubuntu 在 /var/log/syslog中存储,而基于RedHat的系统如RHEL或CentOS 则在/var/log/messages 中存储。
/var/log/auth.log或/var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在/var/log/auth.log 中存储认证信息,而RHEL或CentOS 则在/var/log/secure 中存储。
本次需要查看的是:/var/log/btmp
查看发起攻击的IP和攻击次数
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
安装fail2ban
如果你用证书登录,那啥都不用安装。密码登录的,还是安全第一。
有两个比较常用的软件,可以安装在服务器上:
- fail2ban(支持多种协议,登录失败N次后拉黑IP)
- denyhosts(支持SSH,自动屏蔽非法IP连接)。
两款软件的对比参考:https://serverfault.com/questions/128962/denyhosts-vs-fail2ban-vs-iptables-best-way-to-prevent-brute-force-logons。fail2ban更全面,那就安装fail2ban。wiki在此:https://en.wikipedia.org/wiki/Fail2ban。
fail2ban安装配置教程:
https://linux.cn/article-5067-1.html
http://www.cnblogs.com/jasmine-Jobs/p/5927968.html
CentOS7中安装:
yum install fail2ban
修改规则:/etc/fail2ban/jail.local
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24
# 客户端主机被禁止的时长(秒)
bantime = 86400
# 客户端主机被禁止前允许失败的次数
maxretry = 5
# 查找失败次数的时长(秒)
findtime = 600
mta = sendmail
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]
# Debian 系的发行版
logpath = /var/log/auth.log
# Red Hat 系的发行版
logpath = /var/log/secure
# ssh 服务的最大尝试次数
maxretry = 3
按以上规则,fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在24小时内一直被禁止访问 SSH 服务。这个事件也会通过sendemail发送邮件通知。
重启fail2ban服务,测试是否可用
重启:systemctl restart fail2ban
测试服务可用性:fail2ban-client ping
如果有响应:Server replied: pong,表示成功。
测试暴力破解防护是否有效:用错误的密码来用SSH连接到服务器模拟一个暴力破解攻击
查看fail2ban日志:tail -f /var/log/fail2ban.log
查看fail2ban当前活动的监狱列表:
fail2ban-client status
查看fail2ban指定监狱状态(例如ssh-iptables):
fail2ban-client status ssh-iptables
设置 Fail2ban 自动启动
systemctl enable fail2ban