서버에 로그인 (계정 환경 불러오기) 될때마다 Telegram 으로 관리자에게 알람 주는 방법

리눅스/Security|2024. 4. 18. 12:23
반응형

리눅스 서버에 로그인 (SSH 또는 로컬) 이벤트가 발생하면 Telegram bot 을 이용해 관리자에게 알람을 주는 방법입니다.

접속자의 IP 와 계정 정보를 Telegram 메세지로 발송 함으로써 보안 이슈를 감지하고 차단할 수 있습니다.

이러한 기능을 구현하려면 몇 가지 단계를 따라야 합니다.

이 작업을 수행하기 위해서는 Bash 스크립트 작성, Telegram Bot 생성, CHAT_ID 수신 허용, 그리고 Profile 환경 설정 파일에 로그인 이벤트와 스크립트를 연동하는 과정이 포함됩니다.

 


1. Telegram Bot 생성 및 API 토큰 획득

 

Telegram Bot 생성: Telegram 에서 BotFather 를 검색하여 시작합니다. /newbot 명령을 입력하고, Bot 의 이름과 유저네임을 설정합니다.

API 토큰 획득 : Bot 생성이 완료되면, BotFather 는 API 토큰을 제공합니다. 이 토큰은 HTTP API 를 통해 메시지를 보낼 때 사용됩니다.

 

텔레그램에서 @BotFather 검색 > 대화창에 /newbot 입력 이후, 요청하는 절차대로 진행하면 됩니다.

메세지 수신을 위해서는 텔레그램에서 봇이름 검색 후 대화창에서 [시작] 버튼을 눌러줍니다. 그래야 봇이 보내주는 메세지를 로그인 계정에서 받을 수 있는 허용 상태가 됩니다.

 

 

2. Bash 스크립트 작성

 

아래는 서버에 로그인 시 실행될 Bash 스크립트의 예입니다.

이 스크립트는 사용자 이름과 IP 주소를 추출하여 Telegram Bot API를 사용해 메시지를 보냅니다.

 

# vi /etc/alert_login.sh

#!/bin/bash

# Telegram 설정

API_KEY="12345678:ABFNrljuQ4nrwbChhMlx1z-tA36Ww" # 텔레그램 봇 API KEY
CHAT_ID="00112233" # 수신자 CHAT_ID

# 로그인 정보 추출

USER=`whoami`
TTY=`tty |sed -e 's/\/dev\///'`
IP_ADDRESS=`w |grep "$TTY " |awk {'print $3'}`

# 메시지 전송

MESSAGE="서버 로그인이 감지 되었습니다.
- 서버 : 파일 서버
- 로그인 ID : $USER
- 접속자 IP : $IP_ADDRESS"
URL="https://api.telegram.org/bot$API_KEY/sendMessage"

curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE" > /dev/null 2>&1

 

* 설명

whoami 명령 : 현재 로그인한 사용자의 이름을 반환합니다.

"$TTY " : 문자 뒤에 한칸 띄운 이유는 동일한 숫자로 시작되는 다른 TTY 를 가져오지 않기 위해서 입니다.

curl : 마지막에 null 처리하여 처리 결과를 콘솔에 출력시키지 않습니다.

 

스크립트 파일에 실행 권한을 부여합니다:

# chmod +x /etc/alert_login.sh

 

 

3. Profile 환경 설정 파일에 연결

 

서버에 로그인 시 스크립트가 자동으로 실행되도록 하려면, /etc/profile 파일에 스크립트 실행 명령어를 추가합니다:

# echo "sh /etc/alert_login.sh" >> /etc/profile

 

* 주의

위 설정은 모든 로그인 계정에서 강제로 실행됩니다.

특정 사용자의 계정에게만 적용하고자 한다면 개별 사용자의 .bash_profile 또는 .bashrc 에 스크립트를 추가하면 됩니다.

 

위의 단계를 완료하면, 서버에 로그인할 때마다 해당 사용자의 로그인 정보가 Telegram Bot 을 통해 관리자에게 알림으로 전송됩니다.

 

 

4. 쉘스크립트 암호화 (선택)

 

쉘스크립트에 Telegram Bot API KEY 와 사용자의 CHAT_ID 가 포함되어 있어 누군가 확인할 우려가 있을 경우 쉘스크립트를 바이너리 파일로 변경할 수 있습니다.

우선 필요한 패키지를 설치하고 위에서 작성했던 쉘스크립트를 암호화 합니다.

# apt -y install shc

# shc -f /etc/alert_login.sh -o /etc/alert_login

 

/etc/profile 파일에서 쉘스크립트 실행 명령을 바이너리 파일 실행 명령으로 바꿉니다.

- 기존 : sh /etc/alert_login.sh

- 변경 : /etc/alert_login
# sed -i 's/sh \/etc\/alert_login.sh/\/etc\/alert_login/' /etc/profile

 

변경이 완료되었으면 테스트를 해봅니다. 이상이 없는 경우 기존 쉘스크립트는 삭제해 두는 것이 좋습니다.

 

반응형

댓글()