Domanda Email su tentativo di accesso fallito?


Mi stavo chiedendo se è possibile configurarlo in modo tale che su un login fallito Ubuntu mi invierà un'e-mail? E, naturalmente, se il computer non è connesso a Internet quando si verifica il tentativo, allora dovrebbe inviarmi l'e-mail una volta che c'è di nuovo una connessione Internet, piuttosto che solo tentare, fallire, e quindi non avvisarmi mai di quel login. L'email dovrebbe contenere la data e l'ora (day/month/year - hour:minute:second) del tentativo di accesso fallito, e anche (sebbene opzionalmente - in altre parole, una risposta che non spiega come farlo è accettabile in quanto potrebbe essere una grande domanda) qualsiasi azione intrapresa, quindi ad esempio se ce l'ho configurazione per bloccare la persona per 5 minuti o qualcosa del genere quindi dovrebbe avvisarmi del fatto che ha intrapreso questa azione. Sto usando Ubuntu GNOME 15.10 con GNOME 3.18, è qualcosa di simile possibile?


3
2018-01-29 13:44


origine


@muru: Il fatto di dirmi se è stata intrapresa un'azione non è assolutamente necessario, sarebbe bello, ma se puoi fornirmi una risposta che non include ciò, allora va bene. Ma il problema delle e-mail che si accumulano fino a quando non possono essere inviate dovrebbe essere il caso, perché altrimenti possono semplicemente disconnettere la mia macchina da Internet mentre lo fanno per evitare il rilevamento e questo è semplicemente stupido per consentire loro di farlo in quel modo ...
Eh, se hanno raggiunto quel livello di accesso al tuo sistema, perché non possono semplicemente disabilitare lo script di posta elettronica? - muru
@muru: beh, questo presuppone che non siano semplicemente passati a root richiesti, ma che stiano tentando di accedere attraverso il modo standard. E probabilmente non si aspettano la sceneggiatura, questo è per difendersi da persone normali che cercano di ottenere l'accesso, non persone che sanno quello che stanno facendo.
Queste supposizioni sono ridicole. Perché le persone normali disconnetterebbero la rete? O usare il modo standard? - muru
@muru: Perché la mia macchina non ha il WiFi, quindi ho un cavo Ethernet molto ovvio che può cadere facilmente da solo ...: D


risposte:


Accesso ai registri

Uno con i privilegi di root può utilizzare il comando lastb per vedere tutti i tentativi di accesso falliti nel computer, anche un file di log molto più dettagliato che registra i tentativi di accesso falliti nel lasso di tempo di una settimana può essere trovato a /var/log/auth.log (non sono necessari privilegi di root) e i tentativi di accesso errati verranno elencati in questo modo:

MONTH  DAY HH:MM:SS MACHINE lightdm: pam_unix(lightdm:auth): authentication failure; logname= uid=0 euid=0 tty=:0 ruser= rhost=  user=USER

copione

È possibile scrivere uno script per leggere quei file di registro e inviarli via e-mail ogni volta che viene registrato un nuovo tentativo di accesso errato. Ecco la mia opinione su questo:

Innanzitutto innescare l'esecuzione dello script ogni volta che qualcuno tenta di accedere e fallire. PAM mantiene il /var/log/auth.log quindi possiamo usarlo per attivare il nostro script. Aperto /etc/pam.d/common-auth:

sudo vim /etc/pam.d/common-auth

Quindi, appena prima della linea:

auth    requisite                       pam_deny.so

Aggiungi questo:

auth [default=ignore] pam_exec.so seteuid /usr/bin/report_badlogin

E nelle righe sopra cambia qualsiasi occorrenza di success=1 a success=2 e, se del caso, success=2 a success=3 e così via.

Ora crea lo script specificato:

sudo vim /usr/bin/report_badlogin

Scrivici i comandi per inviarti l'email del rapporto:

#! /bin/sh
# report_badlogin

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "yourpersonal@email.com"; then
  cp -f /var/log/auth.log /var/log/auth.log.old
  chown YOURUSERNAME /var/log/auth.log.old
fi

exit 0

Breve spiegazione: Primo grep ottiene le modifiche sul file di registro sottraendolo dall'ultima copia salvata di esso (.old). Secondo grep ottiene solo la linea che conta, quella che ti informa sulla data, l'ora e l'utente su cui è stato effettuato il login. mail ti manda quella riga come email con oggetto Notifica di tentativo di accesso errata. Se l'email è stata inviata con successo auth.log.old è aggiornato, ma poiché lo scripting è in esecuzione come root, ripristiniamo la proprietà sul file all'utente.

Salvalo e chiudilo (comando VIM :wq).

Assicurati che lo script abbia il permesso di esecuzione:

sudo chmod a+x /usr/bin/report_badlogin

Creare manualmente una prima copia di auth.log:

cp /var/log/auth.log{,.old}

Gestire senza scenari di connessione internet

Il potenziale invasore può disconnettere il PC da Internet mentre tenta di indovinare la password per impedire l'e-mail di notifica, ma anche quando lo fa, i suoi tentativi di accesso errati vengono tutti registrati auth.log.

Quello che puoi fare per ottenere le notifiche il più presto possibile è di attivare uno script leggermente diverso al momento dell'accesso con la tua macchina connessa a Internet. Per farlo usiamo ~/.bashrcscript, che viene eseguito ogni volta che si effettua il login:

