Vai al contenuto

Linux: sshd auto blacklisting. Consigli?


loric

Messaggi Raccomandati:

nope, ho solo l'autenticazione con la password perché quella via certificato non la so fare. E peraltro con SSH su porta 22.

E stavo pensando ad installare anche shellinabox per accedervi tramite 443 (dal lavoro) ma mi stai facendo venire molti dubbi sulla sicurezza...

Veloce tutorial su come impostare sshd con accesso tramite chiave pubblica.

Diciamo che abbiamo l'utente loric sia sul PC client che usiamo per connetterci, sia sul PC server a cui dobbiamo connetterci. Su entrambe le macchine gira Linux.

Nella prima fase lavoriamo sulla macchina server.


loric@linux-vf0c:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/loric/.ssh/id_rsa):
Created directory '/home/loric/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/loric/.ssh/id_rsa.
Your public key has been saved in /home/loric/.ssh/id_rsa.pub.
The key fingerprint is:
34:16:aa:85:ba:33:ba:97:a6:8f:31:e2:81:4e:4e:ae loric@linux-vf0c
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| . . . |
| . o + |
| . o o . |
| . . S |
|. . |
|=++. |
|O==o |
|E@. |
+-----------------+

ssh-keygen -t rsa genera due chiavi, una privata (/home/loric/.ssh/id_rsa) e una pubblica (/home/loric/.ssh/id_rsa.pub). La privata deve stare nella directory .ssh della home directory dell'utente che usiamo per connetterci (da permessi è leggibile e riscrivibile solo da loric, se così non fosse sshd potrebbe rifiutarsi, giustamente, di considerarla valida):


loric@linux-vf0c:~> ll /home/loric/.ssh/id_rsa
-rw------- 1 loric users 1766 mar 10 11:37 /home/loric/.ssh/id_rsa

Durante la creazione delle chiavi ho specificato una passphrase. Non è obbligatorio farlo, in mancanza l'autenticazione avviene "al volo" senza necessità di input da parte dell'utente. Ma con passphrase la sicurezza è ovviamente maggiore. Non usare la passphrase, IMHO, ha senso solo se la connessione deve necessariamente avvenire in maniera non interattiva, per esempio uno script che, da cron job, tramite scp, copia dei file da una macchina all'altra.

Il passaggio da fare, ora, è esportare la chiave pubblica nella macchina client.

Sempre dalla macchina server, digitiamo:


ssh loric@192.168.2.16 mkdir -p .ssh
Password:

(192.168.2.16 è l'IP della macchina client).

In questo modo ho creato la directory ".ssh" nella home directory di loric sul client.

Adesso copio la chiave pubblica in questo modo:


cat .ssh/id_rsa.pub | ssh loric@192.168.2.16 'cat >> .ssh/authorized_keys'

Sempre nella macchina server, apri il file di configurazione di sshd (sshd_config) ed accertati che ci siano la seguenti opzioni:


AuthorizedKeysFile .ssh/authorized_keys

PubkeyAuthentication yes

RSAAuthentication yes
PubkeyAuthentication yes


Nel caso aggiungile a mano e riavvia sshd.

Se tutto va bene, ora puoi connetterti con la chiave pubblica:


loric@linux-vf0c:~> ssh loric@192.168.2.16
Enter passphrase for key '/home/loric/.ssh/id_rsa':

Ovviamente se non hai specificato alcuna passphrase in fase di generazione delle chiavi, verrai autenticato automaticamente.

Quando vorrai disabilitare l'accesso con password (ma sta attento a non rimanere chiuso fuori dalla macchina, eh), nella configurazione di sshd (sshd_config) specifica le seguenti opzioni:


PasswordAuthentication no

ChallengeResponseAuthentication no

UsePAM yes

p.s.: dopo aver scritto questo tutorial ho cancellato l'account "loric", quindi non fatevi strane idee :P

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

  • 2 settimane fa...
  • Risposte 21
  • Creato
  • Ultima Risposta

I più attivi nella discussione

I più attivi nella discussione

Da Lunedì, nei ritagli di tempo, ho buttato giù qualche linea di codice.

L'ho testato poco, ma per ora funziona.

Devo aggiungere un paio di cosette (whitelist, possibilità di eseguire un comando esterno al momento in cui viene bannato un nuovo host remoto), ripulire un po' il codice, migliorare il logging e scrivere una qualche riga di istruzioni.

Ho fatto l'upload del codice qui:

https://code.launchpad.net/~lorenzodes/+junk/pam_hblist

Se a qualcuno interessa... :)

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Beh, complimentoni! :D

