Linux SSH登录/密码错误邮件提醒

想给服务器加一个功能,每当有人SSH成功登录都给管理员发封邮件作为提醒。 同时若有人暴力破解密码达到一定次数封禁对方IP数小时并且同时也发邮件提醒。

服务器发邮件用到了sendmail包:

sudo apt install sendmail

首先检查OpenSSH是否开启了PAM,检查”/etc/ssh/sshd_config” 看下UsePAM是否非yes并且未被注释掉,我的服务器默认是正确的

然后创建一个login-notify.sh文件,我放在了/etc/ssh/,填入下边内容:

#!/bin/sh

# Change these two lines:
sender=""
recepient=""

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="`env`"
    echo "$message" | sendmail -r "$sender" -s "$subject" "$recepient"
fi

其中sender和recepient为发件用的地址和收件邮箱, 根据需求更改

然后赋予脚本执行权限:

sudo chmod +x login-notify.sh

最后一步将下面一行语句添加到/etc/pam.d/sshd

session optional pam_exec.so seteuid /path/to/login-notify.sh

其中optional指的是假设脚本执行不成功,SSH也可以成功登录。这样写有助于测试方便,可以将optional换为required,但是注意,假设脚本有问题不能成功执行,那么就永远不能登录SSH了。

 

登录错误的提示使用到了fail2ban:

sudo apt install fail2ban

在安装好fail2ban后默认配置已经能够非常好的抵御SSH扫描攻击,我没记错的话密码输入3次就自动将IP拉黑4小时。所以建议所有服务器都安装这个工具,哪怕是不愿意去手动配置的情况下,直接运行上边一行命令就好。

在/etc/fail2ban复制jail.conf一份命名为jail.local并打开,

然后里边bantime,maxretry等可以修改,最重要是修改destemail和sender,然后保存。之后执行以下命令刷新:

systemctl restart fail2ban
fail2ban-client status
fail2ban-client status sshd

 

 

Reference:

https://askubuntu.com/questions/179889/how-do-i-set-up-an-email-alert-when-a-ssh-login-is-successful

 

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.