Giám sát truy cập ssh vào hệ thống
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ớiBotFather
để 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:
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
Chọn group cần thêm bot vào. Ở đây mình tạo một group mới.
Sau khi khi tạo group, chọn Add member
>> @your_bot
. Ở ví dụ này của mình là @monitor_ssh
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
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
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.
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]
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:
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