Script giám sát truy cập SSH vào hệ thống

4.7/5 – (1718 bình chọn)

Để 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_EXECnUser: ${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:

Cảnh báo ssh thành công

Chúc các bạn thành công!

Tham khảo: https://gist.github.com/matriphe/9a51169508f266d97313

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *