[Vorige: Problemen met FTP] [Inhoud] [Volgende: Firewall Redundantie met CARP en pfsync]
Authpf laadt de filter/NAT regels van een gebruiker in een uniek ankerpunt. Het anker wordt benoemd door de UNIX gebruikersnaam van de gebruiker en het authpf proces-id te combineren in het formaat "gebruikersnaam(PID)". Het anker van elke gebruiker wordt opgeslagen in het authpf anker dat op zijn beurt geankerd wordt in de hoofdregelset. Het "fully qualified anchor path" wordt dan:
main_ruleset/authpf/username(PID)
De regels die authpf laadt, kunnen per gebruiker of globaal geconfigureerd worden.
Voorbeeldtoepassingen van authpf omvatten:
Authpf logt de gebruikersnaam en het IP adres van elke gebruiker die zich met succes authentiseert, evenals de start- en stoptijden van hun loginsessie via syslogd(8). Door deze informatie te gebruiken, kan een beheerder bepalen wie wanneer ingelogd was en ook gebruikers verantwoordelijk maken voor hun netwerkverkeer.
Authpf zal niet draaien als het configuratiebestand /etc/authpf/authpf.conf niet aanwezig is. Zelfs als het bestand leeg is (grootte nul), moet het nog steeds aanwezig zijn, anders zal authpf zich onmiddellijk beëindigen nadat een gebruiker zich met succes heeft aangemeld.
De volgende configuratie-opdrachten kunnen in authpf.conf geplaatst worden:
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"
Overal waar anchor regels geplaatst worden in de regelset, is waar PF van de hoofregelset zal aftakken om de authpf regels te evalueren. Het is niet nodig dat alle vier anchor regels aanwezig zijn; bijvoorbeeld, als authpf niet ingesteld is om nat regels te laden, kan de nat-anchor regel overgeslagen worden.
Het eerste bestand bevat regels die alleen geladen worden wanneer de gebruiker $USER (dit wordt vervangen door de gebruikersnaam van de gebruiker) inlogt. De per-gebruiker regelconfiguratie wordt gebruikt wanneer een specifieke gebruiker -- zoals een beheerder -- een set van regels vereist die verschilt van de standaard set. Het tweede bestand bevat de standaard regels die geladen worden voor gelijk welke gebruiker die geen eigen authpf.rules bestand heeft. Als het gebruiker-specifieke bestand bestaat, zal het het standaard bestand opheffen. Ten minste één van deze bestanden moet bestaan, anders zal authpf niet draaien.
Filter- en vertalingsregels hebben dezelfde syntaxis als in gelijk welke andere PF regelset, met één uitzondering: Authpf laat het gebruik toe van twee voorgedefinieerde macro's:
Het is aanbevolen praktijk om de $user_ip macro alleen te gebruiken om verkeer doorheen de gateway te laten vanaf de computer van de geauthentiseerde gebruiker.
Bovenop de $user_ip macro zal authpf gebruik maken van de authpf_users tabel (als ze bestaat) om de IP adressen van alle geauthentiseerde gebruikers op te slaan. Zorg ervoor de tabel te definiëren alvorens ze te gebruiken:
table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
to port smtp flags S/SA keep state
Deze tabel wordt best alleen gebruikt in regels die bedoeld zijn om van toepassing te zijn op alle geauthentiseerde gebruikers.
Omgekeerd is het ook mogelijk om alleen aan bepaalde gebruikers toegang te verlenen door gebruikersnamen te plaatsen in het /etc/authpf/authpf.allow bestand. Als het /etc/authpf/authpf.allow bestand niet bestaat of "*" in het bestand gezet wordt, dan zal authpf toegang verlenen voor gelijk welke gebruiker die met succes inlogt via SSH, zolang ze niet expliciet verbannen zijn.
Als authpf niet kan bepalen of een gebruiker toegelaten of verboden is, zal het een korte boodschap tonen en vervolgens de verbinding met de gebruiker verbreken. Een entry in /etc/authpf/banned/ heft altijd een entry in /etc/authpf/authpf.allow op.
Telkens wanneer een gebruiker zich met succes aanmeldt bij authpf, zal een begroeting getoond worden die aangeeft dat de gebruiker geauthentiseerd is.
Hello charlie. You are authenticated from host "64.59.56.140"
Deze boodschap kan aangevuld worden met een aangepaste boodschap in /etc/authpf/authpf.message. De inhoud van dit bestand zal getoond worden na de standaard welkomboodschap.
Er zijn enkele manieren om authpf als gebruiker-shell toe te kennen:
Loginklassen worden aangemaakt in het login.conf(5) bestand. Er zit een voorbeeld-loginklasse voor authpf-gebruikers in OpenBSD gedefineerd als:
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
Gebruikers worden toegekend aan een loginklasse door het class veld van de passwd(5) databank entry van de gebruiker. Eén manier om dit te doen is met het chsh(1) commando.
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
Hier is de gebruiker charlie ingelogd vanaf de machine
192.168.1.3. Door een SIGTERM signaal te sturen naar het authpf proces, kan
de gebruiker gedwongen uitgelogd worden. Authpf zal ook regels verwijderen
die voor de gebruiker geladen werden en gelijk welke "stateful" verbindingen
sluiten die de gebruiker geopend had.
# kill -TERM 23664
Het /etc/authpf/authpf.rules bestand bevat de volgende regels:
wifi_if = "wi0"
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
De beheerder-gebruiker charlie moet toegang kunnen krijgen tot
de campus SMTP en POP3 servers bovenop het web surfen en SSH gebruiken.
De volgende regels zijn ingesteld 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
|
De hoofdregelset -- die in /etc/pf.conf staat -- is als volgt
ingesteld:
# macros
wifi_if = "wi0"
ext_if = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"
table <authpf_users> persist
scrub in all
# filter
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
|
De regelset is heel eenvoudig en doet het volgende:
De idee achter de hoofdregelset is om alles te blokkeren en een zo klein mogelijke hoeveelheid verkeer door te laten. Verkeer kan vrij naar buiten stromen op de externe interface maar wordt door het "standaard weigeren" beleid geblokkeerd om de draadloze interface binnen te dringen. Zodra een gebruiker zich authentiseert, wordt zijn verkeer toegelaten om binnen te komen op de draadloze interface en om vervolgens doorheen de gateway buiten te stromen naar de rest van het netwerk. Het quick sleutelwoord wordt steeds gebruikt zodat PF niet elke benoemde regelset moet evalueren wanneer een nieuwe verbinding doorheen de gateway gelaten wordt.
[Vorige: Problemen met FTP] [Inhoud] [Volgende: Firewall Redundantie met CARP en pfsync]