SSH alertas para endereços IP externos

1

Então eu tenho um script que me envia um email se um login é de qualquer coisa além de um endereço IP que comece com "10.1.":

#!/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()

Eu adicionei isso ao .bashrc para /root/.bashrc e quando eu logar como root neste servidor remoto, isso roda, verifica a variável $ SSH_CONNECTION e os e-mails se ele não iniciar com 10.1.

Mas e se alguém fizer login como usuário? ou outro nome de usuário? Eu originalmente tinha um arquivo / etc / ssh / sshrc que eu acho que é um script bash (não #! / Bin / sh na primeira linha embora) e funcionou ok, mas eu queria um cheque do ip então é por isso que eu fiz isso em python, no bash ele não gostava do double [[colchetes, e eu estava apenas enviando para o sendmail.

Então a questão é como posso fazer este script rodar em qualquer login ssh? devo continuar tentando com o arquivo sshrc?

Eu tentei substituir o arquivo sshrc com este script python, mas eu recebo isso quando eu faço login:

/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
    
por bk201 25.07.2013 / 06:23

1 resposta

4

Você pode ter o script acionado quando uma sessão de login é aberta.

pam-script é um módulo PAM que permite você executar scripts dentro da pilha do PAM durante a autorização, alterações de senha e na abertura ou fechamento da sessão.

Nas distribuições Linux baseadas no Debian, ele é fornecido pelo pacote libpam-script . No Fedora, o pacote é simplesmente chamado pam-script .

Os seguintes scripts podem ser acionados pelo pam-script:

  • pam_script_auth - executado durante a autenticação
  • pam_script_acct - invocado durante o gerenciamento de contas
  • pam_script_passwd - invocado ao alterar senhas
  • pam_script_ses_open - invocado quando a sessão é aberta
  • pam_script_ses_close - invocado quando uma sessão é encerrada

Para executar um script na sessão aberta, adicione isso a /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

No Debian, por padrão, o pam-script executará /usr/share/libpam-script/pam_script_ses_open . A localização dos scripts pode ser configurada com a opção dir=/path/to/scripts/ .

Com o pam-script, também é conveniente acessar o endereço IP do host remoto em um script bash. Cada script receberá as seguintes variáveis de ambiente (todas existirão, mas algumas podem ser nulas, se não forem aplicáveis):

  • PAM_SERVICE - o aplicativo que está invocando a pilha PAM
  • PAM_TYPE - o tipo de módulo (por exemplo, auth, conta, sessão, senha)
  • PAM_USER - o usuário sendo autenticado em
  • PAM_RUSER - o usuário remoto, o usuário invocando o aplicativo
  • PAM_RHOST - host remoto
  • PAM_TTY - o controle tty
  • PAM_AUTHTOK - senha em texto legível
por 25.07.2013 / 13:52