Wenn du ein Netzwerkadministrator bist und Routingprotokolle aufsetzt und dein OpenBSD Rechner dein Router wird, dann solltest du dein Wissen über IP Netzwerken mit Understanding IP addressing vertiefen. Dies ist ein exzellentes Dokument. "Understanding IP addressing" beinhaltet grundlegendes Wissen, auf dem man beim IP Netzwerken aufbauen kann, insbesondere wenn man mit mehreren Netzwerken arbeitet oder für sie verantwortlich ist.
Wenn du mit Anwendungen wie Web-, FTP- oder Mailserver arbeitest, dann könntest du viel vom Lesen der entsprechenden RFCs profitieren. Natürlich kannst du nicht alle lesen. Aber dennoch, lies jene, die dich interessieren oder die du bei deiner Arbeit brauchen könntest. Lies nach, wie sich arbeiten sollten. Die RFCs definieren mehrere (tausend) Standards für Protokolle im Internet und wie sie arbeiten sollten.
ne3 at pcmcia1 function 0 "Linksys, EtherFast 10/100 PC Card (PCMPC100), " port 0x340/16 irq 9 ne3: address 00:e0:98:04:95:baSolltest du nicht den deinen Gerätenamen kennen, dann findest du hier eine Liste gebräuchlicher Karten und deren Gerätenamen.
Jegliche Verweise in /etc/ifaliases, /etc/ipf.rules, /etc/ipnat.rules zu den alten Kartennamen mx, al, ax oder pn müssen durch dc ersetzt werden. Auch alle hostname.xxx Dateien müssen nach hostname.dcX umbenannt werden, um erkannt zu werden. Ersetze X mit der Kartennummer.
Nochmals: Du kannst mit ifconfig(8) überprüfen, welche Karten identifiziert wurden. Hier ist die Ausgabe einer ne2k Karte.
$ ifconfig -a lo0: flags=8009<UP,LOOPBACK,MULTICAST> inet 127.0.0.1 netmask 0xff000000 lo1: flags=8008<LOOPBACK,MULTICAST> ne3: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> media: Ethernet manual inet 10.0.0.38 netmask 0xffffff00 broadcast 10.0.0.255 sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> sl1: flags=c010<POINTOPOINT,LINK2,MULTICAST> ppp0: flags=8010<POINTOPOINT,MULTICAST> ppp1: flags=8010<POINTOPOINT,MULTICAST> tun0: flags=10<POINTOPOINT> tun1: flags=10<POINTOPOINT> enc0: flags=0<> bridge0: flags=0<> bridge1: flags=0<>
Wie du sehen kannst, gibt ifconfig(8) reichlich Information aus, die wir benötigen. Aber dies erlaubt uns auch, unsere Karte zu identifizieren. Im obigen Beispiel wurde die Netzwerkkarte bereits konfiguriert. Du kannst dies anhand der Werte "inet 10.0.0.38 netmask 0xffffff00 broadcast 10.0.0.255" sehen und daß die UP und RUNNING Kennzeichen eingeschalten sind. Du wirst auch viele weitere Schnittstellen bemerken. Hier eine Liste, die vorhanden sein werden.
[adressenfamilie] [deine_ip] [deine_netzmaske] [(media) optionen]Für das obige Beispiel würde eine korrekte Datei so aussehen:
$ cat /etc/hostname.ne3 inet 10.0.0.38 255.255.255.0 NONE
Der nächste Schritt ist das Einstellen deines Gateways. Dazu trag einfach die IP deines Gateways in die Datei /etc/mygate ein. Dies erlaubt das Aktivieren deines Gateways beim Starten. Jetzt solltest du deine Nameserver eintragen und die Datei /etc/hosts einrichten. Für die Nameserver benötigst du eine Datei namens /etc/resolv.conf. Mehr über das Format dieser Datei findest du in der resolv.conf(5) Manual Seite. Für den Normalgebrauch ist hier ein Beispiel, in dem deine Nameserver 125.2.3.4 und 125.2.3.5 sind. Du gehörst zur Domäne "deinedomaene.com".
$ cat /etc/resolv.conf search deinedomaene.com nameserver 125.2.3.4 nameserver 125.2.3.5 lookup file bind
Jetzt kannst du entweder rebooten oder das /etc/netstart Script ausführen, indem du (als root) folgendes eingibst:
$ sh /etc/netstart writing to routing socket: File exists add net 127: gateway 127.0.0.1: File exists writing to routing socket: File exists add net 224.0.0.0: gateway 127.0.0.1: File exists
Die Fehlermeldung betreffen das loopback Interface. Daher kann dies ignoriert werden. Ab jetzt sollte dein System funktionieren. Du kannst wiederum mit ifconfig(8) überprüfen, ob deine Netzwerkkarte aktiv ist. Die Routingtabelle überprüfe mit netstat(1) oder route(8). Hier ist ein Beispiel für beides.
$ netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Mtu Interface default 10.0.0.1 UGS 0 86 - ne3 127/8 127.0.0.1 UGRS 0 0 - lo0 127.0.0.1 127.0.0.1 UH 0 0 - lo0 10.0.0/24 link#1 UC 0 0 - ne3 10.0.0.1 aa:0:4:0:81:d UHL 1 0 - ne3 10.0.0.38 127.0.0.1 UGHS 0 0 - lo0 224/4 127.0.0.1 URS 0 0 - lo0 Encap: Source Port Destination Port Proto SA(Address/SPI/Proto) $ route show Routing tables Internet: Destination Gateway Flags default 10.0.0.1 UG 127.0.0.0 LOCALHOST UG localhost LOCALHOST UH 10.0.0.0 link#1 U 10.0.0.1 aa:0:4:0:81:d UH 10.0.0.38 LOCALHOST UGH BASE-ADDRESS.MCA LOCALHOST U
Dies ist nur die grundlegende Information, um deinen OpenBSD Rechner als Gateway (auch Router genannt) einzurichten. Wenn du OpenBSD als Router im Internet verwenden willst, solltest du auch die IP Filter unten folgenden Instruktionen beachten, um potentiell schädliche IP Daten zu blockieren. Auch solltest du wegen der Knappheit an IPv4 Adressen die Informationen bezüglich Network Address Translation beachten, um deinen IP Adressbereich zu schonen.
Der GENERIC Kernel hat bereits die Fähigkeit für IP Forwarding, aber dies muß erst eingeschalten werden. Du solltest dies mit sysctl(8) tun. Um diese Änderung permanent einzutragen, mußt du die Datei /etc/sysctl.conf editieren. Füge einfach folgende Zeile in diese Konfigurationsdatei ein.
net.inet.ip.forwarding=1
Ohne Reboot kannst du dies auch direkt mit sysctl(8) durchführen. Beachte aber, daß diese Änderung nach einem Reboot weg ist und der folgende Befehl als root ausgeführt werden muß.
# sysctl -w net.inet.ip.forwarding=1 net.inet.ip.forwarding: 0 -> 1
Nun modifiziere die Routen der anderen Hosts. Es gibt viele verschiedene Möglichkeiten, OpenBSD als Router einzusetzen, z. B. mittels Software wie routed(8), gated, mrtd und zebra. OpenBSD hat Unterstützung in der ports Kollektion sowohl für gated als auch mrtd. OpenBSD unterstützt mehrere T1, HSSI, ATM, FDDI, Ethernet und serielle (PPP/SLIP) Schnittstellen.
Beginnend mit OpenBSD 2.8 wird /etc/ifaliases nicht mehr benutzt!
OpenBSD hat einen einfachen Mechanismus, um IP Aliases auf einer Schnittstelle einzurichten. Dazu mußt du nur die Datei /etc/hostname.<if> editieren. Diese Datei wird beim Starten vom /etc/rc Script gelesen, welches Teil der rc startup Hierarchie ist. Für das Beispiel nehmen wir an, daß der Benutzer eine Schnittstelle dc0 hat und sich im Netzwerk 192.168.0.0 befindet. Weitere wichtige Informationen:
Bei OpenBSD verwendet man nur den Adapternamen. Es gibt keine Unterschiede zwischen dem ersten und dem zweiten Alias. Daher muß man sie nicht - wie in einigen anderen Betriebssystemen - als dc0:0, dc0:1 bezeichnen. Wenn du dich auf einen speziellen IP Alias beziehst oder einen hinzufügst, dann nimm "ifconfig int alias" anstelle nur nur "ifconfig int" auf der Befehlszeile. Du kannst Alias mit "ifconfig int delete" löschen.
Angenommen du verwendest mehrere IP Adressen im selben IP Subnetz mit Aliases, dann ist die Netzmaskeneinstellung für jeden Alias 255.255.255.255. Sie müssen nicht der Netzmaske der ersten IP der Netzwerkkarte folgen. In diesem Beispiel /etc/hostname.dc0 werden zwei Alias zur Netzwerkkarte dc0 hinzugefügt, die als 192.168.0.2 mit Netzmaske 255.255.255.0 konfiguriert wurde.
# cat /etc/hostname.dc0 inet 192.168.0.2 255.255.255.0 media 100baseTX inet alias 192.168.0.3 255.255.255.255 NONE inet alias 192.168.0.4 255.255.255.255 NONE
Wenn du einmal diese Datei erstellt hast, benötigst du einen Reboot, um die Änderung automatisch durchführen. Du kannst aber auch die Aliases manuell mit ifconfig(8) hochbringen. Für das erste Alias:
# ifconfig dc0 inet alias 192.168.0.3 netmask 255.255.255.255
Um die Aliases zu sehen:
$ ifconfig -A
dc0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST>
media: Ethernet manual
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet 192.168.0.3 netmask 0xffffffff broadcast 192.168.0.3
Das IP Filter Packet wurde geschaffen, um zwei Aufgaben zu erfüllen: Berechtigungen von packet level forwarding ipf(8) und das Umlegen von hosts/subnets auf einen externen Adressbereich ipnat(8). Die Konfigurationsdateien dieser zwei Dienste sind /etc/ipf.rules und /etc/ipnat.rules.
Du mußt /etc/rc.conf editieren, um sie beim Starten zu aktivieren. Und net.inet.ip.forwarding=1 muß in deiner /etc/sysctl.conf gesetzt sein (oder dein Kernel muß mit IPFORWARDING oder GATEWAY Option AN kompiliert sein.). Du brauchst auch einen Kernel mit den Optionen IPFILTER und IPFILTER_LOG (GENERIC Kernel haben diese Optionen).
Wenn du IP Filter im Kernel einkompiliert hast, aber nicht in /etc/rc.conf eingeschalten hast, kannst du es einfach aktivieren.
# ipf -Fa -f /etc/ipf.rules -E # ipnat -CF -f /etc/ipnat.rules
Die -E Option bei ipf aktiviert ('enables') IP Filter. -Fa löscht alle Regeln, die du noch hast. -f /etc/ipf.rules lädt die Regeln aus der Datei /etc/ipf.rules.
Wenn du /etc/ipf.rules nach dem Laden von ipf änderst, kannst du deine Regeln sehr leicht neu laden!
# ipf -Fa -f /etc/ipf.rulesGleiches für ipnat...
# ipnat -CF -f /etc/ipnat.rulesUm ipmon im Debugmodus zu starten:
# ipmon -Ds
Dieses Dokument wird einige grundlegende ipf und ipnat Konfigurationen im Folgenden darstellen. In /usr/share/ipf/ findest du ein paar nette Beispiele für ipnat und ipf. Wir empfehlen dir, jenes, daß dir am ehesten paßt, auszuwählen und auf deine Bedürfnisse abzuändern. Du kannst weitere Informationen im IP Filter Mailinglistenarchiv, auf der IP Filter Website und noch im IP Filter HOWTO finden.
Um ipf beim Booten zu aktivieren, mußt du /etc/rc.conf modifzieren: IPFILTER=YES. IP Filter (ipf) wird von /etc/ipf.rules gesteuert, welche beim Booten gelesen wird. Für weitere Erklärungen siehe ipf(5). In den folgenden Beispielen wird fxp0 das externe Netzwerkinterface zum Internet sein. Dies wird für dich anders sein, wenn du einen anderen Ethernetadapter in deinem Computer hast. Diese Regeln nehmen eine Standleitungsverbindung an, so wie sie bei einem Webserver zu erwarten ist.
IP Filter Regeln werden sequentiell von Anfang bis Ende abgearbeitet. Es mag hilfreich sein, sich vorzustellen, daß jedes einzelne Paket zunächst jede Regel erfüllen muß, bevor es sein Ziel erreicht.
Z. B. erlauben die Standardregeln, daß alle Pakete rein und raus dürfen:
pass out from any to any pass in from any to anyNun angenommen, wir wollen keine ankommenden Verbindungen zu Port 3306 (mysql) zulassen, weil die Datenbank nur mit dem localhost verbunden sein soll. Die Regeln würden so aussehen:
pass out from any to any pass in from any to any block in on fxp0 from any to any port = 3306Dies bedeutet, daß alle ankommenden Pakete von überall nach überall mit Zielport 3306 auf dem Interface fxp0 blockiert werden. Genauergesagt wird ein Paket für Port 3306 auf dem Adapter fxp0 zunächst die erste "pass in" Regeln passieren und dann von der "block in port = 3306" Regel blockiert werden. Wenn du die Anordnung unserer ankommenden Regel vertauschst (NB: die Reihenfolge ist wichtig):
pass out from any to any block in on fxp0 from any to any port = 3306 pass in from any to anyPakete mit Zielport 3306 würden passieren, weil die letzte Regel alle Pakete passieren läßt. Dies muß man immer im Hinterkopf behalten, wenn man Paketfilterregeln schreibt: Die letzte passende Regel gewinnt.
Natürlich gibt es Ausnahmen zu jeder Regel. Die quick Option läßt jedes Paket bei der ersten passenden Regel fallen. Bei obigem "falschen" Beispiel mit quick zur "block in" Regel:
pass out from any to any block in quick on fxp0 from any to any port = 3306 pass in from any to any
Ein Paket mit Ziel für unseren Rechner auf Port 3306 wird die "block in quick" Regel treffen und sofort fallengelassen. Alle Pakete für die anderen Ports werden keine passende Regel finden bis sie auf unsere "pass in" Regel treffen, die alle Pakete passieren läßt.
Standardmäßiges Ablehnen
Die sicherste Paketfilterregel ist standardmäßiges Ablehnen. Jeder Datenverkehr, der nicht ausdrücklich erlaubt ist, wird abgelehnt. Diese Richtlinie ist bei weitem sicherer, als jeden geschützten Dienst ausdrücklich zu erlauben. erlaubt kleineren Umfang der Regeln und kann Schutz bieten, wenn ein unabsichtlich mißkonfigurierter Dienst ungeschützt zurückgelassen wurde.
Sehen wir uns einen anderen, realen Beispielregelsatz an und erklären Zeile für Zeile. Hier ein Beispiel für einen Webserver mit standardmäßigem Ablehnen; erlaubt werden nur ssh Verbindungen (für Administration) und Verbindung zu http (port 80) und https (port 443).
############################# # beginn regelsatz ############################# pass in quick on fxp0 from any to any port = 22 pass in quick on fxp0 from any to any port = 80 pass in quick on fxp0 from any to any port = 443 block in quick on fxp0 from any to any pass out on fxp0 from any to any ############################## # ende regelsatz ##############################
Dies wird ankommende Verbindungen von überall zu Ports 22 (ssh), 80 (http), and 443 (https) erlauben. Es werden alle anderen Verbindungsversuche fallengelassen und alle ausgehenden Verbindungen erlaubt. Dies ist ein recht fester Regelsatz. Aber wenn wir nur interne Rechner vom 1.1.1.0 Adressbereich zu ssh verbinden lassen wollen, aber Verbindungen von außerhalb zu http und https zulassen wollen?
############################# # beginn regelsatz ############################# pass in quick on fxp0 from 1.1.1.0/24 to any port = 22 pass in quick on fxp0 from any to any port = 80 pass in quick on fxp0 from any to any port = 443 block in quick on fxp0 from any to any pass out on fxp0 from any to any ############################## # ende regelsatz ##############################Recht nett, aber wenn nur eine einzige Machine (1.1.1.1) den Webserver administrieren darf? In diesem Fall ändern wir dies:
pass in quick on fxp0 from 1.1.1.0/24 to any port = 22in:
pass in quick on fxp0 from 1.1.1.1/32 to any port = 22IP Filter unterstützt sowohl CIDR als auch Punkt/Dezimalformat der Netzmaskenadresse. Obiges in anderer Schreibweise:
pass in quick on fxp0 from 1.1.1.1/255.255.255.255 to any port = 22aber warum solltest du?
Beispielregeln
Hier ein paar gute Regeln, die jeder verwenden kann (angenommen wird, daß fxp0 das externe Interface mit Internetverbindung ist). Zunächst einfacher Schutz gegen Adressenschwindel ("address spoofing").
block in quick on fxp0 from 127.0.0.0/8 to any block in quick on fxp0 from 192.168.0.0/16 to any block in quick on fxp0 from 172.16.0.0/12 to any block in quick on fxp0 from 10.0.0.0/8 to any block out quick on fxp0 from any to 127.0.0.1/8 block out quick on fxp0 from any to 192.168.0.0/16 block out quick on fxp0 from any to 172.16.0.0/12 block out quick on fxp0 from any to 10.0.0.0/8Eine gute Idee ist es, das loopback Interface von deinen anderen Regeln zu trennen.
pass out quick on lo0 pass in quick on lo0Unsere Regelsatz schaut schon recht gut aus. Zusammen sieht er so aus:
########################### # beginn regelsatz ########################### # loopback regeln pass out quick on lo0 pass in quick on lo0 # anti-adressenschwindel von nicht-routebaren adressen block in quick on fxp0 from 127.0.0.0/8 to any block in quick on fxp0 from 192.168.0.0/16 to any block in quick on fxp0 from 172.16.0.0/12 to any block in quick on fxp0 from 10.0.0.0/8 to any block out quick on fxp0 from any to 127.0.0.1/8 block out quick on fxp0 from any to 192.168.0.0/16 block out quick on fxp0 from any to 172.16.0.0/12 block out quick on fxp0 from any to 10.0.0.0/8 # nur unser administrationsrechner darf sich mittels ssh verbinden pass in quick on fxp0 from 1.1.1.1/32 to any port = 22 # erlaube anderen http und https pass in quick on fxp0 from any to any port = 80 pass in quick on fxp0 from any to any port = 443 # zuletzt standardmaessiges ablehnen
block in quick on fxp0 from any to any # und lass ausgehenden datenverkehr raus pass out on fxp0 from any to any ############################# # ende regelsatz #############################Paket logging
Nun, dies ist zwar schon recht gut, aber es könnte besser sein. Z. B. wenn wir alle Verbindungsversuche zu Port 22(ssh) loggen wollten, die von unserer Firewall blockiert werden? Einfach - IP Filter hat dafür das log Stichwort:
pass in quick on fxp0 from 1.1.1.1/32 to any port = 22 block in log quick on fxp0 from any to any port = 22Diese Regel wird erlauben, daß sich unser Administrationsrechner auf Port 22 verbinden darf, aber alle anderen Verbindungsversuche auf Port 22 ablehnt und aufzeichnet. Protokollbasierende Paketfilterung
IP Filter kann auch nach jedem IP Protokoll filtern, entweder nach seiner Nummer oder in /etc/protocols aufgelistet ist. Im Sinne der Klarheit werden wir uns nur mit tcp, udp und icmp beschäftigen. Dies sind die am meisten verwendeten Protokolle, auf denen alle grundlegenden Internetanwendungen basieren.
Damit IPF protokollbasierend filtert muß das Stichwort proto verwendet werden. Um unsere frühere ssh Beispielsregel zu verwenden, da ssh ja über tcp rennt, sollten wir nur tcp Pakete zur Verbindung zulassen. Mit dem proto Stichwort erlauben wir nur tcp, und wir bekommen eine Regel wie folgt:
pass in quick on fxp0 proto tcp from 1.1.1.1/32 to any port = 22Aber wenn wir eine Verbindung für einen Dienst brauchen, die tcp und udp benötigt (wie z. B. bind)? Nun im Falle von tcp/udp erlaubt uns IP Filter beide Protokolle zusammen zu schreiben. NB: Dies gilt nur für tcp/udp. Für das bind Beispiel würde folgende Regel tcp und udp Verbindungen (bei standardmäßigem Ablehnen) erlauben:
pass in quick on fxp0 proto tcp/udp from any to any port = 53Paketfilterung
Zusätzlich zur protokollbasierenden Filterung ist IP Filter auch zum Handhaben der zersplitterten IP Pakete fähig (eine allgemeine Methode des Besiegens der Paketfilter). Es gibt zwei mögliche Schlüsselwörter: frag für allgemein zersplitterte IP Pakete, oder short für IP Pakete mit für Vergleiche zu kurzen Informationen (headers). Da zersplitterte Pakete auch normalerweise auftreten können, abhängig von den Verbindungsumständen, es ist am besten, Pakete mit den Vorsätzen nur zu filtern, die für gültigen Vergleich zu klein sind. Dieses kann mit der folgenden Richtlinie vollendet werden:
block in quick proto tcp all with shortUnd bzgl. IP Optionen? IP Filter kann jene Pakete auch behandeln. Pakete können entweder fallengelassen werden, wenn sie IP Optionen haben, oder sie spezifischen IP Optionen besitzen, die eingestellt werden. Z. B. läßt die folgende Richtlinie fallen und protokolliert alle Pakete mit den eingestellten IP Optionen.
block in log quick on fxp0 all with ipoptsDies kann aber einige Dinge wie traceroute(8) brechen. Du kannst auch bestimmte Optionen verbieten. Z. B. ist eine gute Regel, alle Pakete mit "source routing" Option zu verbieten. Dies geschieht mit dieser Regel:
block in quick on fxp0 all with opt lsrr block in quick on fxp0 all with opt ssrrTCP Flags, bestehende Verbindungen und keep state
Nun kommt IP Filter in vollem Ernst: IP Filters größte Stärken liegen in der Fähigkeit, Pakete anhand ihrer TCP flags (=Kennzeichen) zu filtern und bestehende Verbindungen und Verbindungszustände aufrechtzuerhalten. Man sollte die Rolle jedes TCP flags verstehen, wenn man die Pakete danach filtern will. Z. B. wenn du alle Pakete mit den FIN, URG und PSH flags filtern willst (für z. B. einen "nmap OS fingerprinting attempt"), dann solltest du eine Regel wie diese einsetzen:
block in quick on fxp0 proto tcp from any to any flags FUP(Danke an Kyle Hargraves für diesen Tip)
Die nächste Fähigkeit von IP Filter ist, Verbindungszustände beizubehalten. Den Zustand beizubehalten ist beschrieben worden, wie " nicht sprechend bis gesprochen mit ", das heißt, sobald ein Anschluß hergestellt ist, müssen Pakete die Regelsätze nicht mehr überqueren. Dieses ist eine sehr leistungsfähige Eigenschaft, was viel einfacheres und sichereres Richtlinie Schreiben erlaubt.
Z. B. lassen sehen wir uns an, wie wir Zustand an unserem vorhergehenden Beispielregelsatz anwenden können (schon verwirrt?). Zu Wiederholung, wir erlauben Managementzugriff von unserem Klasse C Netz zu Kanal 22 (ssh) und erlauben allen ankommenden Web-Verkehr auf Kanälen 80 (http) und 443 (https). Wir blocken jeglichen weiteren Verkehr. Aber was, wenn ich mit ssh aus dem webserver heraus wünsche? Was, wenn ich lynx benutzen muß, um etwas im FAQ nachzuschauen? Gut, kann ich nicht, weil ich alle ankommenden Anschlüsse anders als auf den spezifizierten Kanälen geblockt habe. Während dieses der sicherste Weg ist, kann es ziemlich ungünstig bzw. unhandlich sein. Indem wir die Schlüsselwörter keep state unserer "pass out" Richtlinie hinzufügen, können wir ankommende Verbindungen in Erwiderung auf von uns selbst initialisierte Verbindungen automatisch erlauben, wie z. B. beim Webbrowsen. NB: Wir müssen das Protokol angeben, für das wir "keep state" halten.
############################# # beginn regelsatz ############################# pass in quick on fxp0 from 1.1.1.0/24 to any port = 22 pass in quick on fxp0 from any to any port = 80 pass in quick on fxp0 from any to any port = 443 block in quick on fxp0 from any to any pass out on fxp0 proto tcp from any to any keep state ############################## # ende regelsatz ##############################Diese kleine Änderung wird die Flexibilität und Sicherheit unseres Regelsatzes dramatisch erhöhen, weil IP Filter extrem flexibel ist. Z. B. erlauben wir im obigen Regelsatz jeden TCP-Datenverkehr auf Ports 80 & 443. Wir können dies noch besser machen: Um eine TCP Verbindung zu errichten, müssen wir nur die erste Verbindungsanfrage erlauben. Sobald dies geschieht, können wir diesen Kanal blockieren und unsere "keep state" Regel die Verbindung verwalten lassen. Um die erste Verbindungsanfrage vollenden zu lassen, benötigen wir nur Pakete mit SYN und SYNACK Kennzeichen. Indem wir nur solche Pakete durchlassen, können wir z. B. viele Arten von "portscanning" aufgrund von FIN Kennzeichen verhindern. Die Regel sieht nun so aus:
############################# # beginn regelsatz ############################# pass in quick on fxp0 from 1.1.1.0/24 to any port = 22 pass in quick on fxp0 from any to any port = 80 flags S/SA pass in quick on fxp0 from any to any port = 443 flags S/SA block in quick on fxp0 from any to any pass out on fxp0 proto tcp from any to any keep state ############################## # ende regelsatz ##############################Nun schreiben wir alles zusammen: Dieser Regelsatz hat standardmäßiges Ablehnen, erlaubt Administration nur via ssh vom internen Netzwerk und erlaubt ankommenden Datenverkehr zu Ports 80 (http) und 443 (https). Er wird auch gegen Adressenschwindel von nicht-routebaren Adressen schützen und alle zu fragmentierten Pakete verwerfen. Eine recht umfassende Einstellung für einen Webserver. Hier unsere /etc/ipf.rules:
########################### # beginn regelsatz ########################### # loopback rules pass out quick on lo0 pass in quick on lo0 # drop itsy bitsy frags block in quick proto tcp all with short # drop source routed packets block in quick on fxp0 all with opt lsrr block in quick on fxp0 all with opt ssrr # don't allow anyone to spoof non-routeable addresses block in quick on fxp0 from 127.0.0.0/8 to any block in quick on fxp0 from 192.168.0.0/16 to any block in quick on fxp0 from 172.16.0.0/12 to any block in quick on fxp0 from 10.0.0.0/8 to any block out quick on fxp0 from any to 127.0.0.1/8 block out quick on fxp0 from any to 192.168.0.0/16 block out quick on fxp0 from any to 172.16.0.0/12 block out quick on fxp0 from any to 10.0.0.0/8 # only allow our machines to connect via ssh pass in quick on fxp0 from 1.1.1.0/24 to any port = 22 # allow others to use http and https pass in quick on fxp0 from any to any port = 80 flags S/SA pass in quick on fxp0 from any to any port = 443 flags S/SA # finally lock the rest down with a default deny block in quick on fxp0 from any to any # and let out-going traffic out and maintain state on established connections # -- The flags S on the keep state is to ensure that state tracking starts # only on the first outbound packet in a tcp session. # unnecessary consumption of state table entries. # -- The flag s only works on the tcp protocol, so three entries are required to # to cover all three protocols (tcp, udp, icmp). pass out quick on fxp0 proto tcp from any to any flags S keep state pass out quick on fxp0 proto udp from any to any keep state pass out quick on fxp0 proto icmp from any to any keep state ############################# # ende regelsatz #############################
Wenn du Schwierigkeiten hast, dann kannst du Logging für bestimmte Regelsätze aktivieren; z.B.: pass in log uick on fxp0 from 1.1.1.0/24 to any port = 22 Wenn du die Konfigurationsdatei so modifizierst, um Pakete zu loggen, vergiß nicht, mit "ipf -Fa -f /etc/ipf.rules" die Änderungen auch zu aktivieren! ipmon wird die ip-Logeinträge in /var/log/ipflog schreiben. Für weitere Informationen über ipf siehe das IPF how-to als exzellente Informationsquelle sowie die IP Filter Homepage.
Initiale Arbeit von Wayne Fergerstrom <wayne@methadonia.net>
Dieses Kapitel versucht jenen zu helfen, die Network Address Translation ("NAT") auf ihrem OpenBSD Rechner installieren und konfigurieren wollen. Der Benutzer sollte bereits den OpenBSD Rechner mit zwei Netzwerkkarten installiert und konfiguriert haben (eine mit dem Internet verbunden, die andere mit dem lokalen Netzwerk). IP NAT wird auch auf Rechnern mit nur einer Netzwerkkarte laufen, aber da die IP Pakete auf ein und demselben Interface ein- und ausgehen, werden Ethernetkollisionen die Leistung drastisch vermindern.
Gemä RFC 1631 bietet ipnat einen einfachen Weg, um interne Netzwerke auf eine einzige routebare ("reale") Internetadresse umzulegen. Dies ist sehr nützlich, wenn man nicht für jeden Rechner des internen Netzwerkes eine offizielle Adresse zugewiesen bekommen hat. Wenn man ein privates/internes Netzwerk besitzt, dann kann man die (in RFC 1918 definierten) Adressbereiche benutzen:
10.0.0.0/8 (10.0.0.0 - 10.255.255.255)
172.16.0.0/12 (172.16.0.0 - 172.31.255.255)
192.168.0.0/16 (192.168.0.0 - 192.168.255.255)
Die in diesem Dokument verwendeten Konventionen sind sehr einfach. Für Documentationszwecke werde ich einige der Terme und Formate erklären.
Dies beschreibt die Funktion von "Network Address Translation" (Netzwerkadressübersetzung). Der Prozess des NAT wird später in diesem Dokument beschrieben.
Abkürzung für "IP Network Address Translation", kann mit NAT austauschbar verwendet werden. In diesem Dokument wird der Terminus "ipnat" aber nur für die Kommandozeile verwendet werden.
Abkürzung für "IP Filter." IP Filter ist eine portable Paketfilterungssoftware, welche Teil von OpenBSD ist. IP Filter muß zuerst aktiviert werden, bevor man ipnat benutzen kann. Ganz einfach: Editiere /etc/rc.conf und ändere ipf=NO in ipf=YES. Dies ändert es aber erst für das nächste Rebooten. Mit 'ipf -E' schaltest du es im laufenden Betrieb ein. Genaueres natürlich später.
So sind die Computer eingerichtet, die in diesem Dokument beschrieben werden. Deine werden von diesen abweichen, aber der Zweck dieses Dokumentes ist, dir eine Übersicht zu verschaffen, damit du diese Information für deine Bedürfnisse verwenden kannst.
+-----+ +---------+ +----------+
| Hub |--------- dc1 | NAT | dc0 ----| Internet |
+-----+ +---------+ +----------+
| |
| +-- Rechner A
+---- Weitere Rechner
+-------------------------+
| LEGENDE |
+-------------------------+
| NIC dc0 - 24.5.0.5 |
| NIC dc1 - 192.168.1.1 |
|Rechner A - 192.168.1.40 |
+-------------------------+
Da immer mehr und mehr Firmen und Private das Internet benutzen, muß jeder eine IP Adresse haben. Öffentliche IP Adressen sind immer schwieriger zu bekommen. Die Lösung für viele Leute ist Network Address Translation (oder "NAT"). NAT ist ein sehr einfaches, aber sehr wirkungsvoller Weg, um dein LAN mit dem Internet zu verbinden, ohne IP Adressen kaufen oder mieten zu müssen. NAT ist unter Linuxbenutzern auch als "IP Masquerading" bekannt.
Wenn NAT richtig eingerichtet ist, erlaubt es den Benutzern des internen LANs, das Internet mit einer anderen IP Adresse (jene von deinen Provider) zu benutzen. Jeder Rechner im LAN benutzt diese eine IP Adresse (transparent) vom Rechner mit der vom ISP zugewiesenen IP Adresse.
NAT arbeitet auf erblüffend einfache Weise. Wenn ein Rechner im LAN sich mit einem Rechner im Internet verbinden will, sendet er ein TCP Paket mit einer Verbindungsanfrage. Innerhalb des TCP Paketdatenkopfes ("headers") steht die Rechner IP Adresse (hier 192.168.1.40) und die erwünschte Server IP Adresse (z. B. 123.45.67.89). Die Maschine mit NAT fängt das TCP Paket ab und ändert die Rechner IP Adresse in die Adresse des Rechners, der mit dem Internet verbunden ist (z. B. 24.5.0.5). Dies täuscht den Server eigentlich, indem es ihn glauben macht, daß die Verbindung vom NAT Rechner und nicht vom eigentlichen Rechner A kommt. Der Server schickt dann die Antworten zurück zum NAT Rechner. Wenn der NAT Rechner die Antwort erhält, dann übersetzt er die Zieladresse zurück von seiner eigenen IP zu der von Rechner A und schick das Paket an Rechner A weiter. Rechner A bekommt von alledem nichts mit und die vorgetäuschte Internetverbindung ist total transparent.
Das folgende Beispiel zeigt NAT noch ein bißchen deutlicher:
Rechner ---------------- dc1 [ NAT ] dc0 ---------- Internetserver 192.168.1.40 --- 192.168.1.1 [ NAT ] 24.5.0.5 ----- 123.45.67.89 AUSGEHENDES TCP Paket AUSGEHENDES TCP Paket Von: 192.168.1.40 >>=== NAT ===>> Von: 24.5.0.5 Nach: 123.45.67.89 Nach: 123.45.67.89 INCOMING TCP Paket EINGEHENDES TCP Paket Von: 123.45.67.89 Von: 123.45.67.89 Nach: 192.168.1.40 <<=== NAT ===<< Nach: 24.5.0.5
In meiner neuen Wohnung bekam ich ein Kabelmodem und somit ein kleines Problem. Wie können meine Zimmerkameraden Internetanschluß bekommen, wenn das Kabelmodem in meinem Zimmer steht? Ich hatte ein paar Alternativen wie zusätzliche IP Adressen kaufen, einen Proxyserver aufsetzen oder eben NAT einsetzen. (Laß dich nicht vom Kabelmodembeispiel täuschen: NAT ist fähig, ein großes Netzwerk mit hunderten oder auch tausenden Computern zu maskieren!)
Es gibt viele Gründe, warum ich NAT aufsetzen wollte. Nummer eins: Geld sparen. Zwei Zimmerkameraden in meinem Haus haben ihre eigenen PCs und ich besitze insgesamt 3 Computer. Mein ISP erlaubt nur drei IP Adressen pro Haushalt. D. h., daß wir nicht genug IPs hätten, um jedem Rechner Internetzugang zu verschaffen.
Mit NAT hat jeder Rechner eine eindeutige (interne) IP Adresse, aber alle teilen sich eine IP Adresse von meinem ISP. Die Kosten sinken.
Damit NAT auf deinem OpenBSD Rechner läuft, mußt du zunächst IPF und NAT aktivieren. Dies geschieht einfach, indem du die unten angeführten Dateien editierst (ändere die Dateien gemäß den folgenden Optionen):
/etc/rc.conf (diese Datei wird beim Booten fürs Starten von Diensten gelesen)
/etc/sysctl.conf
Nachdem diese Änderungen durchgeführt wurden, ist der Rechner endlich für die Konfiguration von NAT bereit.
Der erste Schritt ist die Konfiguration der IPF Regelsatzdatei (/etc/ipf.rules). Dafür werden wir in diesem Dokument jeden Datenverkehr durch diese Firewall passieren lassen. Die Datei sollte so aussehen:
pass in from any to any pass out from any to any
Siehe wiederum FAQ 6.2 für weitere Informationen.
Die NAT Konfigurationsdatei (/etc/ipnat.rules) folgt einer sehr einfachen Syntax. Um obige Konfiguration fortzusetzen, sollte die Datei die folgenden Einträge enthalten:
map dc0 192.168.1.0/24 -> 24.5.0.5/32 portmap tcp/udp 10000:60000 map dc0 192.168.1.0/24 -> 24.5.0.5/32
Hier eine Erklärung für die obigen Zeilen.
Der Befehl an ipnat. Er besagt, daß dieser Eintrag die IP Adressen zwischen LAN und the Internet ändert.
Die Netzwerkkarte, die mit dem Internet verbunden ist.
Die IP Adresse und Netzmaske (die Netzmaske ist im CIDR Format). Kombiniert besagen sie, daß "jede IP Adresse von 192.168.1.1 bis 192.168.1.254" umgelegt werden soll. Wenn du die CIDR nicht verwenden willst, dann kannst du "/24" für "/255.255.255.0" verwenden.
Diese IP Adresse und Netzmaske sind die IP Adresse, auf die die LAN IP Adressen umgelegt werden. /32 bedeutet eine einzige IP Adresse. Du kannst also auf /24, oder 256 IP Adressen (oder auf /27, oder wieviele Bits du auch immer wünscht) umlegen!! Dies ist nützlich, wenn du mehrere tausend Rechner hinter deinem NAT hast.... (Natürlich ist dies nur nützlich, wenn diese /24 über deinen OpenBSD Rechner gerouted werden!)
Dies legt alle tcp/udp Pakete auf Ports von 10000 auf 60000.
Die zweite Zeile hat beinahe den selben Eintrag außer für den letzten Teil. Dies bedeutet für ipnat, auch alle anderen (nicht tcp/udp Pakete, die bereits von der ersten Zeile erfaßt worden sind) zu jenen Ports umzulegen, die erfragt werden (z. B. ICMP und andere Protokolle). Wenn dies einmal in dieser Datei ist, dann hat man alles, um den IPF Dienst zu betreiben.
NAT zu betreiben ist auch ein sehr einfacher Vorgang. Ist die Konfiguration erst einmal komplett, dann gibt es zwei Möglichkeiten, um NAT zu aktivieren. Die erste (und beste, um die Rebootphase zu testen), ist, deinen OpenBSD Rechner zu rebooten. Dies geschieht mit dem Befehl "reboot"
Wenn du ipnat von der Kommandozeile starten willst, dann benutze die folgenden Befehle:
# ipf -Fa -f /etc/ipf.rules -E # ipnat -CF -f /etc/ipnat.rules
Die erste Zeile aktiviert IPF (NB: NAT setzt auf IPF auf, daher muß IPF initialisiert und gestartet werden, bevor NAT geladen werden kann). Die Optionen der Kommandozeile "-Fa" klären alle noch existierende Einträge. "-f /etc/ipf.rules" sagt IPF, wo die Regeldatei gefunden werden kann. "-E" ist die Option, um den IPF Dienst zu aktivieren.
Die zweite Kommandozeile aktiviert NAT. "-CF" klärt alle existierenden Enträge in der NAT Tabelle. "-f /etc/ipnat.rules" sagt NAT, wo die NAT Regeldatei zu finden ist. NAT läft nun. So einfach ist das.
NB: Um die NAT Einstellungen neu zu laden (im Falle, daß du die Datei editiert hast, aber nicht rebooten willst), mußt du nur den zweiten Befehl wiederholen. Die Einstellungen werden neu geladen.
Um herauszufinden, was NAT tut oder um sicherzustellen, daß die gewünschten Einstellungen auch in Kraft sind, kannst du die "-l" Option verwenden. Diese Option listet alle Einstellungen und laufende Sitzungen:
# ipnat -l map dc0 192.168.1.0/24 -> 24.5.0.5/32 portmap tcp/udp 10000:60000 map dc0 192.168.1.0/24 -> 24.5.0.5/32 List of active sessions: MAP 192.168.1.40 2473 <- -> 24.5.0.5 13463 [129.128.5.191 80]
Der Zweck der ersten beiden Zeilen ist, die Einstellungen von /etc/ipnat.rules zu bestätigen. Die Zeile(n) darunter zeigen die aktiven NAT Verbindungen.
Dies zeigt dir die IP Adresse des LAN Rechners, der NAT benutzt. Die Portnummer der Verbindung wird anschließend gezeigt.
Dies zeigt, daß NAT den Datenverkehrfluß in beiden Richtungen behandelt.
Dies stellt dar, daß uuml;ber die Verbindung zum Internet über die IP Adresse 24.5.0.5 und Port 13463 abgewickelt wird.
Zuletzt werden IP Adresse und Port der Zieladresse angezeigt.
Es gibt a paar Einschränkungen von NAT. Eine ist bei FTP. Wenn ein Benutzer sich zu einem entfernten FTP Server verbindet und Informationen oder Dateien verlangt, wird der FTP Server eine Verbindung zum Klient aufbauen und die Daten auf einem willkürlichen freien Port übertragen. Dies ist ein Problem für Benutzer innerhalb des LAN. Denn der FTP Server sendet seine Informationen an die externe Netzwerkkarte auf einem willkürlichen Port. Der NAT Rechner wird dies zwar empfangen, aber weil es keine Umlegungsregeln für dieses unbekannte Paket oder für diesen Kanal gibt, wird er das Paket verwerfen und nicht liefern.
Die Lösung dafür ist, das FTP Programm in "passive mode" zu setzen. Dies teilt dem Server mit, daß dich du selbst aktiv zum Server verbinden willst. Wenn du nun eine Verbindung nach draussen machst, wird NAT deine Verbindung richtig behandeln.
IP Filter bietet eine andere Lösung für dieses Problem an: ein FTP Proxy, der im NAT Quelltext eingebaut ist. Um ihn zu aktivieren, füge etwas wie folgendes VOR deinen anderen NAT Regeln ein.
map dc0 192.168.1.0/24 -> 24.5.0.5/32 proxy port ftp ftp/tcpMit dieser Regel wird der Kernel deine FTP Verbindungen auf den "PORT" Befehl vom FTP Programm überwachen und wird die IP Adresse und Port mit seiner eigenen externen IP Adresse austauschen und einen Port seiner Wahl bestimmen. Dann wird er einen Kanal öffen und die Daten zum Port, nach dem dein FTP Programm gefragt hat, tunneln. Dies ist offensichtlich etwas ressourcenintensiver. Aber es sollte gehen, solange dein NAT/IP Filter Rechner nicht übermäßig beansprucht wird.
Zuweilen willst du ankommenden oder ausgehenden Datenverkehr eines bestimmten Protokolles oder Kanals umleiten. Ein gutes Beispiel dafür ist ein Webserver, der im internen LAN hängt. Ankommende Verbindungen zu deiner gültigen, offziellen IP Adresse werden keine Verbindung aufbauen können, wenn auf deinem NAT Rechner kein Webserver rennt. Dafür gibt es bei NAT die 'rdr' Direktive in der Regelsatzdatei, die festlegt, ob und wohin eine bestimmte Verbindung umgeleitet werden soll.
Für unser Beispiel nehmen wir an, daß ein Webserver im LAN mit der IP Adresse 192.168.1.80 existiert. Die NAT Regeldatei benötigt eine neue Direktive. F¨ge eine Zeile wie folgende in ipnat.conf ein:
rdr dc0 24.5.0.5/32 port 80 -> 192.168.1.80 port 80
Die Erklärung:
Diesen Befehl gibst du ipnat: Ipnat soll eine Verbindung umleiten.
Die mit dem Internet verbundene Netzwerkkarte.
Dies bezieht sich auf die ankommenden Verbindungen zu dieser IP Adresse (nur auf dc0, wie oben)
Der Port (80), der umgeleitet werden soll. Die Zahl "80" muß nicht explizit benutzt werden. Du kannst auch "port www" verwenden. Wenn du den Namen anstelle der Nummer verwendest, dann müssen auch Name und die korrespondierende Zahl in der Datei /etc/services existieren.
Die IP Adresse und Netzmaske des LAN Rechners, zu dem die Pakete umgeleitet werden. Die Netzmaske ist immer "/32" (und müussen daher nicht spezifiert werden).
Danach lade die NAT Regeln neu und die Umleitungen werden sofort in Kraft treten.
Der Unterschied zwischen NAT und einem applikationsbasierten Proxy liegt darin, daß die Proxysoftware als Mittelsmann zwischen Internet und den im LAN verbundenen Rechnern agiert. Nur muß für jede Anwendung und Internetverbindung ein dafür geeigneter Proxy bereitstehen. Nicht alle Anwendungen können dies (vor allem Spiele nicht). NAT "mapped" dein internes Netzwerk transparent, sodass es mit dem Internet verbunden ist. Der einzige Sicherheitsvorteil von Proxysoftware gegenüber NAT ist, daß die Proxysoftware sicherheitstechnisch im Vorteil ist, wenn wenn den Inhalt filtern kann; z. B. Makroviren für Windowsrechner filtert, oder gegen Buffer-overflows schützt, udgl. Diese Filter zu administrieren bedeutet viel Arbeit.
6.3.4 Links und QuerverweiseOpenBSD Dateien:
NAT Internet Links:
Um den DHCP Klient dhclient(8) zu benutzen, der Teil von OpenBSD ist, editiere /etc/hostname.xl0 (wenn deine Hauptethernetkarte xl0 ist. Deine kann ep0 oder fxp0 oder irgendeine andere sein!). Alles, was du in diese Datei zu schreiben hast, ist 'dhcp'.
# echo dhcp >/etc/hostname.xl0Dies wird OpenBSD veranlassen, den DHCP Klient automatisch beim Booten zu starten. OpenBSD wird sich seine IP Adresse, sein Standardgateway und seine DNS Server vom DHCP Server besorgen.
Wenn du den DHCP Klient von der Befehlszeile starten willst, stelle sicher, daß /etc/dhclient.conf existiert, dann versuche:
# dhclient fxp0Wobei fxp0 die Netzwerkkarte ist, auf der du DHCP empfangen willst.
Wie du auch immer dhclient startest, du kannst die /etc/dhclient.conf Datei immer so editieren, daß dein DNS nicht erneuert wird aufgrund der neuen DNS Informationen, indem du die 'require' Zeilen auskommentierst (Es gibt Beispiele in den Standardeinstellungen, aber du mußt die Standardeinstellungen von dhclient überschreiben.).
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name, lpr-servers, ntp-servers;
und dann entferne domain-name-servers. Natürlich kannst du auch
hostname oder andere Einstellungen entfernen.
# echo xl1 xl2 xl3 >/etc/dhcpd.interfacesDann editiere /etc/dhcpd.conf. Die Optionen sind selbsterklärend.
option domain-name "xyz.mil";
option domain-name-servers 192.168.1.3, 192.168.1.5;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
range 192.168.1.32 192.168.1.127;
}
Dies teilt deinen DHCP Klienten mit, daß die an DNS Anfragen anzuhängende Domäne xyz.mil ist (d. h., wenn der Benutzer schreibt 'telnet joe', dann wird an joe.xyz.mil gesendet). Es wird auf die DNS Server 192.168.1.3 und 192.168.1.5 verwiesen. Für Hosts, die sich im selben Netzwerk wie die Netzwerkkarte des OpenBSD Rechners befinden, welche im 192.168.1.0/24 Adressbereich liegt, wird der DHCP Server ihnen eine IP Adresse zwischen 192.168.1.32 und 192.168.1.127 und als Standardgateway 192.168.1.1 zuweisen.
Wenn du dhcpd von der Befehlszeile starten willst, nachdem du /etc/dhcpd.conf editiert hast, versuche:
# dhcpd -q fxp0Wobei fxp0 die Netzwerkkarte ist, auf der DHCP serviert werden soll. Die -q Option setzt die Ausgabe von dhcpd auf ruhig, ansonsten ist sie sehr ausführlich.
Wenn du DHCP Dienste für einen Windows Rechner bereitstellst, dann willst du vielleicht auch eine 'WINS' Serveradresse liefern. Dafür füge einfach die folgenden Zeilen zu deiner /etc/dhcpd.conf:
option netbios-name-servers 192.168.92.55;(wobei 192.168.92.55 die IP deines Windows oder Samba Servers ist.) Siehe auch dhcp-options(5) für weitere Optionen, die deine DHCP Klienten wünschen.
Den ersten, den wir behandeln, wird der Userland PPP Dämon sein. Um zu beginnen, benötigen wir einige einfache Informationen über deinen ISP. Hier eine Liste hilfreicher Informationen, die du brauchen wirst.
Einige von diesen benötigst du nicht unbedingt, aber sie w&aum;ren hilfreich. Der Userland PPP Dämon benutzt die Datei /etc/ppp/ppp.conf als seine Konfigurationsdatei. Es gibt viele hilfreiche Dateien in /etc/ppp, die verschiedene Einstellungen für verschiedene Situationen zeigen. Du solltest dir dieses Verzeichnis ansehen und es durchforsten.
Solltest du keinen GENERIC Kernel verwenden, dann stelle sicher, daß du folgende Zeile in deiner Kernelkonfigurationsdatei hast:
pseudo-device tun 2
Die ersten Einstellungen für den Userland PPP Dämon bestehen im Erstellen deiner /etc/ppp/ppp.conf Datei. Diese Datei existiert nicht standardmäßig, aber du kannst einfach /etc/ppp/ppp.conf.sample editieren, um deine eigene ppp.conf Datei zu kreieren. Hier werde ich mit dem einfachsten und gebrächlichsten Einstellungen beginnen. Hier eine schnelle ppp.conf Datei, die uns einfach zu deinem ISP verbindet und die Standardrouten und Nameserver setzt. Für diese Datei brauchst du nur die Telefonnummer deines ISP sowie deinen Benutzernamen und dein Passwort.
default: set log Phase Chat LCP IPCP CCP tun command set device /dev/cua01 set speed 115200 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT OK-AT-OK ATE1Q0 OK\\dATDT\\T TIMEOUT 40 CONNECT"
ANMERKUNG - Mit OpenBSD 2.6 wurde das System mit einer /etc/ppp/ppp.conf.example ausgeliefert, die nicht korrekte Einstellungen für die Schnittstelle hatte, dessen Name war "set device /dev/cuaa0". Es sollte aber /dev/cua00 sein, was der seriellen Schnittstelle 1 (COM1) entspricht. Deine Schnittstelle muß nicht COM1 sein, aber die Bezeichnung in OpenBSD 2.6 war falsch.
Der Absatz unter der default: Bezeichnung wird jedes Mal ausgeführt. Hier stehen alle wichtigen Informationen. Mit "set log" stellen wir die Loglevel ein. Um dies zu ändern, siehe ppp(8) für weitere Info. Unsere Schnittstelle wird mit "set device" eingestellt. Dies ist die Schnittstelle, mit dem das Modem verbunden ist. In diesem Beispiel hängt das Modem auf COM Port 2. Daher wird COM Port 1 auf /dev/cua00 gesetzt. Mit "set speed" setzen wird die Geschwindigkeit unserer Dialup Verbindung und mit "set dial" setzen wir unsere Dialup Parameter, mit denen wir die timeout Zeit, usw. setzen können. Diese Zeile sollte eigentlich ziemlich genau so, wie sie jetzt ist, bleiben.
Nun können wir die ISP spezifischen Informationen eintragen. Wir tun dies, indem wir unter default: einen weiteren Absatz hinzufügen. Dieser kann als alles benannt werden, am einfachsten nimmst du den Namen deines ISP. Hier werde ich myisp: als Verweis auf unseren ISP nehmen. Hier ist ein einfaches Beispiel, das alles beinhält, um uns zu verbinden.
myisp: set phone 1234567 set login "ABORT NO\\sCARRIER TIMEOUT 5 ogin:--ogin: ppp word: ppp" set timeout 120 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR enable dns
Hier stehen alle wichtigen Informationen für unseren spezifischen ISP. Die erste Option "set phone" setzt die Telefonnummer deines ISP. "set login" setzt unsere login-Optionen. Hier haben wir die timeout auf 5 gesetzt, was bedeutet, daß wir unseren login-Versuch nach 5 Sekunden abbrechen, wenn wir kein Trägersignal bekommen. Ansonsten wird er auf "login:" warten und dann deinen Benutzernamen und Passwort senden. In diesem Beispiel ist unser username = ppp und das Password = ppp. Diese Werte müssen geändert werden. Die Zeile "set timeout" setzt den Idle timeout für die gesamte Verbindungsdauer auf 120 Sekunden. Die "set ifaddr" Zeile ist ein bißchen schwieriger. Hier ist eine genauere Erklärung.
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
Die obigen Zeile folgt dem Format von "set ifaddr [meineAdr[/nn] [seineAdr[/nn] [netzmaske [startAdr]]]]". Daher ist die erste spezifizierte IP diejenige, die wir als unsere IP wollen. Wenn du eine statische IP Adresse hast, dann kannst du sie hier einsetzen. In unserem Beispiel benutzen wir /0, was besagt, daß kein Bits von dieser IP Adresse übereinstimmen muß und der gesamte Ausdruck ersetzt werden kann. Die zweite IP behandelt die von uns erwartete IP unserer Gegenstelle. Wenn du sie weißt, dann kannst du sie hier angeben. Wiederum wissen wir nicht in unserer Zeile, welche IP dies wird, also lassen wir sie um wieder mitteilen. Die dritte Option ist unsere Netzmaske, hier auf 255.255.255.0 gesetzt. Wenn startAdr spezifiziert ist, dann wird diese anstelle von meineAdr während der initialen IPCP Verhandlung; aber es wird nur eine Adresse aus dem meineAdr-Adressbereich akzeptiert.
Die nächste Option "add default HISADDR" setzt unsere Standardroute zu deren IP. Dies ist 'klebrig', d. h falls deren IP sich ändern sollte, dann wird unsere Route auch automatisch upgedatet. Mit "enable dns" teilen wir unserem ISP mit, unsere Nameserveradresse zu authentifizieren. Tu dies NICHT, wenn du deinen eigenen lokalen DNS laufen hast, da PPP dies umgehen wird, indem es einige Zeilen in /etc/resolv.conf schreibt.
Nun, da wir unsere ppp.conf Datei fertig eingerichtet haben, können wir beginnen, eine Verbindung zu unserem ISP aufzubauen. Hier einige Details über häufig verwendete Parameter.
Mit dem Aufruf von /usr/sbin/ppp ohne Optionen kommst du in den interaktiven Modus. Hier kannst du direkt mit dem Modem interagieren, was sich hervorragend eignet, um Probleme in deiner ppp.conf Datei zu debuggen.
In einigen Situationen möchstest du Befehle ausführen, wenn die Verbindung gerade erichtet oder beendet wurde. Für diese Fälle gibts es zwei Dateien, die du kreieren kannst: /etc/ppp/ppp.linkup und /etc/ppp/ppp.linkdown. Beispielskonfigurationen kannst du hier finden:
Weitere Informationen findest du unter http://www.freebsd.org/handbook/userppp.html oder http://www.freebsd.org/faq/userppp.html.
Um dies zu tunen, verwende sysctl und erhöhe die Werte von:
net.inet.tcp.keepinittime net.inet.tcp.keepidle net.inet.tcp.keepintvlMittels sysctl -a kannst du die derzeitigen Werte dieser (und vieler anderer) Parameter sehen. Um einen Wert zu verändern, verwende sysctl -w, wie z. B. sysctl -w net.inet.tcp.keepidle=28800.
Aber manchmal kann dies (in geschlossenen Netzwerken) ützlich sein, vor allem wenn man ätere Implementierungen des NetBIOS Protokolles verwendet. Wiederum mit sysctl. sysctl -w net.inet.ip.directed-broadcast=1 aktiviert dies. Beachte aber Smurfangriffe, wenn du wissen willst, warum dies standardmäßig nicht aktiviert ist.
Set the list of reserved TCP ports that should not be allocated by the kernel dynamically. This can be used to keep daemons from stealing a specific port that another program needs to function. List elements may be separated by commas and/or whitespace. sysctl -w net.inet.tcp.baddynamic=749,750,751,760,761,871 It is also possible to add or remove ports from the current list. sysctl -w net.inet.tcp.baddynamic=+748 sysctl -w net.inet.tcp.baddynamic=-871
NFS, oder Network File System (Netzwerkdateisystem), wird verwendet, um ein Dateisystem über das Netzwerk zu verwenden. Du solltest vorher noch folgende Manualseiten lesen, bevor du versuchst, einen eigenen NFS Server aufzusetzen:
Dieses Kapitel zeigt die Schritte, um ein einfaches NFS System aufzusetzen: Ein Server im LAN und Klienten im LAN, die NFS verwenden. Es behandelt nicht, wie man NFS sicher macht. Wir nehmen an, daß du bereits Paketfilterung oder irgendeinen anderen Firewallschutz eingerichtet hast, damit von außerhalb nicht auf NFS zugegriffen werden kann. Wenn du Zugriff via NFS von außerhalb erlauben willst und sensible Daten dort gespeichert hast, dann empfehlen wir dir wärmstens den Gebrauch von IPSec. Ansonsten können andere Leute möglicherweise deinen NFS Datenverkehr sehen. Jemand könnte auch vortäuschen, die IP Adresse zu sein, der du Zugriff auf den NFS Server läßt. Es gibt mehrere Angriffe, die möglich sind. Wenn IPSec richtig konfiguriert ist, dann schützt es gegen die Art von Angriffen.
Noch eine wichtige Anmerkung wegen Sicherheit. Füge niemals ein Dateisystem zu /etc/exports ohne eine Liste mit Rechnern, die explizit Zugriff haben sollen. Ohne einer solchen Liste, die ein bestimmtes Verzeichnis mounten können, kann jeder, der den Rechner erreichen kann, deine NFS exports mounten.
Der Server hat die IP 10.0.0.1. Dieser Server soll nur NFS f¨r Rechner innerhalb dieses Netzwerkes bereitstellen. Der erste Schritt ist deine /etc/exports Datei zu erstellen. Diese Datei listet die Dateisysteme auf, die du über NFS freigeben willst, und definiert, wer auf sie zugreifen darf. Es gibt viele Optionen, die du in deiner /etc/exports Datei haben kannst, und am besten ist, du liest exports(5). Für dieses Beispiel sieht /etc/exports so aus:
# # NFS exports Database # See exports(5) for more information. Be very careful, misconfiguration # of this file can result in your filesystems being readable by the world. /work -alldirs -ro -network 10.0.0 -mask 255.255.255.0
Dh., daß das lokale Dateisystem /work via NFS zugänglich gemacht wird. -alldirs bedeutet, daß Klienten jedes Verzeichnis unter dem /work Mount-point mounten können. -ro bedeutet, daß nur Leseberechtigung gestattet wird. Die letzten zwei Argumente bedeuten, daß nur Klienten innerhalb des 10.0.0.0 Netzwerkes mit einer Netzmaske von 255.255.255.0 dieses Dateisystem mounten dürfen. Dies ist wichtig für einige Server, die von verschiedenen Netzwerken zugänglich sind.
Ist einmal deine /etc/exports Datei eingerichtet, kannst du weitergehen und deinen NFS Server aufsetzen. Du solltest zuerst sicherstellen, daß deine Kernelkonfiguration die Optionen NFSSERVER & NFSCLIENT enthält. (Der GENERIC Kernel hat diese Optionen inkludiert.) Dann solltest du nfs_server=YES in /etc/rc.conf eintragen. Dies wird sowohl nfsd(8) und mountd(8) starten, wenn du rebootest. Nun kannst du fortschreiten und die Dienste selber starten. Diese Dienste müssen als root gestartet werden und du mußt sicherstellen, daß portmap(8) auf deinem System läuft. Hier ein Beispiel von nfsd(8), der sowohl mit TCP als auch mit UDP bedient mittels 4 Diensten. Du solltest eine angemessenene Anzahl von NFS Serverdiensten einsetzen, um die maximale Anzahl von gleichzeitigen Klientenanfragen, die du bedienen willst, zu bewerkstelligen.
# /sbin/nfsd -tun 4
Du mußt nicht nur den nfsd(8) Server starten, sondern auch mountd(8). Dies ist der Dienst, der eigentlich die Mountanfragen auf NFS bedient. Um mountd(8) zu starten, gib einfach folgendes ein:
# /sbin/mountd
Wenn du Änderungen an /etc/exports durchführst, während NFS bereits läuft, mußt du mountd dies mitteilen, indem du den Dienst neu startest!
# kill -HUP `cat /var/run/mountd.pid`
Um zu überprüfen, ob alle Dienste laufen und bei RPC registriert sind, verwende rpcinfo(8).
$ rpcinfo -p 10.0.0.1
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 633 mountd
100005 3 udp 633 mountd
100005 1 tcp 916 mountd
100005 3 tcp 916 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
Für den Normalgebrauch gibt es ein paar Hilfsprogramme, mit denen du den Status von NFS überprüfen kannst. Eines ist showmount(8), das dir anzeigt, was und wer gerade mountet. Dann gibt es auch noch nfsstat(8), das genauere Statistiken anzeigt. Für showmount(8), versuche /usr/bin/showmount -a host. Z. B.:
$ /usr/bin/showmount -a 10.0.0.1 All mount points on 10.0.0.1: 10.0.0.37:/work
NFS Dateisysteme sollten mittels mount(8) geladen werden, oder genauer mount_nfs(8). Um ein Dateisystem /work von Host 10.0.0.1 auf dem lokalen Dateisystem /mnt zu laden, tue folgendes (NB: du mußt nicht IP Adressen verwenden, mount wird Hostnamen auflösen):
# mount -t nfs 10.0.0.1:/work /mnt
Damit dein System dies beim Hochfahren wieder tut, füge folgendes zu deiner /etc/fstab:
10.0.0.1:/work /mnt nfs rw 0 0
Es ist wichtig, daß du 0 0 am Ende dieser Zeile verwendest, damit dein Rechner nicht versucht, das NFS Dateisystem beim Hochfahren mit fsck zu überprüfen!!!! Die anderen Sicherheitsoptionen wie noexec, nodev und nosuid, sollten auch immer - wenn anwendbar - verwendet werden. Z. B.:
10.0.0.1:/work /mnt nfs rw,nodev,nosuid 0 0
Mit diesen Optionen können keine Geräte oder setuid Programme auf dem NFS Server Sicherheitsmaßnahmen auf dem NFS Klient untergraben. Wenn du keine Programme auf diesem NFS Dateisystem auf dem NFS Klient ausführen willst, füge noexec hinzu:
Domain Name Service bietet die Möglichkeit, Name-zu-IP Adresse Auflösung und IP Adresse-zu-Namen Auflösung auf eine Anfrage zu generieren. Deine OpenBSD Installation ist standardmäßig als DNS Klient, aber nicht als DNS Server konfiguriert. D.h., deine OpenBSD Installation kann eine DNS Anfrage an einen Domain Name Server für die Adresse einer Maschine stellen, aber sie kann nicht selbst solche DNS Anfrage beantworten, bis du dies nicht selbst so konfigurierst.
Meine OpenBSD Maschine ist derzeit mit dem Internet durch meinen ISP verbunden, so daß ich mit nslookup(8) DNS Anfragen ausführen kann:
$ nslookup www.openbsd.org Server: ns4.us.prserv.net Address: 165.87.201.244 Non-authoritative answer: Name: www.openbsd.org Address: 129.128.5.191
165.87.201.244 ist der Nameserver, der geantwortet hat, weil es der Nameserver ist, den mein ISP mir zu meinem Konto zugeteilt hat und in /etc/resolv.conf eingetragen ist. Aber die Antwort war nicht authoritativ. Für eine authoritative Antwort müssen wir den DNS Server für die openbsd.org Domäne finden und ihn nach der Adresse von www.openbsd.org fragen:
# Identifiziere die Nameserver für openbsd.org # mit der Hilfe des Nameservers meines ISP. $ nslookup -type=NS openbsd.org Server: ns4.us.prserv.net Address: 165.87.201.244 Non-authoritative answer: openbsd.org nameserver = cvs.openbsd.org openbsd.org nameserver = gandalf.sigmasoft.com openbsd.org nameserver = cs.colorado.edu openbsd.org nameserver = ns.appli.se openbsd.org nameserver = zeus.theos.com Authoritative answers can be found from: cvs.openbsd.org internet Adresse = 199.185.137.3 gandalf.sigmasoft.com internet Adresse = 198.144.202.98 cs.colorado.edu internet address = 128.138.243.151 ns.appli.se internet address = 194.198.196.230 zeus.theos.com internet address = 199.185.137.1 # Verwende die gefundenen Informationen, um eine Anfrage # für eine authoritative Auflösung zu stellen: # befrage zeus.theos.com. $ nslookup www.openbsd.org zeus.theos.com Server: zeus.theos.com Adresse: 199.185.137.1 Name: www.openbsd.org Address: 129.128.5.191
Auf zeus.theos.com läft OpenBSD und ist korrekt als DNS server für die openbsd.org Domäne konfiguriert.
Der dig(1) Befehl ist besonders nützlich, weil er eine Domäne befragen kann und Informationen zurückliefert, die einem Format unterliegen, das BIND Konfigurationsdateien sehr ähnlich ist. Du kannst mit dig(1) Nameserver untersuchen, von denen du weißt, daß sie richtig funktionieren, und sie mit deinen Einstellungen vergleichen.
Wenn du dir nicht sicher bist, ob dein Rechner die Rolle eines DNS Server spielen soll, dann konfiguriere ihn nicht als solchen. Die OpenBSD Installation konfiguriert nicht standardmäßig deine Maschine als einen Domain Name Server, obwohl alle notwendigen Dateien dafür installiert werden. Für die meisten Arbeitsplatzrechner genügt die /etc/hosts Datei, um IP Adressen lokaler Rechner zu benennen und die /etc/resolv.conf Datei, um die DNS Server im Intranet oder Internet einzustellen.
Aber wenn du vielleicht doch deinen Rechner als Domain Name Server konfigurieren mußt:
Eine weitere Überlegung ist die Ausführungsgeschwindigkeit. Da die Namensauflösung ein iterativer Prozess ist, in dem der Nameserver wiederholende Anfragen an andere Nameserver in entfernten Domänen stellt, kann die Namensauflösung länger dauern, wenn du eine Modemverbindung ins Internet hast und deinen DNS Server nach anderen, entfernten IP Adressen auf der Modemleitung befragst (die ihrerseits wieder andere entfernte DNS Server befragen), als wenn du den Nameserver deines ISP befragst (der wahrscheinlich eine schnellere Verbindung zu entfernten Nameservern hat).
BIND ist der Name einer Spezifikation eines Domänennamensservers mit einem bestimmten Verhalten. Die DNS Komponenten ergeben gemeinsam die Implementation von BIND.
Es gibt zwei getrennte BIND Specifikationen:
Standardmässig unterstützt OpenBSDs named BIND 4.x.
Wenn du diese alternativen Implementationen von DNS Diensten in betracht ziehst, dann stellst du einen kritischen Netzwerkdienst zur Verfügung, dessen Software nicht dem selben Niveau an Überprüfung wie durch Sicherheit dem named name daemon in der Basisinstallation zu Teil wurde. Dies ist eine signifikante Überlegung, da, falls ein DNS Server kompromittiert wird, die Klients zu betrügerischen Webseiten umgeleitet werden können.
Wenn die standmässige Netzwerkinstallation korrekt bei der Installation von OpenBSD eingerichtet hast, dann ist bereits alles installiert. Du mußt nur mehr den Nameserverdienst ("named") konfigurieren.
Du konfigurierst OpenBSD DNS, indem du Dateien editierst und/oder erstellst, die den Nameserverdienst named steuern. Diese Dateien liegen standardmäßig im Verzeichnis /var/named und dessen Unterverzeichnisse, hauptsächlich in der Datei /var/named/named.boot, das die Initialisierungsdatei für named ist. Weiters gibt es ein paar andere notwendige Konfigurationsschritte in /etc.
In diesem Dokument werden wir den Nameserverdienst auf nemo.yewtopia.com konfigurieren, der der primäre Nameserver für die (sehr kleine!) Domäne yewtopia.com sein wird. Die Adresse von nemo.yewtopia.com ist 192.168.1.9. Zwei andere Maschinen befinden sich im selben Subnet, crater.yewtopia.com auf 192.168.1.1 und earhart.yewtopia.com auf 192.168.1.2.
; tell what subdir has the lookup database files directory /namedb ; type domain source host/file backup file cache root.cache primary 0.0.127.IN-ADDR.ARPA localhost.rev ; example primary server config: primary yewtopia.com yewtopia primary 1.168.192.IN-ADDR.ARPA yewtopia.rev
Dies teilt dem Initialisierungsprozeß mit, in welchem Unterverzeichnis und unter welchem Dateinamen die Konfigurationsdateien für yewtopia.com zu finden sind.
; Reverse lookup für localhost interface
@ IN SOA nemo.yewtopia.com.
your_id.nemo.yewtopia.com. (
14 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS nemo.yewtopia.com.
1 IN PTR localhost.yewtopia.com.
; yewtopia.com domain database
yewtopia.com. IN SOA nemo.yewtopia.com.
your_id.nemo.yewtopia.com. (
14 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS nemo.yewtopia.com.
; Addresses
localhost.yewtopia.com. IN A 127.0.0.1
crater.yewtopia.com. IN A 192.168.1.1
earhart.yewtopia.com. IN A 192.168.1.2
nemo.yewtopia.com. IN A 192.168.1.9
; yewtopia domain reverse lookup database
1.168.192.in-addr.arpa. IN SOA nemo.yewtopia.com.
your_id.nemo.yewtopia.com. (
14 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
1.168.192.in-addr.arpa. IN NS nemo.yewtopia.com.
; Addresses
1.1.168.192.in-addr.arpa. IN PTR crater.yewtopia.com.
2.1.168.192.in-addr.arpa. IN PTR earhart.yewtopia.com.
9.1.168.192.in-addr.arpa. IN PTR nemo.yewtopia.com.
Stelle sicher, daß /etc/resolv.conf nun auf die Domäne des lokalen Rechners (anstatt auf, z. B., den Nameserver deines ISPs) zeigt, so daß die Namensauflösungsanfragen auch wirklich zu dem named geschickt werden, den du konfiguriert hast!
domain yewtopia.com lookup file bind
Wenn du vorher die Adressen von diversen Rechnern zu der /etc/hosts Datei hinzugefügt hattest, dann solltest du in Betracht ziehen, deine /etc/hosts Datei wieder auf Standardgröße zu kürzen:
# Host addresses 127.0.0.1 localhost localhost.localdomain 192.168.1.9 nemo nemo.yewtopia.com
Damit named nicht zugunsten von (möglicherweise veralteten) Adressen in der /etc/hosts Datei übergangen wird. Stelle sicher, daß du zumindest den Standardeintraglocalhost hast, oder dein Netzwerk wird nicht richtig starten!! Auch nemo muß in seiner eigenen hosts-Datei aufscheinen, oder du wirst eine (eher harmlosen) Fehlermeldung zu Bootzeit bemerken, wenn /etc/netstart route(8) aufruft, um nemo hinzuzufügen (dessen Name in /etc/myname aufscheint).
$ dig @nemo.yewtopia yewtopia any any
; <<>> DiG 2.2 <<>> @nemo.yewtopia yewtopia any any
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59904
;; flags: qr rd ra; Ques: 1, Ans: 2, Auth: 0, Addit: 1
;; QUESTIONS:
;; yewtopia, type = ANY, class = ANY
;; ANSWERS:
yewtopia. 3600 SOA nemo.yewtopia.
your_id.nemo.yewtopia. (
14 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 mins)
3600000 ; expire (41 days 16 hours)
3600 ) ; minimum (1 hour)
yewtopia. 3600 NS nemo.yewtopia.
;; ADDITIONAL RECORDS:
nemo.yewtopia. 3600 A 192.168.1.9
;; Total query time: 4 msec
;; FROM: nemo to SERVER: nemo.yewtopia. 192.168.1.9
;; WHEN: Tue May 2 23:47:19 2000
;; MSG SIZE sent: 25 rcvd: 102
Der Nameserverdienst named wird beim Systemstart von /etc/rc gestartet, wenn die folgende Zeile (standardmäßig vorhanden) sich in /etc/rc.conf befindet.
named_flags=NO # für normal use: ""
verändere in
named_flags="" # für normal use: ""
Beachte auch diese Zeilen in /etc/rc.conf:
named_user=named # Named should not run as root unless neccesary named_chroot=/var/named # Where to chroot named if not empty
Diese Standardeinstellungen werden für beinahe alle Installationen korrekt sein.
Um named händisch zu starten, verwende den ndc(8) Befehl. Z. B.:
# ndc start
oder
# ndc restart
Der beste Weg, um den Nameserverdienst zu stoppen, ist den ndc(8) Befehl zu verwenden. Z. B.:
# ndc stop
Wenn dies fehlschlägt, finde die Prozeß-ID von named und verwende den kill(1) Befehl, um diesen Prozeß zu beenden. Die PID für named, solange er läft, kannst du in der ersten Zeile der Datei /var/named/named.pid finden.
# cat /var/named/named.pid 4608 named -t /var/named -u named # kill -KILL 4608
Beispiel:
garden:/home/jeremy$ host -l openssh.com openssh.com. NS zeus.theos.com. openssh.com. NS cvs.openbsd.org. openssh.com. NS gandalf.sigmasoft.com. openssh.com. NS cs.colorado.edu. openssh.com. NS ns.appli.se. openssh.com. A 199.185.137.4 cvs.openssh.com. A 199.185.137.4 localhost.openssh.com. A 127.0.0.1
Diese Information ist nützlich für das Debuggen von DNS, aber in manchen Fällen willst du diesen
Output nicht in aller Welt zeigen.
Wenn du klassenloses in-addr(rfc2317) für reverse benutzt, könnte 'host -l' jede Domain anzeigen, die
dein System hostet!
Dies kann man einfach mit der 'allow-transfer' Formulierung in deinem zone file verhindern.
Wenn du Bind8 benutzt, musst du die Hosts spezifizieren, denen du den "Zonen-Transfer" erlauben willst, und zwar in deinen
individuellen Zone Datei(en):
HINWEIS: Dies bezieht sich nicht auf ALLE ADSL Provider, aber viele der Informationen können aus diesem Setup übernommen werden. Dieses Setup funktioniert auf jeden Fall bei Inode, einem ADSL Provider in Österreich.
Zunächst benötigt man ein pptp. Ein port wurde dem OpenBSD ports tree NACH der Veröffentlichung von OpenBSD 2.8 hinzugefügt und arbeitet bestens. Der port ist unter /ports/net/pptp zu finden. Lies die FAQ 8.6, wenn du mehr über den OpenBSD ports tree herausfinden willst.
Wegen des Konflikts der "Im-Kernel" gre(4) Unterstützung und pptp wirst du deinen Kernel neu kompilieren müssen und die Unterstützung für gre(4) entfernen müssen.
Index: sys/conf/GENERIC =================================================================== RCS file: /cvs/src/sys/conf/GENERIC,v retrieving revision 1.66 diff -u -r1.66 GENERIC --- sys/conf/GENERIC 2000/10/13 04:21:14 1.66 +++ sys/conf/GENERIC 2000/12/26 19:55:31 @@ -97,6 +97,6 @@ pseudo-device ksyms 1 # kernel symbols device pseudo-device bridge 2 # network bridging support #pseudo-device vlan 2 # IEEE 802.1Q VLAN pseudo-device gre 1 # GRE encapsulation interface #pseudo-device gre 1 # GRE encapsulation interface option BOOT_CONFIG # add support for boot -c
Um deinen Kernel neu zu kompilieren mache einen "check out" von OpenBSD 2.8-stable via cvs (siehe die OpenBSD Stable Webseite) , benutze den folgenden Patch, und baue einen neuen Kernel wie unter FAQ 5.3.
Nachdem du das pptp package und einen neuen Kernel installiert hast, musst du ein paar Dateien für deine neue Verbindung editieren. Diese packages benutzen das standardmässige OpenBSD ppp(8), wenn du dich also mit ppp(8) auskennst, kommt dir vieles bekannt vor. Siehe auch FAQ 6.5.
Für eine /etc/ppp/options Datei wird ein Setup wie das unten vermutlich alles notwendige tun:
# cat /etc/ppp/options name "LOGINNAME" noauth noipdefault defaultroute debug
LOGINNAME sollte mit deiner User-ID ersetzt werden.
In /etc/ppp/pap-secrets gehört eine Zeile wie diese hier:
# cat /etc/ppp/pap-secrets LOGINNAME 10.0.0.138 PASSWORD
Wobei LOGINNAME deine User-ID und PASSWORD dein Password ist. 10.0.0.138 ist die zugewiesene IP deines Modems im Falle, dass du ADSL nutzt, etc. Stelle sicher, dass diese Datei nur von root gelesen werden kann (mode 600).
Im obigen Beispiel hatte unser Modem eine vorkonfigurierte Adresse von 10.0.0.138. Jetzt müssen wir UNSEREM Interface noch eine Adresse zuweisen. Es ist am besten eine IP zu wählen, die nahe an der deines MODEMS liegt, oder einfach die statische Adresse zu benutzen, die dir zugewiesen wurde. Mehr darüber, wie man Interfaces IP-Adressen zuweist, kannst du in FAQ 6.1 lesen.
Wenn dein Interface eingerichtet ist, solltest du eine pptp Verbindung mit dem Kommando
# /usr/local/sbin/pptp 10.0.0.138 &aufbauen können.
Da hier auch der "in-house" OpenBSD ppp(8) benutzt wird, werden hier zwei Prozesse gestartet. Du kannst pptp beenden, indem du diesen beiden Prozesse killst:
# kill -9 [pid of pppd] % kill -9 [pid of pptp]Wir empfehlen /var/log/messages in einem weiteren Terminalfenster zu öffnen, um mögliche Probleme zu erkennen.
# tail -f /var/log/message
Wir schlagen vor, die Startsequenz in /etc/rc.local unterzubringen, so dass bei jedem reboot die Verbindung automatisch aufgebaut wird.
[Zurück zum Hauptindex] [Zu Kapitel 5.0 - Kernelkonfiguration] [Zu Kapitel 7.0 - Tastatureinstellungen]