[Wstecz: Problemy z FTP] [Spis treści] [Dalej: Redundantny firewall z CARP i pfsync]
Authpf ładuje reguły filtra/NAT w unikany punkt zakotwiczenia (anchor). Nazwa tego zakotwiczenia jest kombinacją uniksowej nazwy użytkownika oraz numeru procesu authpf w formacie "username(PID)". Każde zakotwiczenie dla użytkownika przechowywane jest wewnątrz zakotwiczenia authpf które jest zakotwiczone w jednym kroku w głównym zestawie reguł. Zatem "fully qualified anchor path" staje się:
main_ruleset/authpf/username(PID)
Reguły które ładuje authpf mogą być konfigurowane per użytkownik lub globalnie.
Przykładowe zastosowania authpf to:
Authpf zapewnia logi z nazwami użytkowników i ich adresami IP dla każdego użytkownika, który pomyślnie przechodzi uwierzytelnianie, podobnie dzieje się z dokładnym czasem rozpoczęcia i zakończenia sesji odnotowywanymi przez syslogd(8). Wykorzystując te informacje, administrator może określić kto i kiedy był zalogowany oraz czyni użytkowników odpowiedzialnymi za swój ruch sieciowy.
Authpf nie uruchomi się jeżeli plik konfiguracyjny /etc/authpf/authpf.conf nie istnieje. Nawet jeżeli ten plik jest pusty (o zerowym rozmiarze), musi wciąż być dostępny w przeciwnym wypadku authpf wyłączy się natychmiast po pomyślnym zalogowaniu użytkownika.
Poniższe parametry konfiguracyjne mogą zostać umieszczone w pliku authpf.conf:
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"
Niezależnie od tego, gdzie w głównym zestawie reguł znajdzie się reguła anchor, PF rozgałęzi się, aby przetworzyć reguły authpf. Nie jest wymagana obecność wszystkich czterech reguł anchor, na przykład jeśli authpf nie jest skonfigurowane do ładowania reguł nat, reguła nat-anchor może zostać pominięta.
Pierwszy plik zawiera reguły, które są ładowane jedynie gdy $USER (które jest zastępowane przez nazwę użytkownika) zaloguje się. Konfiguracja reguł według użytkowników ma miejsce, gdy konkretny użytkownik -- jak np administrator -- wymaga zestawu reguł innego, niż domyślnie ustawiony. Drugi plik zawiera domyślne reguły, które są ładowane, gdy dowolny użytkownik nie posiada swojego własnego pliku authpf.rules. Jeśli plik ten dla konkretnego użytkownika istnieje, zastępuje domyślny plik. Przynajmniej jeden z plików musi istnieć, w przeciwnym razie authpf nie będzie działać.
Reguły filtrujące i translacyjne mają taką samą składnię, jak dowolny inny zestaw reguł PF, z jednym wyjątkiem: authpf daje możliwość korzystania z predefiniowanych makr:
Jest zalecaną praktyką, aby wykorzystywać makro $user_ip jedynie do zezwalania na ruch pakietów z komputera użytkownika, który potwierdził swoją tożsamość.
Dodatkowo do makra $user_ip, authpf authpf skorzysta z tabeli authpf_users (jeżeli istnieje) by przechowywać adresy IP dla każdego z uwierzytelnionych użytkowników. Upewnij się że ją zdefiniowałeś zanim jej użyjesz:
table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
to port smtp flags S/SA keep state
Tabela ta powinna być używana tylko w regułach przeznaczonych zastosowania dla wszystkich uwierzytelnionych użytkowników.
Można także umożliwiać dostęp odwrotnie, czyli jedynie poszczególnym użytkownikom poprzez umieszczanie nazw użytkowników w pliku /etc/authpf/authpf.allow. Jeśli plik /etc/authpf/authpf.allow nie istnieje, lub zawiera tylko "*", wówczas authpf zezwoli na dostęp wszystkim, których logowanie przez SSH zakończyło się sukcesem, pod warunkiem, że nie są zbanowani.
Jeśli authpf nie jest w stanie określić, czy użytkownik ma prawo dostępu, czy nie, wówczas wyświetla krótką wiadomość i rozłącza użytkownika. Wpis w /etc/authpf/banned/ zawsze nadpisuje wpis w /etc/authpf/authpf.allow.
Za każdym razem gdy użytkownik pomyślnie się zautoryzuje do authpf, zostanie otrzyma powitanie informujące że został zautoryzowany.
Hello charlie. You are authenticated from host "64.59.56.140"
Wiadomość tą można uzupełnić poprzez umieszczenie zwyczajowej informacji w /etc/authpf/authpf.message. Zawartość tego pliku zostanie wyświetlona po domyślnym powitaniu.
Jest kilka sposobów na ustawienie authpf jako powłokę użytkownika:
Klasy logowania tworzone są w pliku login.conf(5) OpenBSD dostarczany jest z klasą logowania authpf zdefiniowaną jako:
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
Użytkownicy są przypisywani do klas logowania poprzez edycję pola class w pliku passwd(5) dla danego użytkownika. Jedną z możliwości zrobienia tego jest użycie polecenia chsh(1).
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
Tutaj użytkownik charlie jest zalogowany z maszyny
192.168.1.3. Poprzez wysłanie sygnału SIGTERM do procesu authpf,
użytkownik może zostać rozłączony siłą. Authpf usunie także
wszystkie załadowane reguły i połączenia stanowe
utworzone przez użytkownika.
# kill -TERM 23664
Plik /etc/authpf/authpf.rules zawiera następujące reguły:
wifi_if = "wi0"
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
Użytkownik administrujący charlie musi mieć dostęp do
serwerów SMTP i POP3 kampusu, a dodatkowo do surfowania po sieci
i korzystania z SSH. Następujące reguły są ustawione w
/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
|
Główny zestaw reguł -- umieszczony w /etc/pf.conf -- jest
skonfigurowany w następujący sposób:
# makra
wifi_if = "wi0"
ext_if = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"
table <authpf_users> persist
scrub in all
# reguły filtrujące
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
|
Zestaw reguł jest bardzo prosty, oto jak działa:
Myślą przewodnią głównego zestawu reguł jest: blokowanie wszystkiego i przepuszczanie minimalnej ilości jasno sprecyzowanego ruchu. Ruch może wychodzić na zewnętrznym interfejsie, ale jest blokowany, gdy nadchodzi na interfejsie sieci bezprzewodowej dzięki polityce domyślnego blokowania. Gdy użytkownik potwierdzi swoją tożsamość, jego ruch jest przepuszczany na interfejsie sieci bezprzewodowej i może dotrzeć przez bramkę do pozostałych części sieci. Słowo kluczowe quick jest zastosowane, aby PF nie musiał przetwarzać za każdym razem wszystkich nazwanych zestawów reguł, gdy nowe połączenie przechodzi przez bramkę.
[Wstecz: Problemy z FTP] [Spis treści] [Dalej: Redundantny firewall z CARP i pfsync]