태그 보관물: slack

SLACK으로 SSH 로그인 알림 확인

서버를 운영하면서 가장 무서운 일은 허가되지 않은 인원이 운영하는 서버에 몰래 접근하여 어떠한 작업을 한다는 것이다.
아무리 보안에 신경을 쓴다고 해도 보안 문제는 쉽게 해결이 되지 않기 때문에 해당 부분에 대해서 누군가 로그인을 한다면 해당 부분에 대한 알림을 통해서 허가 받은 인원이 작업을 하고 있다는 사실을 알기 위해서 슬랙을 통한 알림을 설정한다.

Slack으로 알림을 주기 위한 Web Hook 쉡 스크립트

#!/bin/sh

url="https://hooks.slack.com/services/XXX/YYY/ZZZ" # 슬랙 WebHook으로 설정한 URI
channel="#ssh" # 알림을 받을 SLACK CHANNEL
icon=":dark_sunglasses:" # 알림을 보내는 아이콘 설정
host="`hostname`"

if [ "$PAM_TYPE" != "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGIN: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGIN TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

if [ "$PAM_TYPE" == "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGOUT: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGOUT TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

스크립트 생성 후 실행 권한 부여

sudo chmod +x /etc/ssh/scripts/ssh_notify_to_slack.sh

SSH 로그인시 알림을 실행하기 위한 PAM 등록

SSH의 접속에 대한 세션 샅애값이 변경될 때 알림을 주기 위해서 pam_exec.so를 활용하여 SlackWeb Hook으로 알림을 준다.

sudo echo "session optional pam_exec.so seteuid /etc/ssh/scripts/ssh_notify_to_slack.sh" >> /etc/pam.d/sshd