外部 IP 地址的 SSH 警报

bk2*_*201 2 login ssh monitoring

所以我有一个脚本,如果登录名来自除以“10.1.”开头的 IP 地址之外的任何内容,它会向我发送电子邮件:

#!/usr/bin/python

import smtplib, os

server = "10.10.10.10"
From =  "address1@example.com"
to = ["address2@example.com"] # 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()
Run Code Online (Sandbox Code Playgroud)

我已将它添加到 .bashrc 的 /root/.bashrc 中,当我以 root 身份登录到此远程服务器时,它会运行,检查 $SSH_CONNECTION 变量和电子邮件(如果它不是以 10.1 开头)。

但是如果有人以用户身份登录怎么办?或其他用户名?我最初有一个文件 /etc/ssh/sshrc,我认为它是一个 bash 脚本(尽管第一行没有 #!/bin/sh)并且它工作正常,但我想检查 ip 所以这就是我这样做的原因在 python 中,在 bash 中它不喜欢双 [[ 括号,我只是将它输出到 sendmail。

所以问题是我怎样才能让这个脚本在任何 ssh 登录时运行?我应该继续尝试使用 sshrc 文件吗?

我已经尝试用这个 python 脚本替换 sshrc 文件,但是当我登录时我得到了这个:

/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
Run Code Online (Sandbox Code Playgroud)

Tho*_*man 5

您可以在打开登录会话时触发脚本。

pam-script是一个 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
Run Code Online (Sandbox Code Playgroud)

在 Debian 中,默认情况下,pam-script 将执行/usr/share/libpam-script/pam_script_ses_open. 可以使用该dir=/path/to/scripts/选项配置脚本的位置。

使用 pam-script 还可以方便地在 bash 脚本中访问远程主机的 IP 地址。每个脚本都将传递以下环境变量(都将存在,但如果不适用,有些可能为空):

  • PAM_SERVICE - 调用 PAM 堆栈的应用程序
  • PAM_TYPE - 模块类型(例如身份验证、帐户、会话、密码)
  • PAM_USER - 被认证的用户
  • PAM_RUSER - 远程用户,调用应用程序的用户
  • PAM_RHOST - 远程主机
  • PAM_TTY - 控制 tty
  • PAM_AUTHTOK - 可读文本中的密码