Inhaltsverzeichnis
Zusammenfassung
Masquerading, Firewall und Kerberos bilden die Grundlagen für ein sicheres Netzwerk, welche für einen kontrollierten Datenverkehr sorgen. Die Secure Shell (SSH) gibt dem Benutzer die Möglichkeit, über eine verschlüsselte Verbindung auf entfernten Rechner sich anzumelden. Um all diese umfangreichen Möglichkeiten zu nutzen, werden die grundlegenden Themen zur Netzwerksicherheit besprochen.
Wegen seiner herausragenden Netzwerkfähigkeiten wird Linux immer häufiger als Router für Wählleitungen oder auch Standleitungen verwendet. Der Begriff Router bezieht sich hierbei auf einen Rechner, der mehr als ein Netzwerkinterface hat und der Pakete, die nicht für eines seiner eigenen Netzwerkinterfaces bestimmt sind, an seine jeweiligen Kommunikationspartner weiterleitet. Ein Router wird häufig auch Gateway genannt. Die im Linux-Kernel vorhandenen Paketfilter ermöglichen eine präzise Steuerung dafür, welche Pakete des Datenverkehrs nun passieren dürfen und welche nicht.
Das Festlegen der genauen Filterregeln für diesen Paketfilter erfordert in der Regel etwas Erfahrung seitens des Administrators. SUSE Linux hält für den weniger erfahrenen Benutzer ein SuSEfirewall2 bereit, das das Einstellen dieser Regeln erleichtert.
Die SuSEfirewall2 ist flexibel konfigurierbar und eignet sich deswegen auch zum Aufbau von komplexeren Paketfilterkonstrukten. Das Paketfilter-Paket erlaubt es, einen Linux-Rechner mittels Masquerading als Router zur Anbindung eines internen Netzwerks mit nur einer einzigen von außen sichtbaren IP-Adresse zu betreiben. Masquerading wird also mit Hilfe von Regeln eines Paketfilters realisiert.
![]() | Warnung |
|---|---|
Die hier vorgestellten Verfahren gelten als Standard und funktionieren in der Regel. Es gibt jedoch keine Garantie dafür, dass sich nicht doch in diesem Buch oder woanders ein Fehler eingeschlichen hat. Sollten Cracker trotz umfassender korrekter Schutzmaßnahmen Ihrerseits in Ihr System eindringen, dann machen Sie bitte nicht die Buchautoren verantwortlich. Auch wenn Sie nicht direkt eine Antwort erhalten, können Sie sicher sein, dass wir für Kritik und Anregungen dankbar sind und Verbesserungen einbringen werden. | |
Masquerading ist der Linux-Spezialfall von NAT (Network Address Translation), der Übersetzung von Netzwerkadressen. Das Prinzip dahinter ist einfach: Ihr Router hat mehr als ein Netzwerkinterface, typischerweise sind das eine Netzkarte und eine Schnittstelle zum Internet (zum Beispiel ein ISDN-Interface). Eines dieser Interfaces wird Sie nach außen anbinden, eines oder mehrere andere verbinden Ihren Rechner mit den weiteren Rechnern in Ihrem Netz. In einem Beispiel soll nun per ISDN nach außen eingewählt werden, das äußere Netzwerkinterface ist ippp0. Sie haben mehrere Rechner im lokalen Netz mit der Netzwerkkarte Ihres Linux-Routers verbunden, die in diesem Beispiel eth0 heißt. Die Rechner im Netz senden alle Pakete, die nicht für das eigene Netz bestimmt sind, an den Default-Router oder das Default-Gateway.
![]() | Wichtig |
|---|---|
Achten Sie beim Konfigurieren Ihres Netzwerks immer auf übereinstimmende broadcast-Adressen und Netzwerkmasken! | |
Wird nun einer der Rechner in Ihrem Netz ein Paket fürs Internet abschicken, dann landet es beim Default-Router. Dieser muss so konfiguriert sein, dass er solche Pakete auch weiterleitet. Aus Sicherheitsgründen wird eine SUSE LINUX Installation dies in der Voreinstellung nicht tun! Ändern Sie die Variable IP_FORWARD in der Datei /etc/sysconfig/sysctl auf IP_FORWARD=yes. Nach einem Reboot oder dem folgenden Kommando ist das Weiterleiten aktiviert: echo 1 > /proc/sys/net/ipv4/ip_forward
Der Zielrechner der Verbindung kennt nur Ihren Router, nicht aber den eigentlichen Absender-Rechner in Ihrem inneren Netzwerk, der hinter Ihrem Router versteckt ist. Daher kommt der Begriff Masquerading. Die Zieladresse für Anwortpakete ist wegen der Adressübersetzung wieder unser Router. Dieser muss die Pakete erkennen und die Zieladresse so umschreiben, dass sie zum richtigen Rechner im lokalen Netz gelangen.
Diese Erkennung von Paketen, die zu Verbindungen gehören, die durch Masquerading durch den Router entstanden sind, geschieht mit Hilfe einer Tabelle, die direkt im Kernel Ihres Routers gehalten wird, solange die dazugehörigen Verbindungen aktiv sind. Diese Tabelle kann der Superuser (root) sogar mit dem Kommando iptables einsehen. Bitte konsultieren Sie die Manpage dieses Kommandos für genauere Anleitung. Für die Identifizierung einzelner Masquerade Verbindungen sind neben Absender- und Zieladresse auch Port-Nummern und die beteiligten Protokolle an sich relevant. Damit ist es möglich, dass Ihr Router für jeden einzelnen Ihrer lokalen Rechner viele Verbindungen gleichzeitig bereitstellen kann.
Da der Weg der Pakete von außen nach innen von der Masquerading-Tabelle abhängt, gibt es keine Möglichkeit, von außen eine Verbindung nach innen zu öffnen. Für diese Verbindung gäbe es keinen Eintrag in der Tabelle. Eine etablierte Verbindung hat darüber hinaus in der Tabelle einen zugeordneten Status, so dass dieser Tabelleneintrag nicht von einer zweiten Verbindung genutzt werden kann.
In der Folge ergeben sich nun Probleme mit manchen Anwendungen, zum Beispiel ICQ, cucme, IRC (DCC, CTCP), Quake und FTP (im PORT-Mode). Netscape, das Standard-FTP-Programm und viele andere benutzen den PASV-Modus, der im Zusammenhang mit Paketfiltern und Masquerading weit weniger problembehaftet ist.
Firewall ist wohl der am weitesten verbreitete Begriff für einen Mechanismus, der zwei Netze miteinander verbindet, aber für möglichst kontrollierten Datenverkehr sorgt. Es gibt verschiedene Bauarten von Firewalls, die sich hauptsächlich in der logisch-abstrakten Ebene unterscheiden, auf der sie den Datenverkehr untersuchen und regulieren. Die Methode, die wir hier vorstellen, müsste sich eigentlich genauer Paketfilter nennen. Ein Paketfilter regelt den Durchlass anhand von Kriterien wie Protokoll, Port und IP-Adresse. Auf diese Weise können Sie also Pakete abfangen, die aufgrund ihrer Adressierung nicht in Ihr Netz durchdringen sollen. Beispielsweise sollten Sie Pakete abfangen, die den telnet-Dienst Ihrer Rechner auf port 23 zum Ziel haben. Wenn Sie beispielsweise Zugriffe auf Ihren Webserver zulassen wollen, müssen Sie den dazugehörigen Port freischalten. Der Inhalt dieser Pakete, falls sie legitim adressiert sind (also beispielsweise mit Ihrem Webserver als Ziel), wird nicht untersucht. Das Paket könnte insofern einen Angriff auf ein CGI-Programm auf Ihrem Webserver enthalten und wird vom Paketfilter durchgelassen.
Ein wirksameres — wenn auch komplexeres — Konstrukt ist die Kombination von mehreren Bauarten, beispielsweise ein Paketfilter mit zusätzlichem Application Gateway/Proxy. Der Paketfilter wehrt Pakete ab, die zum Beispiel an nicht freigeschaltete Ports gerichtet sind. Nur Pakete für ein Application Gateway sollen durchgelassen werden. Dieses Proxy tut nun so, als wäre es der eigentliche Kommunikationspartner des Servers, der mit uns eine Verbindung herstellt. In diesem Sinne kann ein solches Proxy als eine Masquerading-Maschine auf der Ebene des Protokolls der jeweiligen Anwendung angesehen werden. Ein Beispiel für solch ein Proxy ist Squid, ein HTTP Proxy Server, für den Sie Ihren Browser so konfigurieren müssen, dass Anfragen für HTML-Seiten zuerst an den Speicher des Proxy gehen und nur, wenn dort die Seite nicht zu finden ist, vom Proxy in das Internet geschickt werden. Die SUSE proxy suite (das proxy-suite) enthält übrigens einen Proxy-Server für das FTP-Protokoll.
Im Folgenden wollen wir uns auf das Paketfilter-Paket bei SUSE LINUX konzentrieren. Für mehr Informationen und weitere Links zum Thema Firewall lesen Sie bitte das Firewall-HOWTO, enthalten im howtode. Es lässt sich mit dem Kommando less /usr/share/doc/howto/de/DE-Firewall-HOWTO.txt.gz lesen, wenn das Paket howtode installiert ist.
Die Konfiguration der SuSEfirewall2 erfordert einiges an Wissen und Erfahrung. Unter /usr/share/doc/packages/SuSEfirewall2 finden Sie Dokumentation zur SuSEfirewall2.
Die Konfiguration lässt sich entweder mit YaST vornehmen (s. Abbschnitt 19.1.3.2. “Konfiguration mit YaST”) oder kann direkt in der Datei /etc/sysconfig/SuSEfirewall2 erfolgen, die ausführliche englische Kommentare enthält.
Wir werden Ihnen nun Schritt für Schritt eine erfolgreiche Konfiguration vorführen. Es ist bei jedem Punkt angeführt, ob er für Masquerading oder Firewall gilt. In der Konfigurationsdatei ist auch von einer DMZ (Demilitarisierte Zone) die Rede, auf die an dieser Stelle nicht näher eingegangen wird.
Falls Sie wirklich nicht mehr als Masquerading brauchen, füllen Sie nur die mit Masquerading bezeichneten Zeilen aus.
Aktivieren Sie zunächst mit dem YaST Runlevel Editor die SuSEfirewall2 für Ihren Runlevel (wahrscheinlich 3 oder 5). Dadurch werden symbolische Links für die SuSEfirewall2_* Skripte in den Verzeichnissen /etc/init.d/rc?.d/ angelegt.
FW_DEV_WORLD (Firewall, Masquerading): zum Beispiel eth0, als Device, das ins Internet führt. Bei ISDN ist es zum Beispiel ippp0.
FW_DEV_INT (Firewall, Masquerading): Geben Sie hier das Device an, das ins innere, private Netz zeigt. Falls kein inneres Netz vorhanden ist, einfach leer lassen.
FW_ROUTE (Firewall, Masquerading): Wenn Sie Masquerading brauchen, müssen Sie hier auf jeden Fall yes eintragen. Ihre internen Rechner sind nicht von außen sichtbar, da diese private Netzwerkadressen (zum Beispiel 192.168.x.x) haben, die im Internet gar nicht geroutet werden.
Bei einer Firewall ohne Masquerading wählen Sie hier nur dann yes, wenn Sie Zugang zum internen Netz erlauben wollen. Dazu müssen die internen Rechner offiziell zugewiesene IP-Adressen haben. Im Normalfall sollten Sie allerdings den Zugang von außen auf die internen Rechner nicht erlauben!
FW_MASQUERADE (Masquerading): Wenn Sie Masquerading brauchen, müssen Sie hier yes eintragen. Beachten Sie, dass es sicherer ist, wenn die Rechner des internen Netzes über Proxy-Server auf das Internet zugreifen.
FW_MASQ_NETS (Masquerading): Tragen Sie hier die Rechner oder Netzwerke ein, für die Masquerading vorgenommen werden soll. Trennen Sie die einzelnen Einträge durch Leerzeichen. Zum Beispiel: FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INTERNAL (Firewall): Tragen Sie hier yes ein, wenn Sie den Firewall-Rechner auch durch Angriffe vom inneren Netz schützen wollen. Dann müssen Sie die Services, die für das innere Netz verfügbar sind, explizit freigeben. Siehe auch FW_SERVICES_INTERNAL_TCP und FW_SERVICES_INTERNAL_UDP.
FW_AUTOPROTECT_GLOBAL_SERVICES (Firewall): Im Normalfall auf yes lassen.
FW_SERVICES_EXTERNAL_TCP (Firewall): Tragen Sie hier die Services ein, auf die zugegriffen werden soll; zum Beispiel www smtp ftp domain 443 – für den Rechner zu Hause, der keine Dienste anbieten soll, tragen Sie meist nichts ein.
FW_SERVICES_EXTERNAL_UDP (Firewall): Wenn Sie nicht gerade einen Nameserver betreiben, auf den von außen zugegriffen werden soll, lassen Sie dieses Feld leer. Ansonsten fügen Sie hier die benötigten Ports ein.
FW_SERVICES_INTERNAL_TCP (Firewall): Hier werden die für das innere Netz zur Verfügung stehenden Dienste deklariert. Die Angaben sind analog zu denen unter FW_SERVICES_EXTERNAL_TCP, beziehen sich hier aber auf das interne Netz.
FW_SERVICES_INTERNAL_UDP (Firewall): Siehe oben.
FW_TRUSTED_NETS (Firewall): Hier tragen Sie die Rechner ein, denen Sie wirklich vertrauen können (Trusted Hosts). Beachten Sie zudem, dass auch diese Rechner vor Eindringlingen geschützt sein müssen. 172.20.0.0/16 172.30.4.2 bedeutet, dass alle Rechner, deren IP-Adresse mit 172.20.x.x beginnt, sowie der Rechner mit der IP-Adresse 172.30.4.2 durch die Firewall hindurch können.
FW_SERVICES_TRUSTED_TCP (Firewall): Hier legen Sie die TCP-Portadressen fest, die von den Trusted Hosts benutzt werden können. Geben Sie zum Beispiel 1:65535 ein, wenn die vertrauenswürdigen Rechner auf alle Services zugreifen dürfen. Normalerweise sollte es reichen, wenn man hier als Service ssh eingibt.
FW_SERVICES_TRUSTED_UDP (Firewall): Wie oben, nur auf UDP bezogen.
FW_ALLOW_INCOMING_HIGHPORTS_TCP (Firewall): Wenn Sie mit normalem (aktivem) FTP arbeiten wollen, so tragen Sie hier ftp-data ein.
FW_ALLOW_INCOMING_HIGHPORTS_UDP (Firewall): Tragen Sie hier dns ein, damit Sie die in /etc/resolv.conf eingetragenen Nameserver verwenden können. Mit yes geben Sie alle hohen Portnummern frei.
FW_SERVICE_DNS (Firewall): Falls bei Ihnen ein Nameserver läuft, auf den von außen zugegriffen werden soll, tragen Sie hier yes ein; in FW_TCP_SERVICES_* muss zugleich der Port 53 freigeschaltet sein.
FW_SERVICE_DHCLIENT (Firewall): Wenn Sie dhclient benützen, um Ihre IP-Adresse zu beziehen, so müssen Sie hier yes eintragen.
FW_LOG_*: Stellen Sie hier ein, was Sie mitloggen wollen. Für den laufenden Betrieb reicht yes bei FW_LOG_DENY_CRIT.
FW_STOP_KEEP_ROUTING_STATE (Firewall): Falls Sie automatisch per diald oder über ISDN (dial on demand) ins Internet gehen, so tragen Sie hier yes ein.
Damit ist die Konfiguration abgeschlossen. Vergessen Sie nicht, die Firewall zu testen (zum Beispiel telnet von außen); Sie sollten dann in /var/log/messages in etwa folgende Einträge sehen:
Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A061AFEBC0000000001030300)
Die grafisch geführte Konfiguration mit YaST erreichen Sie über das YaST-Kontrollzentrum. Wählen Sie aus der Kategorie den Unterpunkt . Die Konfiguration ist in vier Teilabschnitte gegliedert:
Legen Sie die abzusichernden Interfaces fest. Ist ein einzelner Rechner ohne internes Netz dahinter abzusichern, geben Sie nur die nach außen ins Internet gerichtete Schnittstelle an. Ist ein internes Netz hinter Ihrem System geschaltet, muss auch die nach innen gerichtete Schnittstelle angegeben werden. Verlassen Sie diesen Dialog mit .
Diese Option ist nur relevant, falls Sie über Ihr System Dienste anbieten wollen, die vom Internet aus verfügbar sein sollen (Web-Server, Mail-Server etc.). Aktivieren Sie die entsprechenden Checkboxen und/oder nehmen Sie über den Button die Freischaltung bestimmter Dienste über deren Portnummern (nachzulesen in /etc/services) vor. Soll Ihr Rechner nicht als Server betrieben werden, verlassen Sie diesen Dialog ohne jegliche Änderung mit .
Hier selektieren Sie die wichtigsten Features, die Ihre Firewall auszeichnen sollen:
hilft, das Routing zu Ihrer Firewall hin zu überprüfen.
schirmt Rechner aus dem internen Netz gegen das Internet ab — alle Internetdienste werden scheinbar von Ihrer Firewall benutzt, während die internen Rechner unsichtbar bleiben.
bedeutet, dass jeglicher Netzwerkzugriff auf TCP- und UDP-Dienste der Firewall verhindert wird. Ausgenommen hiervon sind die Dienste, die Sie im vorhergehenden Schritt explizit freigeschaltet haben.
Nur die freigegebenen Dienste der Firewall sind für die internen Rechner verfügbar. Da hier keine Freigabe von Diensten möglich ist, sollten Sie diese Option besser deaktivieren, wenn Sie Zugriff aus dem internen Netz wünschen.
Ist die Featurekonfiguration abgeschlossen, verlassen Sie diese Maske mit .
Hier legen Sie den Umfang der Protokollierung Ihrer Firewall fest. Bevor Sie die aktivieren, bedenken Sie, dass diese Logfiles große Ausgabemengen erzeugen. Mit der Konfiguration der Protokollierung ist die Konfiguration Ihrer Firewall abgeschlossen. Verlassen Sie den Dialog mit und bestätigen Sie die nun erscheinende Meldung zur Aktivierung der Firewall.