服务器防护(ubuntu)
最近发现服务器一直在被暴力破解,具体情况看我上一章节我的服务器被暴力破解,所以在网上整理下检测服务是否已经被别人破解成功和如何防护的方法
1. 如何确认已经被暴力破解
# 查看最近登录成功的Ip, 陌生的 IP 或可疑用户成功登录,则可能已经被攻破
grep "Accepted" /var/log/auth.log
# 查看登录失败的IP,如果发现大量不同 IP 反复尝试不同用户,则说明有人正在暴力破解
grep "Failed password" /var/log/auth.log | tail -20
# 过滤攻击的IP和使用的用户
cat /var/log/auth.log | grep 'Invalid' | awk '{print $6 "\t" $8}' | sort
# 列出攻击最多的IP
cat /var/log/auth.log | grep 'Invalid' | awk '{print $8}' | sort | uniq -c | sort -nr | head -10
# 列出攻击最多的用户
cat /var/log/auth.log | grep 'Invalid' | awk '{print $6}' | sort | uniq -c | sort -bn
# 查看bash命令历史,攻击者如果已经入侵,可能会留下痕迹,如果发现陌生的命令(如 wget 下载木马、curl 请求外部服务器、useradd 添加新用户等),说明服务器可能已经被入侵
cat ~/.bash_history | tail -20
# 检查是否有异常的用户,如果发现不认识的用户(比如 backup2、testuser),可能是攻击者创建的。
cat /etc/passwd | awk -F: '{print $1}'
# 查看新添加的用户,如果看到最近创建的陌生用户,说明可能已被入侵
sudo awk -F: '{print $1, $3, $6, $7}' /etc/passwd | sort -nk2 | tail -10
# 检查是否有异常的 SSH 密钥,如果发现陌生的公钥,说明服务器可能已经被攻破
cat ~/.ssh/authorized_keys
# 检查是否有异常进程,如果发现不认识的进程(如 kthreadd、xmrig,可能是挖矿木马),说明可能被入侵。
ps aux --sort=-%cpu | head -10
# 检查是否有隐藏进程,如果有陌生端口监听,可能是后门程序。
sudo lsof -i -n -P | grep LISTEN
# 检查定时任务 (cron) 是否被篡改, 如果发现不认识的 cron 任务(比如 wget 远程下载或 nc 反向连接),服务器可能已经被攻破。
crontab -l
sudo ls -la /etc/cron* /var/spool/cron
2.防护
1. 修改ssh配置提升安全性
# vim /etc/ssh/sshd_config
# 修改禁止root用户登录ssh
PermitRootLogin no
# 只允许特定用户登录
AllowUsers ubuntu
# 修改ssh默认的端口
Port 2222
# 重启ssh服务
sudo systemctl restart ssh
2. 安装fail2ban防护
# 安装fail2ban
apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.back
vim /etc/fail2ban/jail.conf
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
# IP 被封禁的时间,单位秒
bantime = 600
#日志文件中,在 findtime 时间段内,ip 出现超过 maxretry 次数,就会封禁该 IP
findtime = 600
maxretry = 3
# 重启服务
systemctl restart fail2ban
# 服务状态
systemctl status fail2ban
# 监控ssh的当前被禁止的 IP 地址
fail2ban-client status sshd
# 解封IP
fail2ban-client set sshd unbanip IP_ADDRESS