mercoledì 15 maggio 2013

Pilotare lo shutdown di pfSense tramite script


In alcuni casi può essere utile automatizzare lo spegnimento del firewall tramite uno script da eseguire allo scatenarsi di un determinato evento. L'esempio più semplice è lo shutdown pilotato da un UPS in caso di blackout. In quest'articolo vedremo com'è possibile effettuare quest'operazione in modo semplice e sicuro.
Nel nostro esempio supporremo di dover spegnere un firewall in caso di blackout. Lo spegnimento verrà pilotato da un server windows a cui è collegato un UPS.

Per pilotare lo shutdown ci serviremo della connessione SSH quindi per prima cosa ci occuperemo di attivare l'accesso SSH.

Accediamo a System > Advanced
Selezioniamo Enable Secure Shell
Clicchiamo su Save


Ora per garantire una maggiore sicurezza ci preoccuperemo di creare un utente che verrà utilizzato solo per effettuare lo shutdown.

Accediamo a System > User Manager
Sotto il tab Users clicchiamo su Add User

Creiamo l'utente come segue:
Username: ups
Password: password
Full name: UPS User

Clicchiamo su Save

Torniamo ad editare il nostro utente cliccando su Edit User
Portiamoci nella sezione Effective Privileges e clicchiamo su Add
Selezioniamo User - System - Shell account access

Clicchiamo su Save



A questo punto il nostro utente ha i diritti di effettuare il login SSH ma non ha ancora i privilegi per effettuare lo shutdown del firewall.


Il comando che useremo per efettuare lo shutdown è /sbin/shutdown che nei sistemi FreeBSD può essere eseguito dai membri del gruppo operator o da root. Avendo deciso di utilizzare un utente creato appositamente abbiamo la necessità di fare in modo che quest'utente faccia parte del gruppo operator.

Accediamo a Diagnostics > Command Prompt
Sotto Execute Shell Command eseguiamo il seguente comando: pw usermod ups -G operator





Ora per verificare che l'utente ups sia stato correttamente aggiunto al gruppo operator eseguendo il seguente comando: pw groupshow operator
e se tutto è andato per il verso giusto il risultato del comando sarà simile a questo:

$ pw groupshow operator
operator:*:5:root,ups


Come è possibile vedere i membri del gruppo operator sono root ed ups.

Ora il nostro firewall è pronto per essere spento tramite l'accesso SSH da parte dell'utente UPS, non ci resta che creare lo script per avviare lo shutdown.
Per prima cosa dovremo procurarci il pacchetto Putty che non dovrebbe aver bisogno di presentazioni ma per chi non sapesse di cosa si tratta è sufficiente dire che è un client free per telnet ed ssh disponibile per Windows e Unix.

Ora prepariamo uno script che esegua il seguente comando:

plink -ssh -P 22 -pw pfsense ups@192.168.1.1 "/sbin/shutdown -p now"

La prima volta che il comando viene eseguito, viene richiesto se si vuole aggiungere la chiave del server ssh alla cache di putty in modo da creare un trust tra client e firewall.


Premendo Y la chiave viene memorizzata e le successive esecuzioni procederanno in automatico.

Attenzione!!
Sotto windows la chiave viene memorizzata nel registry e più precisamente in questa chiave:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

Questo significa che se si vuole memorizzare la chiave, la prima volta occorre lanciare il comando con l'utente che in caso di blackout pilota lo shutdown del firewall.
Posta un commento