외부 IP 주소에 대한 SSH 경고

외부 IP 주소에 대한 SSH 경고

따라서 "10.1"로 시작하는 IP 주소가 아닌 곳에서 로그인하는 경우 이메일을 보내는 스크립트가 있습니다.

#!/usr/bin/python

import smtplib, os

server = "10.10.10.10"
From =  "[email protected]"
to = ["[email protected]"] # must be a list
subject = "SSH Login from outside network"

ip = os.environ['SSH_CONNECTION'].split()[0]
user = os.environ['USER']


if '10.1.' in ip:
    print "---SSH IP Check---"
    print 'Inside address, no alert will be sent.'
    exit(0)


text = user + " just logged in from " + ip

# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s

%s
""" % (From, ", ".join(to), subject, text)

# Send the mail
server = smtplib.SMTP(server)
server.sendmail(From, to, message)
server.quit()

이것을 /root/.bashrc의 .bashrc에 추가했으며 루트로 이 원격 서버에 로그인하면 $SSH_CONNECTION 변수를 확인하고 10.1로 시작하지 않으면 이메일을 보냅니다.

하지만 누군가가 사용자로 로그인하면 어떻게 될까요? 아니면 다른 사용자 이름인가요? 나는 원래 bash 스크립트라고 생각한 /etc/ssh/sshrc 파일을 가지고 있었고 (첫 번째 줄에는 #!/bin/sh가 없었지만) 잘 작동했지만 IP를 확인하고 싶어서 그렇게했습니다. this Python의 bash에서는 이중 [[ 괄호를 좋아하지 않습니다. 저는 그냥 sendmail로 파이프합니다.

그렇다면 질문은 SSH 로그인에서 이 스크립트를 실행하는 방법입니다. sshrc 파일을 계속 사용해야 합니까?

sshrc 파일을 이 Python 스크립트로 바꾸려고 시도했지만 로그인하면 다음과 같은 결과가 나타납니다.

/etc/ssh/sshrc: 3: /etc/ssh/sshrc: import: not found
/etc/ssh/sshrc: 5: /etc/ssh/sshrc: server: not found
/etc/ssh/sshrc: 6: /etc/ssh/sshrc: From: not found
/etc/ssh/sshrc: 7: /etc/ssh/sshrc: to: not found
/etc/ssh/sshrc: 8: /etc/ssh/sshrc: subject: not found
/etc/ssh/sshrc: 10: /etc/ssh/sshrc: Syntax error: "(" unexpected

답변1

로그인 세션을 열 때 이 스크립트를 트리거할 수 있습니다.

팸 스크립트인증, 비밀번호 변경, 세션 열기 또는 닫기 중에 PAM 스택에서 스크립트를 실행할 수 있는 PAM 모듈입니다.

Debian 기반 Linux 배포판에서는 소프트웨어 패키지로 제공됩니다 libpam-script. Fedora에서는 이 패키지를 간단히 pam-script.

pam-script는 다음 스크립트를 트리거할 수 있습니다.

  • pam_script_auth- 인증 시 실행
  • pam_script_acct- 계정 관리 중 호출됨
  • pam_script_passwd- 비밀번호 변경시 호출됩니다.
  • pam_script_ses_open- 세션이 열릴 때 호출됩니다.
  • pam_script_ses_close- 세션이 종료되면 호출됩니다.

세션이 열릴 때 스크립트를 실행하려면 다음 위치에 추가하세요 /etc/pam.d/common-session.

# Attempt to run pam_script_ses_open and pam_script_ses_close.
# Report success even if script is not found.
session optional pam_script.so onerr=success

Debian에서는 pam-script가 기본적으로 실행됩니다 /usr/share/libpam-script/pam_script_ses_open. 스크립트 위치는 options 를 사용하여 구성할 수 있습니다 dir=/path/to/scripts/.

pam-script를 사용하면 bash 스크립트에서 원격 호스트의 IP 주소에 쉽게 액세스할 수도 있습니다. 각 스크립트에는 다음 환경 변수가 전달됩니다(모두 존재하지만 해당되지 않는 경우 일부는 비어 있을 수 있음).

  • PAM_SERVICE- PAM 스택을 호출하는 애플리케이션
  • PAM_TYPE - 모듈 유형(예: 인증, 계정, 세션, 비밀번호)
  • PAM_USER - 인증 중인 사용자
  • PAM_RUSER - 원격 사용자, 애플리케이션을 호출하는 사용자
  • PAM_RHOST - 원격 호스트
  • PAM_TTY - tty 제어
  • PAM_AUTHTOK- 읽을 수 있는 텍스트로 된 비밀번호

답변2

여유 설정

따라서 먼저 Slack에서 수신 Web Hook을 구성해야 합니다.

https://YOUR_DOMAIN.slack.com/apps/manage/custom-integrations

이 옵션을 구성하면 메시지를 게시할 수 있는 웹훅 URL이 제공됩니다. 기계 설정

이제 컴퓨터에 연결하고 ssh 폴더에 스크립트를 만듭니다.

sudo nano /etc/ssh/notify.sh

사용자가 로그인할 때마다 실행되도록 구성할 스크립트에 다음 코드를 추가합니다.

외부 IP 주소에 대한 SSH SLACK 경고

내 IP 주소가 아닌 다른 곳에서 로그인하면 이메일을 보내는 스크립트가 있습니다.

사용자가 로그인할 때마다 실행되도록 구성할 스크립트에 다음 코드를 추가합니다.

sudo nano /etc/ssh/notify.sh

if [ "$PAM_RHOST" != "10.0.4.61" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "10.0.4.62" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "10.0.4.63" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "110.0.4.64" -a "$PAM_TYPE" != "close_session" ]; then
url="https://hooks.slack.com/ser..."
channel="#ssh-login"
host="`hostname`"
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH login: $PAM_USER connected to \`$host\`\", \"text\": \"SSH login to \`$host\`\", \"fields\": [ { \"title\": \"User\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"IP Address\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode "payload={\"channel\": \"$channel\", \"mrkdwn\": true, \"username\": \"ssh-bot\", $content, \"icon_emoji\": \":computer:\"}" $url
fi"

이제 스크립트를 실행 가능하게 만듭니다.

sudo chmod +x /etc/ssh/notify.sh

마지막으로 /etc/pam.d/sshd에 다음 줄을 추가합니다.

session optional pam_exec.so seteuid /etc/ssh/notify.sh 완벽한

관련 정보