我以前见过这种情况,当你错误地登录 Linux 机器时,当你成功登录时,它会通知你有人试图以你的身份登录但没有成功。我需要做什么才能在我的机器上实现这种情况?
答案1
特别是对于 SSH,您可能需要确保已启用日志记录/etc/ssh/sshd_config
。
否则,这是一个模糊的问题,取决于您希望如何收到警报以及系统及其配置的详细信息,甚至他们如何登录。您可以只跟踪日志文件:这tail -f /var/log/messages
很常见,或者journalctl -f
在某些 Linux 系统上。一个线程解决方案电子邮件警报在 ServerFault 上。
在大多数现代 GNU/Linux 系统上,这应该可以让你获得过去一小时内使用 SSH 或 TTY 的每次失败尝试的摘要:
journalctl --since="$(date -d -1hours +\%F\ \%H):00:00" --until="$(date +\%F\ \%H):00:00" | grep -iE "Failed (pass|log)"
实际上,这涵盖了从上一小时到当前小时的数据。您可以设置一个 crontab 进程,每小时检索一次并通过电子邮件发送给您。
条目看起来如下:
Mar 21 06:16:23 yourhostname sshd[29477]: Failed password for root from 103.41.125.20 port 35243 ssh2
Mar 21 06:16:33 yourhostname login[317]: FAILED LOGIN 1 FROM tty4 FOR bolwerk, Authentication failure
Mar 21 06:22:29 yourhostname sshd[29695]: Failed password for invalid user poo from ::1 port 60139 ssh2
您可以把下面的脚本放入 crontab 中来收集这些信息:
#!/bin/sh
# gather journal information in time frame
export CRUFT=$(journalctl --since="$(date -d -1hours +\%F\ \%H):00:00" --until="$(date +\%F\ \%H):00:00" | grep -iE "Failed (pass|log)")
#email settings
export EMAILFROM="From: Security Alert <[email protected]>"
export EMAILSUBJECT="Subject: Failed login Summaries from $(date -d -1hours +\%H):00 to $(date +\%H):00"
export EMAILALERTTO="[email protected]"
if [ "x$CRUFT" != "x" ]; then
echo -e "$EMAILFROM\n$EMAILSUBJECT\n\nFailed logins:\n$CRUFT" | ssmtp "$EMAILALERTTO"
fi
它假设您希望每小时发送过去一小时的失败尝试。还假设您有 journalctl,可能需要 GNU 用户空间(大多数发行版都有)。
为了使其正常工作,您需要正确配置 SSMTP。这里是一个讨论如何使用 gmail 进行此操作的链接。阅读安全知识对于 SSMTP 也是如此;如果您有共享系统,配置错误会暴露您的密码。您可能希望在配置中包含此行ssmtp.conf
:
FromLineOverride=yes
它会汇总过去一小时内的登录失败事件,并通过电子邮件发送给您。在具有标准端口的公共网络上,人们/机器人会不断尝试暴力破解不安全的盒子。如果您正确设置密码等,则不会构成太大威胁……
如果我可以提出一般性建议,那么成功登录可能更有趣。在具有标准端口的公共网络上,人们/机器人不断尝试暴力破解不安全的盒子。如果您正确设置密码等,则威胁不大……但在 /etc/profile 中放置某种警报脚本来捕获任何成功登录可能很容易。
笔记:这里是有关 journalctl 的 CentOS 文档;在许多其他 GNU/Linux 操作系统上应该类似。其他从日期命令中减去的示例,取决于您想要如何计时报告。