前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Linux服务器登录成功提醒

Linux服务器登录成功提醒

原创
作者头像
蛋黄
发布2024-11-22 17:34:25
发布2024-11-22 17:34:25
990
举报
文章被收录于专栏:蛋黄的部落格蛋黄的部落格

本文以 Debian 系统为例,介绍如何通过 钉钉飞书邮件通知 实现服务器登录的实时提醒。原理上适用于其他 Linux 系统,需根据实际情况调整和测试。

WebHook通知

钉钉通知

1.钉钉创建群聊 → 群设置 → 机器人管理 → 添加自定义机器人

参考文档:https://open.dingtalk.com/document/orgapp/webhook-bot-offline-notice

2.打开/etc/profile.d 文件夹

代码语言:bash
复制
cd /etc/profile.d

3.编写脚本

使用前需要安装 jq

代码语言:bash
复制
sudo apt-get install jq

将以下脚本保存为 /etc/profile.d/sent_login_hook.sh:

代码语言:bash
复制
if [[ -z "${SENT_LOGIN_HOOK}" ]]; then
    # 发送钉钉消息
    webhook="替换成钉钉webhook地址"
    ip=$(curl https://ddnsip.cn)
    time=$(date +"%Y-%m-%d %H:%M:%S")
    user=$(whoami)
    loginIP=$(echo $SSH_CONNECTION | awk '{print $1}')

    msgContent="服务器登录提醒:${ip} 于 ${time} 通过 IP ${loginIP} 登录。登录用户为 ${user}。"
    post_data="{\"msgtype\": \"text\",\"text\": {\"content\": \"${msgContent}\"}}"
    wget --quiet --header "Content-Type: application/json" --post-data "${post_data}" -O - "${webhook}"

    export SENT_LOGIN_HOOK=1
fi

优化版(显示ip属地)

代码中接口有限额,求轻用

自行部署ip归属地可参考我的另一篇文章https://cloud.tencent.com/developer/article/2469522

代码语言:bash
复制
if [[ -z "${SENT_LOGIN_HOOK}" ]]; then
    # 发送钉钉消息
    webhook="替换为钉钉webhook"
    ip=$(curl https://ddnsip.cn)
    time=$(date +"%Y-%m-%d %H:%M:%S")
    user=$(whoami)
    loginIP=$(echo $SSH_CONNECTION | awk '{print $1}')
    # 获取登录IP的地理位置信息
    location_data=$(curl "https://ip.wxory.com/?ip=${loginIP}")
    nation=$(echo "$location_data" | jq -r '.result.ad_info.nation')
    province=$(echo "$location_data" | jq -r '.result.ad_info.province')
    city=$(echo "$location_data" | jq -r '.result.ad_info.city')
    # 拼接消息内容
    msgContent="服务器登录提醒:${ip}于${time} 通过 IP ${loginIP} 登录。登录用户为${user}。地理位置信息:国家 ${nation},省份${province},城市 ${city}。"
    post_data="{\"msgtype\": \"text\",\"text\": {\"content\": \"${msgContent}\"}}"

    # 发送钉钉消息
    wget --quiet --header "Content-Type: application/json" --post-data "${post_data}" -O - "${webhook}"

    export SENT_LOGIN_HOOK=1
fi

飞书通知

1.创建机器人

参考文档:https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot

在飞书界面点击加号-创建群组-设置-群机器人-保存webhook地址

2.打开/etc/profile.d 文件夹

代码语言:bash
复制
cd /etc/profile.d

3.编写脚本

使用前需要安装 jq

代码语言:bash
复制
sudo apt-get install jq

将以下脚本保存为 /etc/profile.d/sent_login_hook.sh:

代码语言:bash
复制
if [[ -z "${SENT_LOGIN_HOOK}" ]]; then
    # 发送飞书消息
    webhook="https://open.feishu.cn/open-apis/bot/v2/hook/****"
    ip=$(curl https://ddnsip.cn)
    time=$(date +"%Y-%m-%d %H:%M:%S")
    user=$(whoami)
    loginIP=$(echo $SSH_CONNECTION | awk '{print $1}')
    echo "${loginIP}"
    # 获取登录IP的地理位置信息
    location_data=$(curl "https://ip.wxory.com/?ip=${loginIP}")
    nation=$(echo "$location_data" | jq -r '.result.ad_info.nation')
    province=$(echo "$location_data" | jq -r '.result.ad_info.province')
    city=$(echo "$location_data" | jq -r '.result.ad_info.city')
    # 拼接消息内容
    msgContent="服务器登录提醒:${ip}于${time} 通过 IP ${loginIP} 登录。登录用户为${user}。地理位置信息:国家 ${nation},省份${province},城市 ${city}。"
    post_data="{\"msg_type\": \"text\",\"content\": {\"text\": \"${msgContent}\"}}"

    # 发送飞书消息
    curl -X POST -H "Content-Type: application/json" \
         -d "${post_data}" \
         "${webhook}"

    export SENT_LOGIN_HOOK=1
fi

邮件通知

安装 fail2ban

代码语言:bash
复制
sudo apt-get install curl fail2ban -y

编辑/etc/fail2ban/jail.local

代码语言:bash
复制
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600 # 封禁时间,单位为秒,默认为600秒即10分钟

# 自定义action来发送邮件提醒管理员,如果不需要可以注释掉或删除此段配置。
action = %(action_mwl)s

# 发送邮件的配置信息,根据自己的情况修改。
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -X POST https://api.sendcloud.net/apiv2/mail/send \
    --data-urlencode "apiUser=your_api_user" \
    --data-urlencode "apiKey=your_api_key" \
    --data-urlencode "from=admin@yourdomain.com" \
    --data-urlencode "to=admin@yourdomain.com" \
    --data-urlencode "subject=Fail2Ban Notice: <ip> banned on <hostname>" \
    --data-urlencode "html=<p>Hi Admin,</p ><p>The IP address <ip> has just been banned on <hostname> by Fail2Ban because of too many authentication failures.</p ><br/><br/><p>This message is automatically generated by Fail2Ban.</p >"
actionunban =

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebHook通知
    • 钉钉通知
    • 飞书通知
  • 邮件通知
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档