Dieses kleine Beispiel fuer eine OpenBSD-DSL-FW soll veranschaulichen
wie effektiv der Packetfilter arbeitet und wie schnell es moeglich ist
eine Firewall aufzusetzen die ein kleines Home-Netz absichert.
Die Unterstuetzung fuer DSL ist im OpenBSD integriert und es sollte
nicht laenger als 10 Minuten dauern eine Verbindung mit dem Internet
aufzunehmen (darauf gehe ich in diesem Artikel nicht weiter ein).
Die Netzstruktur ist in etwa wie folgt:
Home-LAN <-> Firewall <-> Internet
Wir wollen erreichen, dass alle Computer im Home-LAN uneingeschraenkten
Zugriff auf das Internet erhalten und gleichzeitig alle Verbindungen aus
dem Internet in das interne Netz geblocked werden.
Voraussetzung fuer das Funktionieren der Firewall sind zwei Eintraege.
Erstens ist in der /etc/rc.conf (bei DSL wuerde man dies aber mit
/etc/ppp/ppp.linkup machen!!!) der Eintrag:
pf=YES # Packet filter / NAT
auf YES zu setzen und zweitens ist in der /etc/sysctl.conf der folgende
Eintrag:
net.inet.ip.forwarding=1 # 1=Permit
forwarding (routing) of packets auszukommentieren.
Hinweis: Dieses Example erhebt keinerlei Anspruch auf Vollstaendigkeit
und es sei an dieser Stelle expliziet auf das offizielle OpenBSD
PF-Howto verwiesen!
Und nun schauen wir uns die REGELN in der /etc/pf.conf einfach mal an:
###################################################
# Small-HomeNet-Firewall (T-DSL-Example)
###################################################
# Macros
int_if = "tx1"
ext_if = "tun0"
int_net = "192.168.1.0/24"
# Options
set optimization aggressive
# Scrub
scrub in all
# Nat
nat on $ext_if from $int_net to any -> $ext_if
# EXT incoming rules
block in log on $ext_if all
pass in on $ext_if proto tcp from any to $ext_if port 22 keep state flags S/SA
pass in on $ext_if proto tcp from any to $ext_if port 113 keep state flags S/SA
# EXT outgoing rules
pass out on $ext_if all modulate state flags S/SA
# INT incoming - outgoing
pass in on $int_if all keep state
pass out on $int_if all keep state
###################################################
Macros sind also einfach nur Variablen-Definitionen. Options und Scrub
kontrollieren und veraendern (deep packet inspection) das Verhalten der
Firewall und sind im FAQ beschrieben. Die NAT-Zeile maskiert alle
abgehenden Verbindungen (aus dem internen Netz in das Internet), so dass
nach aussen hin alle Computer nurmehr mit der einen offiziellen IP, die
uns dyn. zugewiesen wird, im Internet arbeiten - dazu muessen natuerlich
alle Clients den OpenBSD-Router als Gateway eintragen.
Die erste wirkliche Regel definiert, dass prinzipiell jeder eingehende
Verkehr auf dem externen Interface (aus dem Internet) geblocked und
gelogged (Logging-View: tcpdump -nettt -i pflog0) wird. Die anderen
Regeln definieren dann die 'Ausnahmen' - was erlaubt werden soll (die
letzte Regel die 'matched' ist der Gewinner!).
Das 'keep state' in den Regeln bedeutet, dass zu einer initiierten
Connection auch automatisch die Rueckantwortpacket erlaubt werden
(stateful inspection) und wir fuer diese nicht noch eine extra Regel
schreiben muessen.
Die Anweisung 'modulate state' arbeitet ausschliesslich mit TCP und
generiert "starke ISN's" (Initial Sequence Numbers) fuer die Packets,
die mit dieser Rule matchen. Im Falle von UDP-Packets macht der PF dann
ein Fallback auf normales 'keep state'.
--
I.S.
|