[OpenBSD]

[Precedente: Considerazioni con l'FTP] [Indice] [Successivo: Ridondanza di firewall con CARP e pfsync]

PF: Authpf: Shell utente per l'autenticazione di gateway


Indice


Introduzione

Authpf(8) è una shell utente per autenticare gateway. Un gateway autenticabile è simile a un gateway di rete (router) fatta eccezione per il fatto che gli utenti devono autenticarsi prima che gli venga consentito di far passare traffico attraverso il gateway. Quando la shell utente è configurata per la /usr/sbin/authpf (i.e., invece della ksh(1), csh(1), etc) e l'utente si connette usando SSH, authpf farà i necessari cambiamenti per attivare le regole di configurazione di pf(4) così che il traffico utente passi attraverso il filtro e/o venga traslato utilizzando la NAT o il reindirizzamento. Una volta che l'utente si disconnette o la sessione è terminata, authpf rimuoverà ogni regola caricata per l'utente e cancellerà ogni connessione stateful che l'utente ha aperto. A causa di ciò, l'utente potrà far passare traffico attraverso il gateway solo quando la sessione SSH è aperta.

Authpf carica le regole filtraggio/NAT dell'utente in un unica anchor point. L'ancora è chiamata combinando la username UNIX dell'utente e il process-id di authpf nel formato "username(PID)". Ogni ancora utente è conservata all'interno dell'ancora authpf che è a sua volta ancorata alle regole principali di configurazione. La "fully qualified anchor path" diviene quindi:

main_ruleset/authpf/username(PID)

Le regole che authpf carica possono essere configurate sulla base del singolo utente o globalmente.

L'uso di authpf include:

Authpf tramite syslogd(8)effettua il log della username e dell'indirizzo IP di ogni utente che si autentica con successo e inoltre, il tempo di inizio e fine della sessione di login. Usando queste informazioni, un amministratore può determinare facilmente gli utenti collegati ad un particolare orario e rendere responsabili gli utenti per il loro traffico.

Configurazione

I passi di base necessari per configurare authpf sono riportati di seguito. Per una completa descrizione della configurazione di authpf, riferirsi a authpf man page.

Abilitare Authpf

Authpf non viene eseguito se il file di configurazione /etc/authpf/authpf.conf non è presente. Anche se il file è vuoto (0 byte), deve essere presente o authpf uscirà immediatamente dopo la corretta autenticazione di un untente.

Le seguenti direttive di configurazione possono essere inserite in authpf.conf:

Collegare Authpf nelle regole di configurazione prinicipali

Authpf è collegata alle regole di configurazione principali usando le regole ancora:
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"

Ovunque siano piazzate le regole ancora all'interno delle regole di configurazione, da quel punto PF si staccherà dalle regole principali per verificare le regole di authpf. Non è necessario che tutte e quattro le regole ancora siano presenti; per esempio, se authpf non è stato settato per caricare nessuna regola di nat, la nat-anchor può essere omessa.

Configurare le regole caricate

Authpf carica le sue regole da uno dei due files:

Il primo file contiene regole che sono caricate solo quando l'utente $USER (il quale è sostituito con il nome utente) si connette. La regola di configurazione per utente è usata solo quando uno specifico utente -- come un amministratore -- richiede un set di regole differenti rispetto alle configurazioni di default. Il secondo file contiene le regole di default che sono caricate per ogni utente che non ha il proprio file authpf.rules. Se il file specifico dell'utente esiste, esso sovrasciverà il file di default. Almeno uno dei due file deve esistere o authpf non funzionerà.

Regole di filtraggio e traslazione hanno la stessa sintassi come in ogni altra regola di PF con una eccezione: Authpf ha due macro predefinite:

Si raccomanda di fare attenzione nell'utilizzare la macro $user_ip per consentire solo ad utenti autenticati il traffico attraverso il gateway.

Oltre la macro $user_ip, authpf farà uso della tabella authpf_users (se esiste) per conservare gli indirizzi IP di tutti gli utenti autenticati. Assicurarsi di definire la tabella prima di usarla:

table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
    to port smtp flags S/SA keep state

Questa tabella dovrebbe essere usata solo nelle regole da applicare a tutti gli utenti autenticati.

Access Control Lists

Agli utenti può essere impedito l'uso di authpf creando file nella directory /etc/authpf/banned/ con i nomi delle username degli utenti. Il contenuto del file sarà visualizzato all'utente prima che authpf lo disconnetta. Così si fornisce un modo semplice per avvisare l'utente del perchè non gli è concesso l'accesso e chi contattare per ottenerlo.

In modo opposto, è anche possibile consentire l'accesso solo a utenti specifici inserendo le username nel file /etc/authpf/authpf.allow. Se il file /etc/authpf/authpf.allow non esiste o "*" è presente nel file, authpf consentirà l'accesso a ogni utente che si collegherà via SSH fin quando non riceverà un divieto esplicito.

Se authpf non sarà in grado di determinare se ad una username è concesso l'accesso sarà stampato un breve messaggio e poi l'utente verrà disconnesso. Una username in /etc/authpf/banned/ sovrascrive sempre una username in /etc/authpf/authpf.allow.

Messaggio di login

Quando un utente si autentica con successo con authpf, viene mostrato un messaggio di benvenuto.

Hello charlie. You are authenticated from host "64.59.56.140"

Questo messaggio può essere modificato agendo sul file /etc/authpf/authpf.message. Il contenuto di questo file sarà mostrato dopo il messaggio di benvenuto di default.

Assegnare Authpf come shell utente

Per utilizzare authpf occorre definirla come shell di login dell'utente. Quando un utente si autentica con successo a sshd(8), authpf sarà eseguita come shell utente. Sarà quindi verificato se all'utente è consentito l'uso di authpf, caricate le regole di configurazione dai rispettivi file, ecc.

Ci sono un paio di modi per assegnare authpf come shell utente:

  1. Manualmente per ogni utente usando chsh(1), vipw(8), useradd(8), usermod(8), etc.
  2. Assegnando gli utenti a una classe di login e cambiando l'opzione shell alla classe in /etc/login.conf.

Creare una classe login authpf

Quando si usa authpf su un sistema con utenti ad account regolari e utenti con account authpf, può essere utile creare classi separate di login per gli utenti authpf. Questo consente di eseguire determinati cambiamenti a questi account su base globale e consente inoltre di avere differenti policy su account regolari e account authpf. Qualche esempio di queste differenti policy:

Le classi login sono create nel file login.conf(5). OpenBSD di default ha la seguente classe login per utenti authpf:

authpf:\
    :welcome=/etc/motd.authpf:\
    :shell=/usr/sbin/authpf:\
    :tc=default:

Utenti sono assegnati a una classe di login editando il campo class del database utente passwd(5). Un modo per fare questo è con il comando chsh(1) command.

Vedere chi è collegato

Una volta che un utente si è collegato con successo e authpf ha corretto le regole di PF, authpf cambia il suo nome di processo indicando la username e l'indirizzo IP dell'utente loggato:
    # ps -ax | grep authpf
    23664 p0  Is+     0:00.11 -authpf: charlie@192.168.1.3 (authpf)

Qui l'utente charlie è collegato dalla macchina 192.168.1.3. Inviando un segnale SIGTERM al processo authpf, l'utente può essere disconnesso. Authpf rimuoverà anche ogni regola caricata per l'utente e ucciderà ogni connessione stateful aperta dall'utente.

    # kill -TERM 23664

Esempio

Authpf è stato usato su un gateway OpenBSD per autenticare utenti di una rete wireless all'interno di una rete più ampia di un campus. Dopo che l'utente si è autenticato, se non è presente sulla lista nera gli sarà consentito di usare l'SSH, di navigare su web (inclusi i siti sicuri web) e accedere ai server DNS del campus.

Il file /etc/authpf/authpf.rules contiene le seguenti regole:

wifi_if = "wi0"

pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
   https } flags S/SA keep state

