Để quản lý việc đăng nhập vào hệ thống, ta cần có những cảnh báo khi có người đăng nhập thành công vào hệ thống.
Giải pháp đơn giản là ta sẽ sử dụng bot của Telegram để gửi cảnh báo qua một kênh Telegram.
Chuẩn bị
- Máy chủ với IP public (hoặc IP private có thể ra ngoài internet)
- Có kết nối internet
- Đã có tài khoản Telegram
- Thao tác với user
root
Thực hiện
1. Tạo bot telegram
Nếu bạn đã có bot Telegram thì có thể sử dụng luôn.
Tham khảo cách tạo bot telegram tại đây.
Sau khi tạo bot xong, ta sẽ lưu lại 2 thông số sau để sử dụng trong script:
- Bot API token.
- ID chat mà bạn muốn bot gửi cảnh báo.
2. Cài đặt jq
jq
là ứng dụng để đọc thông tin file JSON trên Linux.
Xem thêm thông tin và cách sử dụng jq
tại : https://stedolan.github.io/jq/
Trên Ubuntu
apt-get -y install jq
Trên CentOS 7
yum install epel-release -y
yum install jq -y
3. Tạo file script
Ta sẽ tạo file script tại thư mục /etc/profile.d/
. Để khi đăng nhập vào hệ thống thì script sẽ thực hiện ngay lập tức.
Tạo file script ssh-telegram.sh
:
vi /etc/profile.d/ssh-telegram.sh
Nội dung script:
# ID chat Telegram
USERID="<target_user_id>"
# API Token bot
TOKEN="<bot_private_TOKEN>"
TIMEOUT="10"
# URL gửi tin nhắn của bot
URL="https://api.telegram.org/bot$TOKEN/sendMessage"
# Thời gian hệ thống
DATE_EXEC="$(date "+%d %b %Y %H:%M")"
# File temp
TMPFILE='/tmp/ipinfo.txt'
if [ -n "$SSH_CLIENT" ]; then
IP=$(echo $SSH_CLIENT | awk '{print $1}')
PORT=$(echo $SSH_CLIENT | awk '{print $3}')
HOSTNAME=$(hostname -f)
IPADDR=$(echo $SSH_CONNECTION | awk '{print $3}')
# Lấy các thông tin từ IP người truy cập theo trang ipinfo.io
curl http://ipinfo.io/$IP -s -o $TMPFILE
CITY=$(cat $TMPFILE | jq '.city' | sed 's/"//g')
REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g')
COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g')
ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g')
# Nội dung cảnh báo
TEXT=$(echo -e "Thời gian: $DATE_EXEC\nUser: ${USER} logged in to $HOSTNAME($IPADDR) \nFrom $IP - $ORG - $CITY, $REGION, $COUNTRY on port $PORT")
# Gửi cảnh báo
curl -s -X POST --max-time $TIMEOUT $URL -d "chat_id=$USERID" -d text="$TEXT" > /dev/null
# Xóa file temp khi script thực hiện xong
rm $TMPFILE
fi
Cấp quyền thực thi:
chmod +x /etc/profile.d/ssh-telegram.sh
Lưu ý: USERID và TOKEN sẽ là ID chat và API token của bot Telegram của bạn.
Kiểm tra
Tiến hành ssh vào server. Ta sẽ thấy cảnh báo từ Telegram tương tự như sau:
Chúc các bạn thành công!
Tham khảo: https://gist.github.com/matriphe/9a51169508f266d97313