Sei il primo avvocato "nerd-sistemista-avanzatissimo-pure-troppo" che conosco, di solito tutti umanisti che disprezzano la tecnologia e/o al massimo Apple fan...

E' solo un hobby, ma almeno è un hobby che porta a qualche utilità pratica :)

Programmare, peraltro, consente di staccare il cervello dallo stress del lavoro (in quest'ultimo periodo peraltro a livelli da record) senza ricorrere alla chimica :)

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Programmare, peraltro, consente di staccare il cervello dallo stress del lavoro (in quest'ultimo periodo peraltro a livelli da record) senza ricorrere alla chimica :)

E pensare che io devo ricorrere alla chimica per staccare il cervello dalle stress del lavoro, che è, per l'appunto, programmare. :D

"Fico, io ti rispondo che al buio tutti i gatti sembrano leopardi e che non bisogna mai comprare un gatto in un sacco. C'entrano qualcosa? Probabilmente no, esattamente come la tua metafora." [Loric]

Link al commento
Condividi su altri Social

Inviato (modificato)
E pensare che io devo ricorrere alla chimica per staccare il cervello dalle stress del lavoro, che è, per l'appunto, programmare. :D

C'è una differenza fondamentale fra come programmo io e come lo fai tu (ovviamente al netto della differenza di professionalità che è scontata). Io lo faccio quando ho tempo e mi gira, senza deadline, senza un team manager che mi impone di implementare qualche brillante idea :)

Edit: ritornando a bomba, se qualcuno vuole dare un'occhiata al codice, anche solo per dire "ènnammerda", io mica mi offendo, eh :)

Modificato da loric

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Volevo informare (se a qualcuno interessa) che il modulo PAM è già (quasi) finito. Io lo sto già utilizzando sul mio serverino domestico.

Le caratteristiche sono:

1) possibilità di stabilire delle regole, con espressioni di facile comprensione, per dare pesi diversi ai vari tentativi di accesso. E' possibile per esempio stabilire che se un malintenzionato cerca di connettersi per più di 20 volte in un'ora viene bannato. Ma se tenta di farlo con lo username "root" (o "pippo", è possibile specificare qualsiasi username), viene bannato dopo soli 5 tentativi. Questo è un esempio di regola:


*:*:10/10m, *:root|admin:5/6h, *:*:50/1d

Significa:

ban dopo 10 tentativi di accesso fallito a qualsiasi servizio e con qualsiasi username in un arco di 10 minuti

oppure

ban dopo 5 tentativi di accesso fallito a qualsiasi servizio con username "root" e/o "admin" in un arco di 6 ore

oppure

ban dopo 50 tentativi di accesso fallito a qualsiasi servizio e con qualsiasi username nell'arco di 1 giorno

2) è possibile specificare che, quando un host remoto viene bannato, viene lanciato un programma esterno. Io lo uso per fargli inviare una e-mail con i dettagli dell'host remoto "malintenzionato".

Ah, dimenticavo, il modulo bannatore si chiama pam_hblist, codename "Regazzoni" :P

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

  • 2 settimane fa...

Oh, l'accrocchio è praticamente finito.

Supporta banning dinamico e statico, regole ed eccezioni, whitelisting, la possibilità di lanciare programmi esterni quando un achero viene bannato ed è in puro vecchio C, il linguaggio di quando non c'erano 'ste cose moderne da fighette. L'unica dipendenza esterna è il Berkeley DB.

L'ho messo a guardia di sshd, IMAP e smtp.

Mi raccomando, non accalcatevi troppo per il download :lol:

Alfiat Bravetta senza pomello con 170 cavalli asmatici che vanno a broda; pack "Terrone Protervo" (by Cosimo) contro lo sguardo da triglia. Questa è la "culona".

Link al commento
Condividi su altri Social

Crea un account o accedi per lasciare un commento

Devi essere iscritto per commentare e visualizzare le sezioni protette!

Crea un account

Iscriviti nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

×
×
  • Crea Nuovo...

 

Stiamo sperimentando dei banner pubblicitari a minima invasività: fai una prova e poi facci sapere come va!

Per accedere al forum, disabilita l'AdBlock per questo sito e poi clicca su accetta: ci sarai di grande aiuto! Grazie!

Se non sai come si fa, puoi pensarci più avanti, cliccando su "ci penso" per continuare temporaneamente a navigare. Periodicamente ricomparità questo avviso come promemoria.