想给服务器加一个功能,每当有人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