L'utente amministratore charlie ha bisogno di accedere ai server SMTP e POP3 del campus, navigare su web e usare SSH. Le seguenti regole sono riportate in /etc/authpf/users/charlie/authpf.rules:

wifi_if = "wi0"
smtp_server = "10.0.1.50"
pop3_server = "10.0.1.51"

pass in quick on $wifi_if proto tcp from $user_ip to $smtp_server \
   port smtp flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to $pop3_server \
   port pop3 flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
   https } flags S/SA keep state

Le regole di configurazione principali -- presenti in /etc/pf.conf -- sono le seguenti:

# macro
wifi_if = "wi0"
ext_if  = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

table <authpf_users> persist

scrub in all

# filtraggio
block drop all

pass out quick on $ext_if inet proto tcp from \
   { $wifi_if:network, $ext_if } flags S/SA modulate state
pass out quick on $ext_if inet proto { udp, icmp } from \
   { $wifi_if:network, $ext_if } keep state

pass in quick on $wifi_if inet proto tcp from $wifi_if:network to $wifi_if \
   port ssh flags S/SA keep state

pass in quick on $wifi_if inet proto { tcp, udp } from <authpf_users> \
   to $dns_servers port domain keep state
anchor "authpf/*" in on $wifi_if

Le regole di configurazione sono molto semplici e fanno le seguenti

Le regole principali sono realizzate per bloccare tutto e consentire solo il traffico necessario. Il traffico è libero di transitare verso le interfaccie esterne ma è bloccato all'ingresso dell'interfaccia wireless dalla policy di default deny. Dopo che un utente si è autenticato, il traffico è consentito in ingresso all'interfaccia wireless e quindi attraverso il gateway sul resto della rete. La keyword quick è usata ovunque, così PF non deve verificare ogni singola regola di configurazione quando una nuova connessione passa attraverso il gateway.

[Precedente: Considerazioni con l'FTP] [Indice] [Successivo: Shell utente per l'autenticazione di gateway]


[back] www@openbsd.org
$OpenBSD: authpf.html,v 1.2 2008/03/24 10:14:49 saad Exp $