vim ~/.bashrc

Aggiungi queste righe alla fine del file:

# Pending bad login attempts notification
sh /usr/bin/report_pending

Salvalo e chiudi. Ora crea quello script:

sudo vim /usr/bin/report_pending

E scrivici in questo modo:

#! /bin/sh
# report_pending

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure'; then
    if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "yourpersonal@email.com"; then
        cp -f /var/log/auth.log /var/log/auth.log.old
    fi
fi

exit 0

Breve spiegazione: Questo script fa quasi la stessa cosa del primo, ma poiché viene sempre eseguito al momento del login, per prima cosa controlliamo l'esistenza di rapporti in sospeso, altrimenti ogni volta che effettui il login riceverai un'email vuota. Si noti che questo script non è in esecuzione con i privilegi di root, quindi non c'è bisogno di cambiare auth.log.old proprietà dopo che è stata aggiornata.

Ora basta aggiungere il permesso di esecuzione allo script:

sudo chmod a+x /usr/bin/report_pending

Configura le impostazioni SMTP

Al fine di inviare l'email per l'installazione mailutils e ssmtp:

sudo apt-get install mailutils ssmtp

Configurazione ssmtp:

sudo vim /etc/ssmtp/ssmtp.conf

Modificalo in qualcosa di simile a questo:

root=yoursmtpemail@gmail.com    
mailhub=smtp.gmail.com:587    
AuthUser=yoursmtpemail    
AuthPass=PASSWORD    
UseSTARTTLS=YES    
hostname=yoursmtpemail@gmail.com    
FromLineOverride=YES

Se non si utilizza GMail, è sufficiente cambiarlo con il proprio provider.

Ti consiglio di creare un'e-mail esclusivamente per essere utilizzata come server SMTP (yoursmtpemail@gmail.com) e non usare la tua email personale, perché come puoi vedere stai memorizzando la password di questa email in un file di testo normale (solo root può accedere a questo file, ma non è comunque una buona pratica, anche se non so come fare in nessun altro modo ...).

In caso di GMail (non ho provato con altri provider) è ancora necessario consentire Accesso per app meno sicure. Se provi a correre echo "Test mail" | mail -s "Testing" yourpersonal@email.com dovresti ricevere un'e-mail in yoursmtpemail@gmail.com informandoti che l'accesso a quell'email è stato negato a un'applicazione che non soddisfaceva il livello di sicurezza di GMail e che, se lo desideri, puoi Per saperne di più per consentire l'accesso ad applicazioni meno sicure, fai clic su di esso e GMail ti presenterà l'opzione per consentirle.

Fatto!


6
2018-02-05 02:50



Risposta completa, usando nuovo linee nell'output di lastb era quello che avevo in mente anche io, +1. - Jacob Vlijm
Ho il programma OSSEC HIDS installato, che mi invia semplicemente la posta dalla mia macchina e mostra semplicemente l'indirizzo della mia macchina come l'indirizzo da cui proviene, quindi non c'è modo di farlo come fa o come l'altra risposta fa in termini di invio di posta? E accumulando la posta ...
Beh, ovviamente puoi usare altri metodi per inviare l'e-mail, non ho il software che hai e non ho familiarità con esso, quindi non posso aiutarti in modo così specifico. Se hai familiarità con l'utilizzo di quel software, puoi semplicemente adattare il mio script per inviare i risultati grep attraverso di esso. Più tardi oggi aggiungerò alcune cose alla mia risposta per evitare problemi se qualcuno disconnette il tuo PC da Internet. - Rodrigo Martins
@ParanoidPanda Ho aggiornato la risposta per coprire lo scenario senza connessione Internet e ho anche corretto un errore che lo script stava producendo a causa dei permessi dei file. - Rodrigo Martins
(1) Ho notato che sul mio sistema l'ultima riga di log non appare nel messaggio di posta. Viene solo scritto nel file di registro dopo l'invio della posta. Mi piacerebbe scambiare l'ordine in pam.d / common_auth se il flusso di controllo della pam non fosse così oscuro (2) C'è un breve intervallo tra quando si esegue grep auth.log e lo si copia nel backup. Tutto ciò che viene scritto in quel breve intervallo non verrà trasmesso né in questa mail né nella successiva. Ciò può essere evitato copiando su un file tmp prima di grep, e quindi copiando tmp per durare. - Craig Hicks


Questo è probabilmente eccessivo, ma ConfigServer Firewall (CSF) e LFD possono aiutare a monitorare e proteggere le vostre macchine.

L'invio di notifiche sui tentativi di accesso non riusciti è solo una delle sue numerose funzionalità. Questo dovrebbe funzionare immediatamente, consegnando l'e-mail di notifica alla radice.

Per ricevere posta su una macchina diversa, è necessario un programma che possa inviare posta. Installazione di mail-transport-agent il pacchetto potrebbe essere sufficiente, ma di solito installo un exim4 server, che può mettere in coda la consegna se si è offline (credo fino a 3 giorni).

CSF non viene come un pacchetto di Ubuntu, quindi dovrai seguire il loro Istruzioni per l'installazione:

cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

1
2018-02-05 03:06