ssh 安全
入侵检测
检查history 日志
history # 查看操作日志
检查成功登陆用户
1️⃣ 查看密码登陆成功用户
cat /var/log/secure | grep "Accepted password for"
2️⃣ last
查看登陆信息
last # who /var/log/wtmp
检查是否存在免密登陆
1️⃣ 查看账户.ssh目录下是否存在authorized_keys文件
ls -l /home/test/.ssh/ # 登陆账户
ls -l /root/.ssh/ # root 账户
cat /root/.ssh/authorized_keys
2️⃣ 查看系统账户
cat /etc/passwd #
3️⃣ 检查ssh日志
cat /var/log/secure | grep "Invalid user" # 无效用户
cat /var/log/secure | grep "Failed password" # 失败的记录
cat /var/log/secure | grep "Failed password" | wc | l # 失败的条数
wc /var/log/secure -l # 有多少条日志
ls -lh /var/log/secure # 查看日志文件多少M 是否有大规模爆破行为
4️⃣ 检查定时任务是否存在异常情况
crontab -l # 查看当前用户的定时任务信息
sudo crontab -u root -l # 查看root账户的定时任务信息
🛠️ 修复方案
1️⃣ 修改密码强度
passwd root #设置新密码
2️⃣ 删除keys
rm -rf .ssh/authorized_keys
3️⃣ ssh校验次数限制 禁用密码登陆 修改 sshd_config
vim /etc/ssh/sshd_config
# MaxAuthTries 3
# PasswordAuthentication no
4️⃣ 锁定用户 编辑/etc/pam.d/sshd
/etc/pam.d/login
auth required pam_tally2.so deny=3 unlock_time=86400 even_deny_root root_unlock_time=86400 # 24 hours
查看锁定用户
sudo pam_tally2 --user
解除锁定
sudo pam_tally2 --user test --reset
5️⃣ 限制只允许特定ip地址访问ssh
vim /etc/hosts.allow
# sshd:192.168.1.1:allow
vim /etc/hosts.deny
# sshd:ALL
6️⃣ 限制特定用户访问 /etc/ssh/ssh_config
AllowUsers root@192.168.1.1
DenyUsers admin
7️⃣ 修改ssh 端口号/etc/ssh/ssh_config
port 22
port 5432 # 增加另外一个ssh端口号避免修改失败连接不上主机了
8️⃣ 配置防火墙
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports # 查看开放端口
监控流量,封禁IP
nethogs
apt-get install nethogs
# nethogs <interface>
ip link show
nethogs
nethogs np1s0 # check np1s0
fail2ban
apt-get install fail2ban
修改配置文件
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
修改配置
# 新增如下配置
maxretry = 3
bantime = 1d
启动 systemctl enable fail2ban
查看状态 fail2ban-client status
查看jail下被禁ip fail2ban-client status sshd
解除封禁ip fail2ban-client set sshd unbanip 192.168.1.1
配置参考
details
# /etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
banaction = iptables-multiport
banaction_allports = iptables-allports
findtime = 1d
bantime = 1d
[sshd]
:这是jail名称,应与日志文件的名称(例如/var/log/auth.log)匹配。enabled
:如果为true,则启用jail;如果为false,则禁用。port
:指定监视的端口或服务名称。在这种情况下,我们监视SSH服务的端口。logpath
:指定日志文件的位置。backend
:指定Fail2ban应该使用的后端。如果您不确定,请使用默认值。在这种情况下,我们使用sshd进程作为后端。maxretry
:定义允许尝试的最大失败登录次数。在这种情况下,如果尝试3次失败,则攻击者的IP将被禁止。banaction
:指定要采取的动作以禁止攻击者的IP。在这种情况下,我们使用iptables-multiport。banaction_allports
:在多个端口上禁止攻击者的IP时使用的操作,如果不需要,则可以省略此选项。findtime
:指定尝试登录的时间范围。在这种情况下,我们设置为1天。bantime
:指定封禁攻击者IP的时间。在这种情况下,我们也设置为1天。