ย 

ย 

1) TLDR


tet tet tetttt … balek lagi sama saya, berrabe … dimana saya suka memecahkan masalah menjadi masalah lagiii, YEAY ๐Ÿ˜Ž

kali ini saya pengen sharing dikit tentang gimane caranya kasih notif ke tele kalau ada yang login ke server lewat SSH atau interactive shell

  • knapa harus ke telegram?

ya karna biar simpel aja gitu sembari chat ama pacar temen, bisa lihat notif server + bisa di buka di manapun (HP, Website, Desktop) dengan cepat tanpa buka WebApp, login dst kayak pake ELK, Grafana Loki dkk

  • dan knapa harus di kasih notif saat login SSH?

buat info siapa aja yang lagi akses server, kan klo server nya bermasalah ada yang bisa di salahin ๐Ÿ˜‚ ๐Ÿ˜‚, tugas saya sebagai Administrator berkurang sikit ๐Ÿ˜ด

wokai tanpa banyak basa-basi langsung gassss …

ย 

ย 

ย 

2) Script !!!


oke di sini saya kasih shell script nya, ini script yang tugasnya detect ssh login dan kasih notif + logging … bukan mendeteksi doi lagi chat an ama siapa aja lho ya ๐Ÿ˜Œ

copy script yang ada di bawah ini ke file namanya login-ssh.sh pada server yang ingin di montoring

#!/usr/bin/env bash

# ===============================================================================

_EXCLUDE_IP_=( "127.0.0.1" "::1" )
_USER_ID_=( -10xxxx -11xxxx )
_TOKEN_TELEGRAM_="1xxxxx:xxxxxxxxxxxxxxx"
_LOG_FILE="/var/log/ssh-login.log"

# ===============================================================================

TelegramNotif () {
	echo -ne "[+] Welcome To $(hostname -s) Server "
	curl -s -X POST \
	https://api.telegram.org/bot$_TOKEN_TELEGRAM_/sendMessage \
	-d chat_id=$1 \
	-d text="$2" \
	-d parse_mode=html \
	-d disable_web_page_preview=true \
	> /dev/null

	if [[ $? -eq 0 ]]; then
		echo "[ OK ]"
		Logging "$ClientIP_ as $USER ... Notif Success"
	else
		error_=$?
		echo "[ ERROR $error_ | Contact Server Administrator ]"
		Logging "$ClientIP_ as $USER ... Notif ERROR $error_"
	fi
}



Logging () {
	date_=$(date "+%d-%b-%Y")
	time_=$(date "+%H:%M:%S")

	echo -e "[ SSH ] [ $date_ ] [ $time_ ] >> $1" >> $_LOG_FILE
}



Filter () {
	for i in "${_USER_ID_[@]}"
	do
		ClientIP_=$1
		dateTime_=$(date "+%d %b %Y %H:%M:%S")
		ServerHostname_=$(hostname -s)
		IPInfoAPI_="https://ipinfo.io/${ClientIP_}"
		IPVPN=$(ip a | grep -E "inet.*tun" | awk '{sub(/\/.*/,"");print $2}')


		NotifText_="
		#ssh_login
		#$(echo $ServerHostname_ | sed -E 's/-|\./_/g')_login

		[#]   <b>$dateTime_</b>

		[=]   <b>$ClientIP_</b> <i>connect as</i> <b>$USER</b>
		       <i>on</i> <b>$ServerHostname_ [ $IPVPN ]</b>
		
		[?]   <i>More Info on</i> <b>$IPInfoAPI_</b>"


		TelegramNotif $i "$NotifText_"
	done
}




if [ -n "$SSH_CLIENT" ]; then

	ClientIP_=$(echo $SSH_CLIENT | awk '{print $1}')
	Start_=1

	for i in "${_EXCLUDE_IP_[@]}"
	do
		if [[ $i == $ClientIP_ ]]; then
			Logging "Excluded IP $USER @ $i"
			Start_=0
		fi
	done
fi

if [[ $Start_ -eq 1 ]]; then
	Filter $ClientIP_
fi

ย 

ย 

ย 

3) How To


trus abis di copy ke file login-ssh.sh, cara jalanin nya gimane? …

waittt, sebelum di jalanin, script nya harus di setup agar berfungsi sesuai keingingan

ย 

3.a) Konfigurasi Script

di bagian paling atas script, sesuaikan variabel dengan setup / credential yang ada

_EXCLUDE_IP_=( "127.0.0.1" "::1" )
_USER_ID_=( -10xxxx -11xxxx )
_TOKEN_TELEGRAM_="1xxxxx:xxxxxxxxxxxxxxx"
_LOG_FILE="/var/log/ssh-login.log"

sesuaikan user id dan token telegram

untuk mendapatkan token telegram bisa buat di @botFather dan untuk user id bisa di lihat dengan API https://api.telegram.org/bot<BOTID>/getUpdates … btw untuk user id bisa lebih dari 1, karna script ini bisa send notif ke beberapa group sesuai user id group yang di berikan

dan jika script mendeteksi adanya exluded ip, maka script tidak akan mengirimkan notif untuk ip tersebut … tetapi untuk log tetap tercatat di masing-masing server

โš ๏ธ Note : jangan tanya user id atau token telegram ke abang bakso kalau tidak mau di lempar kuah panas … sukur-sukur di lempar ama bakso / gerobaknya ๐Ÿ˜‚ ๐Ÿ˜‚

ย 

3.b) Setup SSH

okehh, supaya script ini otomatis mendeteksi ada user login dari SSH / Interactive Shell, script nya harus di pindahin ke folder /etc/profile.d

> cp login-ssh.sh /etc/profile.d/

ย 

ย 

ย 

4) hasilnya?


nah ini nanti tampilan notif nya, sudah generated hashtag per server secara otomatis juga, jadi akan mudah kalau mau liat history

telegram

dan yang ini log di setiap server yang sudah di pasang script monitoring SSH

> tail -f /var/log/ssh-login.log

[ SSH ] [ 09-Jan-2021 ] [ 15:41:37 ] >> 172.16.100.5 as root ... Notif ERROR 1
[ SSH ] [ 11-Jan-2021 ] [ 09:16:16 ] >> Excluded IP root @ 127.0.0.1
[ SSH ] [ 11-Jan-2021 ] [ 09:16:30 ] >> Excluded IP root @ ::1
[ SSH ] [ 12-Jan-2021 ] [ 11:26:51 ] >> 116.206.40.56 as root ... Notif Success
[ SSH ] [ 12-Jan-2021 ] [ 11:29:08 ] >> 116.206.40.56 as root ... Notif Success