서버에 로그인 (계정 환경 불러오기) 될때마다 Telegram 으로 관리자에게 알람 주는 방법
리눅스 서버에 로그인 (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, 수신자 CHAT_ID) API_KEY="12345678:ABFNrluQnrwChMl1z-tA36w" CHAT_ID="00112233" # 로그인 정보 추출 USER=`whoami` TTY=`tty | sed -e 's/\/dev\///'` IP_ADDRESS=`who | grep "$TTY " | sed -e "s/.*(//" -e "s/)//"` if ! echo "$IP_ADDRESS" | grep -q "."; then IP_ADDRESS="localhost" fi # 메시지 전송 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 가 포함되어 있어 누군가 확인할 우려가 있을 경우 쉘스크립트를 바이너리 파일로 변경할 수 있습니다.
우선 필요한 패키지를 설치하고 위에서 작성했던 쉘스크립트를 암호화 합니다.
shc 패키지 설치시 gcc 패키지도 필요합니다.
# apt -y install shc gcc
# 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
변경이 완료되었으면 테스트를 해봅니다. 이상이 없는 경우 기존 쉘스크립트는 삭제해 두는 것이 좋습니다.
# rm -f /etc/alert_login.sh*
'리눅스 > Security' 카테고리의 다른 글
CentOS 8 Http 2.4 에 mod_security 설치하기 (YUM) (0) | 2020.11.12 |
---|---|
Snort 규칙 (공격 분류, 우선 순위 정보 포함) (0) | 2020.10.06 |
Snort - 03. Snort Rule 구조 (0) | 2020.10.06 |
httpd (apache2) 설정을 이용한 웹취약점 보완 (0) | 2020.03.17 |
웹취약점 점검 도구 OWASP ZAP 설치 및 실행방법 (0) | 2020.03.06 |