背景
由于服务器曾被人爆破密码登录,登录成功后损坏了服务器数据,为更好的判断是否有异常登录,因此需要在有用户登录Linxu系统时自动进行邮件告警
本人使用的是Linux的PAM模块、搭配QQ邮箱实现邮件告警,系统是CentOS7.6,下面是操作步骤
开搞
QQ邮箱开启SMTP服务和生成授权码
1.登录QQ邮箱,点击设置,在设置菜单下找到账号
2.找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”点击”开启服务“
3.身份验证通过后,可以得到授权码一个
此时,我们已开启QQ邮箱的SMTP服务并得到登录QQ邮箱的授权码
编写脚本
1.创建1个脚本,例如 login_alert.sh,用于发送邮件告警,并确保脚本具有执行权限
touch /usr/local/bin/login_alert.sh
chmod +x /usr/local/bin/login_alert.sh
2.编辑脚本并输入如下内容
vi /usr/local/bin/login_alert.sh
#!/bin/bash
# SMTPS服务和端口
SERVER="smtp.qq.com:465"
# 邮箱认证信息:QQ邮箱和QQ邮箱授权码
USERNAME="xxxxxx@qq.com"
PASSWORD="rpixxxxxxillcbbgc"
# 发送邮箱,主送邮箱和抄送者邮箱信息
SENDER="xxxxxx@qq.com" #发送邮箱
TO="xxxxxx@qq.com" #主送邮箱
CC="" #抄送邮箱
# 邮件信息
F_date=$(date +"%Y-%m-%d %H:%M:%S") # 获取当前时间,并按照指定格式格式化
HostName=$(hostname) #登录主机名
BeiZhu=$PAM_TYPE #$PAM_TYPE 是一个PAM中的环境变量,用于指示PAM模块当前的类型
# 邮件主题
SUBJECT="成功登录系统提示"
# 邮件正文
BODY="<html><body>
<p>以下是刚登录系统的日志,<span style='color:red;'>请确认是本人操作:</span></p>
<table border='1'>
<tr>
<th>登录用户</th>
<th>登录时间</th>
<th>源IP</th>
<th>主机名</th>
<th>备注</th>
</tr>
<tr>
<td>$PAM_USER</td>
<td>$F_date</td>
<td>$PAM_RHOST</td>
<td>$HostName</td>
<td>$BeiZhu</td>
</tr>
</table>
<p></p>
<p>说明:此邮件仅作登录系统提醒!!!</p>
</body>
</html>"
# 构造电子邮件,有抄送时添加 Cc: $CC\n 到 $BODY 之前
MESSAGE="Subject: $SUBJECT\nMIME-Version: 1.0\nContent-type: text/html\nFrom: $SENDER\nTo: $TO\n$BODY"
# 发送邮件
if [ "$PAM_TYPE" != "close_session" ];then
# 有抄送时添加 --mail-rcpt "$CC" \
curl --url "smtps://$SERVER" \
--ssl-reqd \
--mail-from "$SENDER" \
--mail-rcpt "$TO" \
--user "$USERNAME:$PASSWORD" \
--insecure \
--upload-file <(echo -e "$MESSAGE")
fi
exit 0 #用于表示脚本正常结束,避免脚本执行异常导致登录系统失败
3.配置PAM模块
vi /etc/pam.d/sshd
在 /etc/pam.d/sshd 追加如下信息
session required pam_exec.so /usr/local/bin/login_alert.sh
4.重启SSHD服务
systemctl restart sshd