[Zurück: Probleme mit FTP] [Inhalt] [Weiter: Firewall-Redundanz mit CARP und pfsync]
Authpf lädt Filter/NAT-Regeln eines Benutzers in einen einzigartigen Ankerpunkt. Die Benennung des Ankers findet unter Verwendung einer Kombination von dem Unix-Benutzernamens des Anwenders und der authpf-Prozess-ID in Form von »username(PID)« statt. Jeder Anker eines Benutzers wird innerhalb des authpf-Ankers gespeichert, welcher wiederum dem Hauptregelsatz angehängt ist. Der vollständige Ankerpfad wird somit:
main_ruleset/authpf/username(PID)
Die Regeln, die authpf lädt, können benutzerspezifisch oder auf einer systemweiten Basis konfiguriert werden.
Beispielverwendungen von authpf beinhalten:
Authpf loggt neben dem Benutzernamen und der IP-Adresse von jedem Benutzer, der sich erfolgreich authentifiziert, ebenfalls die Start- und Endzeiten ihrer Loginsetzung über syslogd(8). Unter Verwendung dieser Informationen kann ein Administrator erfahren, wer wann eingeloggt war und Benutzer somit für ihren Netzwerkverkehr belangbar machen.
Authpf wird nicht laufen, wenn die Konfigurationsdatei /etc/authpf/authpf.conf nicht existiert. Selbst wenn die Datei leer ist (keine Größe) muss sie existieren, ansonsten wird sich authpf sofort wieder beenden, wenn sich ein Benutzer erfolgreich angemeldet hat.
Die folgenden Konfigurationsdirektiven können in authpf.conf angegeben werden:
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"
Überall dort, wo anchor-Regeln innerhalb des Regelsatzes platziert wurden, wird PF vom Hauptregelsatz abzweigen, um die authpf-Regeln zu verarbeiten. Es ist nicht notwendig, dass alle vier anchor-Regeln vorhanden sind; wenn authpf zum Beispiel nicht so aufgesetzt wurde, dass es irgendwelche nat-Regeln laden soll, kann die nat-anchor-Regel ausgelassen werden.
Die erste Datei beinhaltet Regeln, die nur geladen werden, wenn sich der Benutzer $USER (dies wird mit dem Benutzernamen des Benutzers ausgetauscht) einloggt. Die benutzerspezifische Regelkonfiguration wird verwendet, wenn ein bestimmter Benutzer - wie zum Beispiel ein Administrator - einen Satz an Regeln benötigt, die vom standardmäßigen Satz abweichen. Die zweite Datei beinhaltet die standardmäßigen Regeln, die für jeden Benutzer geladen werden, der keine eigene authpf.rules-Datei hat. Wenn die benutzerspezifische Datei existiert, wird sie die standardmäßige Datei überschreiben. Zumindest eine von beiden Dateien muss existierieren, ansonsten wird authpf nicht laufen.
Filter- und Übersetzungsregeln haben die gleiche Syntax wie jeder anderer PF-Regelsatz mit einer Ausnahme: Authpf erlaubt die Verwendung von zwei vordefinierten Makros:
Es wird empfohlen, das $user_ip-Makro zu verwenden, um nur den Verkehr durch das Gateway vom Computer des authentifizierten Benutzers zu erlauben.
Zusätzlich zum $user_ip-Makro wird authpf die authpf_users-Tabelle verwenden (wenn sie existiert), um die IP-Adressen aller authentifizierten Benutzer aufzubewahren. Stelle sicher, dass du die Tabelle definierst, bevor du sie verwendest:
table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
to port smtp flags S/SA keep state
Diese Tabelle sollte nur in Regeln verwendet werden, die dafür gedacht sind, für alle authentifizierten Benutzer zu gelten.
So gesagt ist es ebenfalls möglich, nur bestimmte Benutzer zu erlauben, indem der Benutzername in die /etc/authpf/authpf.allow-Datei eingetragen wird. Wenn die /etc/authpf/authpf.allow-Datei nicht existiert oder »*« in die Datei eingetragen wurde, wird authpf jedem Benutzer, der sich erfolgreich über SSH eingeloggt hat, den Zugriff erlauben, solange dieser nicht explizit gebannt wurde.
Wenn authpf nicht in der Lage ist herauszufinden, ob ein Benutzername erlaubt oder verboten ist, wird es eine kurze Nachricht ausgeben und den Benutzer wieder trennen. Ein Eintrag in /etc/authpf/banned/ überschreibt immer einen Eintrag in /etc/authpf/authpf.allow.
Jedesmal, wenn sich ein Benutzer erfolgreich bei authpf anmeldet, wird eine Begrüßung ausgegeben, die angibt, dass der Benutzer authentifiziert ist.
Hello charlie. You are authenticated from host "64.59.56.140"
Diese Nachricht kann ergänzt werden, indem eine angepasste Nachricht in /etc/authpf/authpf.message geschrieben wird. Der Inhalt dieser Datei wird nach der standardmäßigen Willkommensnachricht ausgegeben.
Es gibt einige Wege, um authpf als Benutzershell zuzuweisen:
Loginklassen können in der login.conf(5)-Datei erstellt werden. OpenBSD wird mit einer authpf-Loginklasse ausgeliefert, die wie folgt definiert ist:
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
Benutzer werden einer Loginklasse zugewiesen, indem das class-Feld des passwd(5)-Datenbankeintrags vom Benutzer geändert wird. Ein Weg, das zu machen, ist das chsh(1)-Kommando.
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
Hier ist der Benutzer charlie von der Maschine 192.168.1.3 aus
eingeloggt. Durch das Senden eines SIGTERM-Signals zum authpf-Prozess
wird der Benutzer gewaltsam ausgeloggt. Authpf wird ebenfalls jegliche
geladenen Regeln entfernen, die für den Benutzer bestimmt waren und
schließt alle zustandsbedingten Verbindungen, die der Benutzer geöffnet
hat.
# kill -TERM 23664
Die /etc/authpf/authpf.rules-Datei beinhaltet folgende Regeln:
wifi_if = "wi0"
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
Der administrative Benutzer charlie braucht die Möglichkeit,
auf die SMTP- und POP3-Server vom Campus zuzugreifen, sowie im Web
zu surfen und SSH zu verwenden. Die folgenden Regeln wurden in
/etc/authpf/users/charlie/authpf.rules eingestellt:
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
|
Der Hauptregelsatz, der sich in /etc/pf.conf befindet, wurde
wie folgt aufgesetzt:
# 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
|
Der Regelsatz ist sehr einfach und macht Folgendes:
Die Idee hinter dem Hauptregelsatz ist, alles zu blocken und nur so wenig Verkehr zuzulassen wie möglich. Der Verkehr kann frei durch das externe Interface fließen, doch wird alles durch die »standardmäßig blocken«-Richtlinie am Eindringen in das drahtlose Netzwerkinterface gehindert. Sobald sich ein Benutzer authentifiziert, wird der Verkehr von ihm das drahtlose Interface passieren dürfen, um von dort aus durch das Gateway in den Rest des Netzwerkes fließen zu dürfen. Das quick-Schlüsselwort wird durchgehend verwendet, sodass PF nicht jeden benannten Regelsatz überprüfen muss, wenn eine neue Verbindung durch das Gateway gelassen wird.
[Zurück: Probleme mit FTP] [Inhalt] [Weiter: Firewall-Redundanz mit CARP und pfsync]