VPS 安全加固之用户登录后向 telegram 发送登录信息
弄啥咧
- 汝担心自己服务器挂了吗?
- 汝担心服务器被爆破脱裤?
- 汝担心非法用户登录服务器 😂
- 汝的服务器使用口令登录,而且还是 123456 的那种 😂
虽然,咱拿到 VPS 第一件事儿就是禁止密码登录,禁止 root 登录,仅仅允许普通用户使用密钥登录。理论上来讲,只要我的私钥不泄露,想要爆破登录上去,不可能、不可能、不可能 😂。AES-256 密钥的机密强度,即便是穷尽最强的超算来破解,也得需要几十年。
那么,有什么办法当用户登录到服务器上时发送个警报信息到咱手机上,来确认是咱本人或者是咱授权的用户登录。发送信息到咱手机,且及时能收到的话,常见的就这三种:
通过 email
email 发送确实可以,但有些限制,比如 GCP 就 ban 掉了 GCE 的 25 端口,常规手段就无法发送邮件了。而且,Linux 命令行下配置 Email 的发送客户端实在是令人头疼。遂就弃坑啦 😂,折腾起来不方便。
通过手机
之前我是使用 twiio 的短信服务来发送信息的,通过 twiio 的 api 很简单地就能发送,不想 email 那样配来陪去地,使用一条 curl 命令就能完成发送短信到手机。不过 twiio 很有限制,免费用户会有 10$ 的额度,而且需要绑定信用卡,也比较麻烦,遂卒 😂
通过 telegram bot
主角上场啦,就是咱们大名鼎鼎的电报机器人啦。不得不说 telegram 真心很好用啊,聊天功能比微信 QQ 这种狗屎玩意儿高到不知道哪里去了。反正我很讨厌恶心使用微信和 QQ,这种毒瘤软件。功能臃肿无比而且最基本的消息同步功能做的跟狗屎一样烂。呵呵,也就这样烂狗屎软件却垄断了国内聊天软件。而 telegram 只把聊天功能做到优秀,其开放的电报机器人更是催生出了无数有趣且实用的机器人。而且啊,你用 telegram bot 不需要实名认证、也不需要你上传身份证。
通过 telegram 的 api ,使用 bot 你可以很轻松地向自己发送消息,比微信 QQ 那种狗屎玩意好用的多。
需要注意的是,如果是 IOS 用户的话,通过 IOS 的通知消息推送机制,可以不挂梯子就能正常收到 telegram 的通知。包括其他需要挂梯子的应用也是,比如 Google voice。
怎么弄
首先有个 telegram 账号
网上教程很多,在此不赘述。推荐某宝买个 Google Voice 来注册,千万千万不要使用 +86 手机号注册,注册完成之后墙裂建议在 app 或者桌面端 的 settings
==> Privacy and Security
那些设置选项里全部设置为 Nobody
。另外再开启 Local Passcode
以及 Two-setp verification
。千千万万别拿着 +86 的手机号到处冲塔,你快很被安排上的。
注册 bot
1.打开与 @BotFather 的对话框
2.发送/start 开始会话
3.发送/newbot
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
4.发送 Bot 的 name 和 username
Good. Now let’s choose a username for your bot. It must end in
bot
. Like this, for example: TetrisBot or tetris_bot.
bot 有两个名字,第一个发送的是 first_name
: “linuxloginbot”,第二个发送的是”username
“: “linuxlogin_bot” 。其中 username 有要求,要 xxx_bot
来命名 比如 linuxlogin_bot
5.得到 Bot 的 token,用于标识这个 Bot
Done! Congratulations on your new bot. You will find it at t.me/linuxlogin_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you’ve finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
1067765083:AAFjONxxx-F2Y6IRSxxxxxVAAgRxxx89MXpk
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
由上面得到的 1067765083:AAFjONxxx-F2Y6x89MXpk
格式的字符串为该 bot 的 token,发送信息需要这个 token ,要保存好,不要泄露出去。
6.得到自己的 chat ID
telegram 中每个用户、频道、群组都会有一个 chat ID ,而 telegram bot 的 chat ID 就是你自己,也就是说,bot 机器人想你发送信息是通过你的 ID 来标识的,也可以将 bot 加入到频道或者群组中,向群组中发送信息。
通过 @getidsbot
这个机器人来获取自己的 ID,ID 一般都是 6 开头的。
7. 和 bot 对话
这一步非常重要,当 bot 新建完成之后就点击你的 bot 链接,然后在点击下面的 start 按钮。你不点击 start 开始和 bot 会话的话,bot 是无法想你发送信息的。我就在这个坑里爬了很久 😂
7.构造 GET 请求
可以参考 telegram bot api 的官方文档 Telegram Bot API
https://api.telegram.org/bot( 这里加上你的token )/sendMessage?chat_id=66666666 &text=message
- 例如:
https://api.telegram.org/bot1067796083:AAFjONLJ9-F2Y6IRSmQoBVAAgRhd589MXpk/sendMessage?chat_id=613640483&text=message
把这段 url
复制粘贴到浏览器测试一下即可,或者通过 curl
& wget
命令也可以。看看你的 telegram 能否正常接受消息。如果出现的话,恭喜你成功了第一步 😂
{
"ok": true,
"result": {
"message_id": 2,
"from": {
"id": 13,
"is_bot": true,
"first_name": "linuxloginbot",
"username": "linuxlogin_bot"
},
"chat": {
"id": 13,
"first_name": "木子",
"username": "muzi_ii",
"type": "private"
},
"date": 1577973988,
"text": "message"
}
}
8.用户登录后执行脚本
#!/bin/bash
# filename: 00-ssh-login-alarm-telegram.sh
# date: 2019-12-18
# for: ssh login alarm to telegram
# token 和 id 修改为自己的
token=97xxx718:AAExExPY9zxxxxxQ0L7iA2MCGYRQ
id=613420483
message=$(hostname && TZ=UTC-8 date && who && w | awk 'BEGIN{OFS="\t"}{print $1,$8}')
curl -s "https://api.telegram.org/bot${token}/sendMessage?chat_id=${id}" --data-binary "&text=${message}"
- 将该脚本放到
/etc/profile.d/
目录下,并 把该脚本的权限设置为555
,即任何用户都可执行。 /etc/profile.d/
下的脚本文件会在用户登录成功后自动执行,如还需要其他的操作追加在脚本里即可。- message 需要传递的数据根据自身需求设定即可,通过
&&
将多个命令的执行结果传递到 message 变量。hostname
获取主机名,以区分多台服务器;TZ=UTC-8 date
来获取登录时刻的北京时间;who
用来获取当前用户和 IP 等信息;w
命令用于获取当前用户登录后执行的命令。
大功告成啦
ssh 退出登录,测试一下 😋
Oracle
Thu Jan 2 22:23:33 UTC 2020
ubuntu pts/0 2020-01-02 09:23 (5.129.16.28)
09:23:33 load
USER WHAT
ubuntu -bash
解锁其他功能?
监控某个端口是否存活
这个适用于宿舍,比如,我的笔记本使用 frpc 和服务器端的 frps 保持长连接,如果我的笔记本被盗或者网络挂了,那么服务端的端口会 down 掉的,通过监控这个端口来判断笔记本的状态。只要笔记本和 frps 断掉就发送警报信息到 telegram。
发送 nginx 当日访问量最高的链接
因为不喜欢 Google Analytics 来在自己的博客上收集读者们的隐私数据,所以就自己手搓脚本,通过 nginx 日志来获取博客访问数据。简单粗暴 😂
发送服务器监控信息
服务器磁盘满了;服务器被日了;服务器被 down 掉了……