Inhaltsverzeichnis
Zusammenfassung
Masquerading und eine Firewall stellen einen kontrollierten Datenfluss und Datenaustausch sicher. Mit SSH (Secure Shell) können Sie sich über eine verschlüsselte Verbindung bei entfernten Hosts anmelden. Die Verschlüsselung von Dateien oder ganzen Partitionen schützt Ihre Daten für den Fall, dass Dritte Zugriff auf Ihr System erhalten. In den technischen Anleitungen erhalten Sie Informationen über Sicherheitsaspekte von Linux-Netzwerken.
Wann immer Linux in einer Netzwerkumgebung eingesetzt wird, können Sie die Kernel-Funktionen verwenden, mit denen Netzwerkpakete so bearbeitet werden können, dass zwischen internen und externen Netzwerkbereichen unterschieden wird. Das Linux-Netfilter-Framework ermöglicht die Einrichtung einer wirksamen Firewall, die die verschiedenen Netzwerke voneinander trennt. Mithilfe von iptables – einer generischen Tabellenstruktur für die Definition von Regelsätzen – können Sie präzise steuern, welche Pakete eine Netzwerkschnittstelle passieren dürfen. Ein derartiger Paketfilter kann schnell und einfach mithilfe von SuSEfirewall2 und dem entsprechenden YaST-Modul eingerichtet werden.
Die Komponenten netfilter und iptables sind verantwortlich für das Filtern und Bearbeiten von Netzwerkpaketen sowie für NAT (Network Address Translation, Übersetzung der Netzwerkadressen). Die Filterkriterien und alle dazugehörigen Aktionen werden in Ketten gespeichert, die nacheinander mit den einzelnen eingehenden Netzwerkpaketen verglichen werden müssen. Die für den Vergleich zu verwendenden Ketten werden in Tabellen gespeichert. Mit dem Befehl iptables können Sie diese Tabellen und Regelsätze bearbeiten.
Der Linux-Kernel verwaltet drei Tabellen, wobei jede einzelne für eine bestimmte Kategorie von Funktionen des Paketfilters dient:
Diese Tabelle enthält die meisten Filterregeln, da sie
die eigentliche Paketfilterung
implementiert. Hier wird u. a. entschieden, welche Pakete
durchgelassen (ACCEPT
) oder abgelehnt
(DROP
) werden.
In dieser Tabelle werden alle Änderungen an den Quell- und Zieladressen von Paketen definiert. Mithilfe dieser Funktionen können Sie das Masquerading implementieren, bei dem es sich um einen Spezialfall von NAT handelt und der eingesetzt wird, um private Netzwerke mit dem Internet zu verbinden.
Die Regeln in dieser Tabelle ermöglichen das Bearbeiten von Werten, die in IP-Headern gespeichert sind (z. B. den Typ des Diensts).
Diese Tabellen enthalten mehrere vordefinierte Ketten, mit denen die Pakete verglichen werden:
Diese Kette wird auf eingehende Pakete angewendet.
Diese Kette wird auf Pakete angewendet, die an interne Prozesse des Systems adressiert sind.
Diese Kette wird auf Pakete angewendet, die durch das System nur weitergeleitet werden.
Diese Kette wird auf Pakete angewendet, die aus dem System selbst stammen.
Diese Kette wird auf alle ausgehenden Pakete angewendet.
Abbildung 4.1, „iptables: Die möglichen Wege eines Pakets“ zeigt die Wege, die ein Netzwerkpaket auf einem System durchlaufen kann. Der Einfachheit halber werden in dieser Abbildung die Tabellen als Teile von Ketten dargestellt. In Wirklichkeit sind diese Ketten jedoch in den Tabellen selbst enthalten.
Im einfachsten aller möglichen Fälle geht ein eingehendes
Paket, das an das System selbst adressiert ist, an der
Schnittstelle eth0
ein. Das Paket wird zunächst
an die Kette PREROUTING
der Tabelle
mangle
und anschließend an die Kette
PREROUTING
der Tabelle nat
weitergegeben. Im folgenden Schritt des Paket-Routings wird
ermittelt, dass das tatsächliche Ziel des Pakets ein Prozess des
Systems selbst ist. Nach den INPUT
-Ketten der
Tabellen mangle
und filter
erreicht das Paket schließlich sein Ziel, vorausgesetzt, dass es
tatsächlich den Regeln der Tabelle filter
entspricht.
Masquerading ist der Linux-Spezialfall von NAT (Network
Address Translation), der Übersetzung von Netzwerkadressen. Es
kann verwendet werden, um ein kleines LAN (in dem die Hosts
IP-Adressen aus dem privaten Bereich verwenden – siehe Abschnitt 18.1.2, „Netzmasken und Routing“) mit dem Internet
(in dem offizielle IP-Adressen verwendet werden) zu verbinden.
Damit die LAN-Hosts eine Verbindung zum Internet herstellen
können, müssen ihre privaten Adressen in eine offizielle Adresse
übersetzt werden. Dies geschieht auf dem Router, der als Gateway
zwischen dem LAN und dem Internet agiert. Das zugrunde liegende
Prinzip ist einfach: Der Router verfügt über mehrere
Netzwerkschnittstellen, in der Regel eine Netzwerkkarte und eine
separate Schnittstelle für die Verbindung mit dem Internet.
Letztere verbindet den Router mit der Außenwelt und eine oder
mehrere andere Schnittstellen verbinden ihn mit den LAN-Hosts.
Wenn diese Hosts im lokalen Netzwerk mit der Netzwerkkarte (z. B.
eth0
) des Routers verbunden sind, senden Sie
alle Pakete, die nicht an das lokale Netzwerk adressiert sind, an
ihr Standard-Gateway (den Router).
Verwenden der richtigen Netzmaske | |
---|---|
Stellen Sie beim Konfigurieren des Netzwerks sicher, dass sowohl die Broadcast-Adresse als auch die Netzmaske für alle lokalen Hosts identisch sind. Anderenfalls können die Pakete nicht ordnungsgemäß weitergeleitet werden. |
Wenn einer der LAN-Hosts ein Paket an eine Internetadresse
sendet, wird es zunächst zum Standardrouter weitergeleitet. Bevor
der Router jedoch derartige Pakete weiterleiten kann, muss er
entsprechend konfiguriert werden. In SUSE Linux ist diese Funktion
in einer Standardinstallation aus Sicherheitsgründen nicht
aktiviert. Um den Router entsprechend zu aktivieren, setzen Sie
die Variable IP_FORWARD
in der Datei
/etc/sysconfig/sysctl
auf
IP_FORWARD=yes
.
Der Zielhost der Verbindung kann Ihren Router sehen, erfährt aber nichts über den Host im internen Netzwerk, von dem die Pakete stammen. Aus diesem Grund wird diese Technik als Masquerading bezeichnet. Die Zieladresse für Anwortpakete ist wegen der Adressübersetzung wieder der Router. Der Router muss die eingehenden Pakete identifizieren und ihre Zieladressen übersetzen, sodass die Pakete an den richtigen Host im Netzwerk weitergeleitet werden können.
Da das Routing des eingehenden Verkehrs von der Masquerading-Tabelle abhängig ist, ist es nicht möglich, von außen eine Verbindung zu einem internen Host herzustellen. Für eine derartige Verbindung gibt es in der Tabelle keinen Eintrag. Zudem verfügt eine eingerichtete Verbindung in der Tabelle über einen zugeordneten Status, sodass dieser Tabelleneintrag nicht von einer zweiten Verbindung genutzt werden kann.
Als Folge davon können bei einigen Anwendungsprotokollen, z. B. ICQ, cucme, IRC (DCC, CTCP) und FTP (im PORT-Modus) Probleme auftreten. Netscape, das Standard-FTP-Programm und viele andere Programme verwenden den PASV-Modus. Dieser passive Modus ist in Bezug auf die Paketfilterung und das Masquerading weitaus problemloser.
Firewall ist wohl der am weitesten verbreitete Begriff für einen Mechanismus, der zwei Netze miteinander verbindet und gleichzeitig für möglichst kontrollierten Datenverkehr sorgt. Genau genommen ist die in diesem Abschnitt beschriebene Firewall eigentlich ein Paketfilter. Ein Paketfilter regelt den Datenfluss anhand von bestimmten Kriterien wie Protokollen, Ports und IP-Adressen. Auf diese Weise können Sie Pakete blockieren, die aufgrund ihrer Adressierung Ihr Netz nicht erreichen sollen. Wenn Sie beispielsweise den öffentlichen Zugriff auf Ihren Webserver zulassen möchten, müssen Sie den entsprechenden Port explizit öffnen. Ein Paketfilter untersucht jedoch nicht den Inhalt dieser Pakete, sofern sie legitim adressiert sind, also beispielsweise mit Ihrem Webserver als Ziel. Das Paket könnte insofern einen Angriff auf ein CGI-Programm auf Ihrem Webserver enthalten und wird vom Paketfilter trotzdem durchgelassen.
Ein effektiverer, wenn auch komplexerer Mechanismus ist die
Kombination mehrerer Systeme, z. B. ein Paketfilter, der mit einem
Anwendungs-Gateway bzw. -Proxy interagiert. In diesem Fall lehnt
der Paketfilter alle Pakete ab, die an deaktivierte Ports
adressiert sind. Es werden nur die Pakete angenommen, die an das
Anwendungs-Gateway adressiert sind. Dieses Gateway bzw. dieser
Proxy gibt vor, der eigentliche Client des Servers zu sein. In
diesem Sinn kann ein solcher Proxy auf der Protokollebene der
jeweiligen Anwendung als Masquerading-Host angesehen werden. Ein
Beispiel für einen derartigen Proxy ist Squid, ein
HTTP-Proxyserver. Um Squid verwenden zu können, muss der Browser
für die Kommunikation über den Proxy konfiguriert sein. Alle
angeforderten HTTP-Seiten werden aus dem Proxy-Cache bedient und
Seiten, die im Cache nicht gefunden werden, werden vom Proxy aus
dem Internet geholt. Ein weiteres Beispiel ist die
SUSE-Proxy-Suite (proxy-suite
), die einen Proxy für das FTP-Protokoll
zur Verfügung stellt.
Im folgenden Abschnitt wird der zum Lieferumfang von SUSE
Linux gehörende Paketfilter beschrieben. Weitere Informationen zu
Paketfiltern und Firewalls finden Sie in der Datei „Firewall
HOWTO“, die im Paket howto
enthalten ist. Wenn dieses Paket installiert
ist, lesen Sie die HOWTO-Informationen mit dem Befehl
less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz
.
SuSEfirewall2 ist ein Skript, das die in
/etc/sysconfig/SuSEfirewall2
gesetzten
Variablen ausliest, um mehrere iptables-Regeln zu generieren. Es
definiert drei Sicherheitszonen, obwohl nur die erste und die
zweite Zone in der folgenden Beispielkonfiguration berücksichtigt
werden:
Davon ausgehend, dass es keine Möglichkeit gibt, Vorgänge im externen Netzwerk zu steuern, muss der Host vor diesem geschützt werden. In den meisten Fällen handelt es sich bei dem externen Netzwerk um das Internet, es könnte aber auch ein anderes unsicheres Netzwerk sein, z. B. ein WLAN.
Diese Zone bezieht sich auf das private Netzwerk, wobei es sich in den meisten Fällen um ein LAN handelt. Wenn die Hosts in diesem Netzwerk IP-Adressen aus dem privaten Bereich (siehe Abschnitt 18.1.2, „Netzmasken und Routing“) verwenden, müssen Sie NAT (Network Address Translation) aktivieren, damit Hosts im internen Netzwerk auf externe Hosts zugreifen können.
Während Hosts, die sich in dieser Zone befinden, sowohl vom externen als auch vom internen Netzwerk aus erreicht werden können, können sie selbst nicht auf das interne Netzwerk zugreifen. Diese Konfiguration kann als zusätzliche Verteidigungslinie vor das interne Netzwerk gesetzt werden, da die DMZ-Systeme vom internen Netzwerk isoliert sind.
Jegliche Art von Netzwerkverkehr, der gemäß der Filterregel nicht explizit erlaubt ist, wird durch iptables unterdrückt. Daher muss jede Schnittstelle mit eingehendem Verkehr einer der drei Zonen zugeordnet werden. Legen Sie für alle Zonen die zulässigen Dienste und Protokolle fest. Diese Regelsätze gelten jedoch nur für Pakete, die von entfernten Hosts stammen. Lokal generierte Pakete werden von der Firewall nicht erfasst.
Die Konfiguration kann mit YaST ausgeführt werden (siehe
Abschnitt 4.1.4.1, „Konfiguration mit YaST“). Sie lässt sich
jedoch auch manuell in der Datei
/etc/sysconfig/SuSEfirewall2
vornehmen, die
sehr gut kommentiert ist. Zudem stehen weitere Beispielszenarien
in
/usr/share/doc/packages/SuSEfirewall2/EXAMPLES
zur Verfügung.
Automatische Firewall-Konfiguration | |
---|---|
Im Anschluss an die Installation startet YaST automatisch eine Firewall für alle konfigurierten Schnittstellen. Wenn ein Server auf dem System konfiguriert und aktiviert ist, kann YaST die automatisch generierte Firewall-Konfiguration mit den Optionen oder in den Serverkonfigurationsmodulen ändern. Einige Servermodul-Dialogfelder enthalten die Schaltfläche zum Aktivieren zusätzlicher Dienste und Ports. Die Firewall kann mit dem YaST-Firewall-Konfigurationsmodul aktiviert, deaktiviert oder neu konfiguriert werden. |
Der Zugriff auf die YaST-Dialogfelder für die grafische Konfiguration erfolgt über das YaST-Kontrollzentrum. Wählen Sie
+ . Die Konfiguration ist in sieben Abschnitte aufgeteilt, auf die Sie über die Baumstruktur auf der linken Seite direkt zugreifen können.In diesem Dialogfeld legen Sie das Startverhalten fest. In einer Standardinstallation wird SuSEfirewall2 automatisch gestartet. Außerdem können Sie in diesem Dialogfeld die Firewall starten und stoppen. Um die neuen Einstellungen für eine aktive Firewall zu übernehmen, wählen Sie
.Hier werden alle bekannten Netzwerkschnittstellen aufgelistet. Um eine Schnittstelle aus einer Zone zu entfernen, markieren Sie sie, klicken Sie auf
und wählen Sie . Um eine Schnittstelle zu einer Zone hinzuzufügen, markieren Sie sie, klicken Sie auf und wählen Sie anschließend eine der verfügbaren Zonen. Mit der Option können Sie auch eine spezielle Schnittstelle mit eigenen Einstellungen erstellen.Diese Option benötigen Sie, um einer Zone Dienste Ihres Systems zur Verfügung zu stellen, vor der es geschützt ist. Das System ist standardmäßig nur vor externen Zonen geschützt. Sie müssen alle Dienste explizit zulassen, die den externen Hosts zur Verfügung stehen sollen. Aktivieren Sie die Dienste nach Auswahl der gewünschten Zone in
.Mit der Masquerading-Funktionalität verbergen Sie das interne Netzwerk vor externen Netzwerken, z. B. dem Internet, und ermöglichen den Hosts im internen Netzwerk gleichzeitig den transparenten Zugriff auf das externe Netzwerk. Anforderungen vom externen an das interne Netzwerk werden blockiert. Anforderungen aus dem internen Netzwerk werden scheinbar vom Masquerading-Server ausgegeben, der extern sichtbar ist. Wenn dem externen Netzwerk spezielle Dienste eines internen Computers zur Verfügung gestellt werden sollen, fügen Sie für den Dienst eine spezielle Umadressierungsregel hinzu.
In diesem Dialogfeld konfigurieren Sie die UDP-Ports,
die Broadcasts zulassen sollen. Fügen Sie die
erforderlichen Nummern der Ports oder Dienste getrennt
durch Leerzeichen für die entsprechende Zone hinzu.
Weitere Informationen hierzu finden Sie in der Datei
/etc/services
.
Hier können Sie auch das Protokollieren von Broadcasts aktivieren, die nicht akzeptiert werden. Dies kann problematisch sein, da sich Windows-Hosts über Broadcasts miteinander bekannt machen und daher viele Pakete generieren, die nicht akzeptiert werden.
In diesem Dialogfeld konfigurieren Sie, ob dem externen Netzwerk der IPsec-Dienst zur Verfügung stehen soll. Unter
konfigurieren Sie, welche Pakete als verbürgt angesehen werden sollen.Für die Protokollierung gibt es zwei Regeln: eine für akzeptierte und eine für nicht akzeptierte Pakete. Nicht akzeptierte Pakete werden verworfen (DROPPED) oder abgelehnt (REJECTED). Wählen Sie die Option
, oder für beide Regeln.Wenn Sie die Firewall-Konfiguration abgeschlossen haben, wählen Sie
, um dieses Dialogfeld zu schließen. Anschließend wird eine zonenbezogene Zusammenfassung der Firewall-Konfiguration geöffnet. Aktivieren Sie darin alle Einstellungen. In dieser Zusammenfassung sind alle zulässigen Dienste, Ports und Protokolle aufgelistet. Mit der Option können Sie die Konfiguration ändern. Wählen Sie , um die Konfiguration zu speichern.In den folgenden Abschnitten sind detaillierte Anweisungen für eine erfolgreiche Konfiguration enthalten. Für jeden Konfigurationsschritt wird angegeben, ob er sich auf die Firewall- oder Masquerading-Konfiguration bezieht. Die in der Konfigurationsdatei erwähnten Aspekte, die mit der DMZ (Demilitarisierte Zone) in Zusammenhang stehen, werden hier nicht näher erläutert. Sie sind nur für komplexere Netzwerkinfrastrukturen größerer Unternehmen (Corporate Networks) relevant, die eine aufwändige Konfiguration und umfassende Kenntnisse erfordern.
Aktivieren Sie zunächst mit dem YaST-Runlevel-Editor
SuSEfirewall2 für Ihren Runlevel (wahrscheinlich 3 oder 5).
Dadurch werden symbolische Links für die SuSEfirewall2_*-Skripts
in den Verzeichnissen unter
/etc/init.d/rc?.d/
angelegt.
FW_DEV_EXT
(Firewall, Masquerading) Das mit dem Internet verbundene Gerät. Geben Sie für
eine Modemverbindung ppp0
ein. Geben
Sie für eine ISDN-Verbindung ippp0
ein.
Für DSL-Verbindungen geben Sie dsl0
ein. Um die der Standardroute entsprechende Schnittstelle
zu verwenden, geben Sie auto
an.
FW_DEV_INT
(Firewall, Masquerading) Das mit dem internen, privaten Netzwerk verbundene
Gerät (z. B. eth0
). Wenn es kein
internes Netzwerk gibt und die Firewall nur den Host
schützt, auf dem sie ausgeführt wird, machen Sie keine
Angaben.
FW_ROUTE
(Firewall, Masquerading) Wenn Sie die Masquerading-Funktion benötigen, setzen
Sie diese Variable auf yes
. Die
internen Hosts sind von außen nicht sichtbar, da ihre
private Netzwerkadressen (z. B.
192.168.x.x
) von Internetroutern
ignoriert werden.
Setzen Sie diese Variable für Firewalls ohne
Masquerading auf yes
, wenn der Zugriff
auf das interne Netzwerk zugelassen werden soll. In diesem
Fall müssen die internen Computer offiziell zugewiesene
IP-Adressen haben. Sie sollten den externen Zugriff auf
das interne Netzwerk in der Regel jedoch
nicht zulassen.
FW_MASQUERADE
(Masquerading) Setzen Sie diese Variable auf yes
,
wenn Sie die Masquerading-Funktion benötigen. Dadurch wird
den internen Hosts eine virtuelle direkte Verbindung zum
Internet zur Verfügung gestellt. Es ist jedoch weitaus
sicherer, wenn zwischen den Hosts des internen Netzwerks
und dem Internet ein Proxyserver geschaltet ist. Für die
von einem Proxyserver zur Verfügung gestellten Dienste ist
das Masquerading nicht erforderlich.
FW_MASQ_NETS
(Masquerading) Geben Sie die Hosts oder Netzwerke, für die die Masquerading-Funktion aktiviert werden soll, durch Leerzeichen getrennt an. Beispiel:
FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT
(Firewall) Setzen Sie diese Variable auf yes
,
um den Firewall-Host vor Angriffen aus dem internen
Netzwerk zu schützen. Dem internen Netzwerk stehen nur die
explizit aktivierten Dienste zur Verfügung. Weitere
Informationen hierzu finden Sie auch unter
FW_SERVICES_INT_TCP
und
FW_SERVICES_INT_UDP
.
FW_SERVICES_EXT_TCP
(Firewall) Geben Sie die zu öffnenden TCP-Ports an. Für eine normale Arbeitsstation, die in der Regel keine Dienste benötigt, müssen Sie hier keine Angaben machen.
FW_SERVICES_EXT_UDP
(Firewall) Lassen Sie dieses Feld leer, es sei denn, Sie möchten einen aktiven UDP-Dienst verfügbar machen. UDP wird von Diensten wie DNS-Servern, IPSec, TFTP, DHCP und anderen verwendet. Geben Sie in diesem Fall die zu verwendenden UDP-Ports an.
FW_SERVICES_INT_TCP
(Firewall) Mit dieser Variablen legen Sie die für das interne
Netzwerk verfügbaren Dienste fest. Die Notation ist
dieselbe wie für
FW_SERVICES_EXT_TCP
, aber die
Einstellungen werden auf das interne
Netzwerk angewendet. Diese Variable muss nur gesetzt
werden, wenn FW_PROTECT_FROM_INT
auf yes
gesetzt ist.
FW_SERVICES_INT_UDP
(Firewall) Siehe FW_SERVICES_INT_TCP.
Testen Sie im Anschluss an die Konfiguration die
Firewall. Die Firewall-Regeln werden erstellt, indem Sie
SuSEfirewall2 start als root
eingeben. Testen Sie auf
einem externen Host anschließend beispielsweise mit
telnet, ob die Verbindung tatsächlich
abgelehnt wird. Prüfen Sie anschließend
/var/log/messages
, wo Sie ähnliche
Einträge wie die folgenden sehen sollten:
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)
Weitere Pakete zum Testen der Firewall-Konfiguration sind
„nmap“ oder „nessus“. Die Dokumentation von nmap befindet sich
im Verzeichnis /usr/share/doc/packages/nmap
und die Dokumentation von nessus ist nach der Installation des
entsprechenden Pakets im Verzeichnis
/usr/share/doc/packages/nessus-core
enthalten.
Die aktuellsten Informationen sowie weitere Dokumentationen
zum PaketSuSEfirewall2
finden Sie im
Verzeichnis
/usr/share/doc/packages/SuSEfirewall2
. Die
Homepage der Projekte „netfilter“ und „iptables“ unter der Adresse
http://www.netfilter.org bietet eine
umfassende Sammlung von Dokumenten in zahlreichen Sprachen.