[Zurück: Probleme mit FTP] [Inhalt] [Weiter: Firewall-Redundanz mit CARP und pfsync]
Authpf lädt die Filter-Regeln eines Benutzers in einen einzigen 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 Loginsitzung ü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. Die Datei kann leer sein (Größe null), muss aber existieren, da sich authpf ansonsten sofort beendet, nachdem sich ein Benutzer erfolgreich angemeldet hat.
Die folgenden Konfigurationsdirektiven können in authpf.conf angegeben werden:
anchor "authpf/*"
Wo auch immer die anchor-Regel innerhalb des Regelsatzes platziert ist, wird PF vom Hauptregelsatz abzweigen, um die authpf-Regeln zu verarbeiten.
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 existieren, ansonsten wird authpf nicht laufen.
Regeln haben dieselbe Syntax wie in jedem anderen PF-Regelsatz, mit einer Ausnahme: Authpf erlaubt die Nutzung vom 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
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.
Jedes Mal, 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 }
|
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
pass in quick on $wifi_if \
proto tcp from $user_ip to $pop3_server port pop3
pass in quick on $wifi_if \
proto tcp from $user_ip to port { ssh, http, https }
|
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
# filter
block drop all
pass out quick on $ext_if inet proto { tcp, udp, icmp } \
from { $wifi_if:network, $ext_if }
pass in quick on $wifi_if inet proto tcp \
from $wifi_if:network to $wifi_if port ssh
pass in quick on $wifi_if inet proto { tcp, udp } \
from <authpf_users> to $dns_servers port domain
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]