Einführung
Es gibt viele Artikel zum Einrichten von FreeBSD und PF auf dem Runet, aber alle sind verstreut und unsystematisch. Und für mehr oder weniger interessante Dinge, wie das Routing mittels einer Firewall (Policy Based Routing), müssen Sie die Originaldokumentation lesen, zum Beispiel die FAQ zu OpenBSD PF . Es gibt jedoch Unterschiede in der Befehlssyntax für FreeBSD und OpenBSD. In dieser Artikelserie versuchen wir, die Fähigkeiten von PF von einfach bis komplex zu systematisieren und zu analysieren. Dieser Einführungsartikel ähnelt mit Sicherheit allen anderen Artikeln zum Paketfilter. Daher sind diejenigen, die bereits mit den Grundfunktionen vertraut sind, nicht interessiert. Auf eine Einführung kann man jedoch nicht verzichten, und das Fleisch wird in den folgenden Artikeln enthalten sein.
PF - Packet Filter ist eine Firewall, die ursprünglich vom OpenBSD-Projekt erstellt wurde. 2003 auf FreeBSD portiert. Im Jahr 2004 wurde es in das Hauptsystem integriert. Hauptmerkmale:
- Filterung basierend auf Adressen, Ports, Protokollen, Schnittstellen
- NAT - Quell-NAT, Ersetzung der Absenderadresse. Ziel nat, Fälschung der Empfängeradresse, Portweiterleitung
- Scrub - Normalisierung des Netzwerkverkehrs. Hilft bei einigen Arten von Dos-Angriffen, die auf der Bildung speziell vorbereiteter Pakete basieren
- SYN-Proxy - Schutz vor SYN-Flood-Angriffen
- Verbindungen ausgleichen
- — pfcync , , CARP, ,
- ( IP-, 2 )
- —
- — IP
- — ,
- (anchors) — , IPTables Linux
- pfstat
Der Hauptunterschied zu denselben IPTables ist das ungewöhnliche Arbeitsschema. Die Stapelverarbeitung endet nicht nach der ersten Regelübereinstimmung. Das heißt, wenn Sie die erste Regel auf "Alles ablehnen" setzen , wird das Paket nicht verworfen, sondern als verboten markiert. Es wird gemäß den Regeln weiter ausgeführt. Wenn keine Regel dies zulässt, wird es verworfen . Dies ist wichtig zu verstehen und zu verwenden. Falls gewünscht, kann dieses Verhalten jedoch durch den Parameter quick in der Regel überschrieben werden .
Management und hilfreiche Befehle
Um PF zu aktivieren, reicht es aus, die Optionen in der Datei "/etc/rc.conf" anzugeben:
pf_enable="YES" # pf pf_flags="" # pfctl pf_rules="/etc/pf.conf" # pflog_enable="YES" # pflog pflog_flags="" # pflog pflog_logfile="/var/log/pflog" #
Grundlegende Firewall-Befehle:
pfctl - # Firewall
aktivieren pfctl -d # Firewall
deaktivieren pfctl -nf # Syntax der
pfctl- Datei überprüfen -f # Regeln aus Datei
pfctl -Rf erneut lesen # Filterregeln aus Datei
pfctl -Nf erneut lesen # NAT-Regeln aus Datei
pfctl erneut lesen -sa # Alle Zustände
anzeigen pfctl -s #
Filterregeln anzeigen pfctl -sn # NAT-Regeln
anzeigen pfctl -s Anker -v #
Ankerbaum anzeigen pfctl -ss # Aktuelle Verbindungen anzeigen
Struktur der Konfigurationsdatei und Grundeinstellungen
Die Konfigurationsdatei besteht aus folgenden Abschnitten:
- Makros
- Tabellen
- Optionen
- Verkehrsnormalisierungsregeln (Scrub)
- Warteschlangen, Priorisierung und Geschwindigkeitskontrolle
- NAT-Adressübersetzung
- Paketfilterung
Regeln haben im Allgemeinen die folgende Syntax:
action [direction] [log] [quick] [on interface] [af] [proto protocol] [from src_addr [port src_port]] [to dst_addr [port dst_port]] [flags tcp_flags] [state]
Aktion - was mit dem Paket geschehen soll
Richtung - in aus,
melden Sie sich Richtung - ob das Paket in pflog bekommt
schnell - wenn das Paket unter dieser Regel fällt, dann wird es keine weitere Verarbeitung sein. Diese Regel ist die letzte für das
Schnittstellenpaket - der Name der Netzwerkschnittstellen-
Af- Adressfamilie, inet oder inet6, IPv4 oder IPv6 bzw.
Protokoll- Schicht-4-Protokoll, zum Beispiel: tcp, udp, icmp
scr_addr, dst_addr - source und Zieladressen
src_port, dst_port -
tcp_flags ports - tcp flags
state - Optionen zum Speichern des Status. Zum Beispiel würde "Status behalten" bedeuten, dass die Verbindung in der Statustabelle beibehalten wird und Antwortpakete durchlaufen werden können. Standardverhalten.
Nehmen Sie den einfachsten Webserver im luftleeren Raum. Es ist notwendig, eingehende Verbindungen an den TCP-Ports 22, 80, 443 (ssh, http, https) zu öffnen. Sie müssen auch ausgehende Verbindungen an den TCP-Ports 22, 80, 443 (ssh, http, https) und udp 53, 123 (dns und ntp) öffnen. Verbiete alles andere.
# ee pf.conf #macros section permit_tcp_ports="22,80,443" permit_udp_ports="53,123" #table section # #options section set block-policy return # , set skip on lo0 # , #scrub section scrub in all # #Queueing section # #nat section # , #filtering section block all # , , . pass in proto tcp to port { $permit_tcp_ports } # pass out proto tcp to port { $permit_tcp_ports } # tcp pass out proto udp to port { $permit_udp_ports } # udp pass out inet proto icmp # icmp
Dann geben wir den Befehl zur Syntaxprüfung ein:
pfctl -nf pf.conf
Wenn keine Fehlermeldungen angezeigt werden, geben Sie den Befehl zum
Anwenden der Regeln ein: pfctl -f pf.conf
Zum Überprüfen sehen wir uns die Filterregeln an:
# pfctl -sr scrub in all fragment reassemble block return all pass out proto tcp from any to any port = ssh flags S/SA keep state pass out proto tcp from any to any port = http flags S/SA keep state pass out proto tcp from any to any port = https flags S/SA keep state pass out proto udp from any to any port = domain keep state pass out proto udp from any to any port = ntp keep state pass out inet proto icmp all keep state pass in proto tcp from any to any port = ssh flags S/SA keep state pass in proto tcp from any to any port = http flags S/SA keep state pass in proto tcp from any to any port = https flags S/SA keep state
Wie Sie sehen können, werden die Makros für jeden Port in separate Regeln erweitert. Die Reihenfolge wird automatisch geändert. Ansonsten ist alles so, wie es sein sollte.
Ergebnis
Wir haben herausgefunden, was Paketfilter ist, und seine Hauptfunktionen kennengelernt. Hat die Struktur der PF-Konfiguration und ihrer Hauptabschnitte herausgefunden. Wir haben die einfachste Konfiguration erstellt, die jedoch recht funktional ist, einschließlich Makros, Paketnormalisierung und Filterung eingehender und ausgehender Pakete. Im nächsten Artikel werden Filterregeln, Statusverwaltung und Flags genauer betrachtet.
Unsere Lösung, Internet Control Server, ist ein Sicherheitsgateway, das auf FreeBSD aufbaut. Dieses System wurde aufgrund seiner Stabilität, Geschwindigkeit des Netzwerkstapels, der integrierten ZFS-Unterstützung im Kernel und des Fehlens von Lizenzproblemen ausgewählt. Auch die Arbeit mit FreeBSD macht Spaß, wenn auch nicht einfach. Gerne teilen wir diese Erfahrung mit Ihnen!