[Wstecz: Problemy z FTP] [Spis treści] [Dalej: Firewall dla sieci domowej lub małego biura]
Authpf wpływa na zestaw reguł pf(4) poprzez dodawanie reguł do nazwanych zestawów reguł dowiązanych w punktach zakotwiczenia. Za każdym razem, gdy użytkownik pomyślnie potwierdza swoją tożsamość, authpf tworzy nowy nazwany zestaw reguł i ładuje do niego wcześniej przygotowane reguły filtrujące, nat, binat i rdr. Reguły, które ładuje authpf mogą być przygotowane globalnie lub dla poszczególnych użytkowników.
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.
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ść.
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 ten 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.
Jest kilka sposobów na ustawienie authpf jako powłokę użytkownika:
# 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" dns_servers = "{ 10.0.1.56, 10.0.2.56 }" pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \ port domain keep state 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 serfowania 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" dns_servers = "{ 10.0.1.56, 10.0.2.56 }" pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \ port domain keep state 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
sjonfigurowany w następujący sposób:
# makra wifi_if = "wi0" ext_if = "fxp0" scrub in all # reguły filtrujące block drop all pass out quick on $ext_if proto tcp from $wifi_if:network flags S/SA \ modulate state pass out quick on $ext_if proto { udp, icmp } from $wifi_if:network \ keep state pass in quick on $wifi_if proto tcp from $wifi_if:network to $wifi_if \ port ssh flags S/SA 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: Firewall dla sieci domowej lub małego biura]