Giám sát truy cập ssh vào hệ thống

Tác giả: 14/09/2022

1. Giám sát truy cập ssh vào hệ thống

Để 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 cho việc này là ta sử dụng bot của Telegram để gửi cảnh báo qua một kênh chat trên Telegram.

2. Chuẩn bị

  • Máy chủ với IP public (hoặc IP private có thể kết nối ra ngoài Internet).
  • Đã có tài khoản Telegram.
  • Thao tác với user root

3. Tạo bot Telegram

Nếu bạn đã có bot Telegram thì có thể sử dụng luôn. Còn nếu chưa có ta làm như sau:

Bước 1: Chat với BotFather để tạo một bot

  • Tại ô Search của Telegram chọn BotFather.
  • Chat /newbot vào khung chat với BotFather để tạo một bot.
  • Sau khi tạo xong một bot, bạn cần nhập tên cho bot. Ở đây mình chọn là monitor_ssh
  • Chọn username cho bot (Username của bot bắt buộc phải có từ khóa bot ở cuối). Ở đây mình đặt là tubt_bot

Quá trình tạo bot diễn ra như sau:

botfather

 

 

Sau khi hoàn thành bạn sẽ nhận được 1 token để truy cập http API, hãy lưu trữ nó.

Bước 2: Thêm bot vào group

Khởi động bot bằng cách chat với bot trong room. Ở ví dụ này của mình sẽ là t.me/tubt_bot

creategroup

Chọn group cần thêm bot vào. Ở đây mình tạo một group mới.

addbot

Sau khi khi tạo group, chọn Add member >> @your_bot. Ở ví dụ này của mình là @monitor_ssh

yourbot

Bước 3: Lấy chat id

Để lấy được chat_id bạn cần làm như sau.

Tại group vừa mới tạo, chọn Add member >> @MissRose_bot

missrose

Sau khi add @MissRose_bot vào group, ta nhập /id để lấy chat_id (Chat_id bắt đầu bằng dấu “-“)

Ví dụ: -0123456789

getchatid

Gửi cảnh báo tới Telegram qua http API

Sau khi tạo bot xong ta cần kiểm tra xem bot có hoạt động hay không như sau:

Sử dụng trình duyệt của bạn với method GET của http với cú pháp như sau:

#https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=[CHAT_ID]&text=[MY_MESSAGE_TEXT]

Lưu ý: Bạn cần thay giá trị TOKEN và CHAT_ID tương ứng với giá trị token bạn nhận được khi tạo bot và chat_id nhận được từ bot @MissRose_bot. Giá trị MY_MESSAGE_TEXT bạn có thể nhập tùy chọn.

Ví dụ:

#https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQ/sendMessage?chat_id=-536737140&text=Test_bot

Sau đó bạn nhập đường dẫn sau khi đã thay đổi giá trị lên trình duyệt.

Sau khi đường dẫn được nhập lên trình duyệt Bot sẽ gửi trả về đoạn message Test_bot trên group telegram để ta kiểm tra được bot có đang hoạt động hay không.

httpapitest

Gửi cảnh báo sử dụng curl

Tại VPS Linux chạy lệnh sau.

Cú pháp

#curl -X POST "https://api.telegram.org/bot[TOKEN]/sendMessage" -d "chat_id=[CHAT_ID]&text=[MY_MESSAGE_TEXT]"

Ví dụ:

#curl -X POST "https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQ//sendMessage" -d "chat_id=-536737140&text=Hello"

– Sau khi chạy lệnh sau bot trên telegram sẽ trả về giá trị Hello mà mình đã thay trong [MY_MESSAGE_TEXT]

curltest

Trên đây là hai cách thường dùng để kiểm tra bot có hoạt động hay không. Để gửi cảnh báo các bạn có thể sử dụng các công cụ khác như postman, JMeter… Sử dụng bash/shell, php, javascripts…

4. Tạo script file giám sát truy cập SSH vào hệ thống

Cài đặt jq

jq là ứng dụng để đọc thông tin file JSON trên Linux.

Xem thông tin và cách sử dụng “jq” tại đây

Trên Ubuntu.

#apt get -y install jq

Trên Centos 7.

#yum install epel-release -y

#yum install jq -y

Tạo file script cảnh báo.

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 tên là monitor-ssh-telegram.sh:

#vi /etc/profile.d/monitor-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 cho file script vừa tạo.

#chmod +x /etc/profile.d/monitor-ssh-telegram.sh

Lưu ý: Bạn cần thay đổi giá trị USERID và TOKEN bằng ID chat và API token của bot Telegram mà bạn đã tạo trước đó.

Kiểm tra

Tiến hành ssh vào server. Ta sẽ thấy cảnh bảo từ Telegram như sau:

checkmonitor

 

Mỗi khi có người truy cập vào VPS thì sẽ có cảnh báo gửi về Telegram từ bot. Chúc các bạn thành công và hẹn các bạn trong những bài viết tiếp theo.

 

>>>> Tham khảo:

https://gist.github.com/matriphe/9a51169508f266d97313

Trả lời