Firewall für Anfänger: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Malte (Diskussion | Beiträge)
Zur Kategorie Netzwerk hinzugefügt
Malte (Diskussion | Beiträge)
Beispiel hinzugefügt
 
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieser Artikel richtet sich an Arch–Nutzer, die noch nie eine Firewall unter Linux benutzt haben.
{{unvollständig}}
Eine Firewall ist ein Sicherheitskonzept, das es ermöglicht, nur ausgewählte Netzwerkkommunikation zuzulassen; und ist ein wichtiger Teil des Datenschutzes und der Datenintegrität. Häufig wird der Begriff „Firewall“ synonym zu einer einzelnen Schutzanwendung verwendet.


Wer schonmal mit Windows zu tun hatte, kennt sicherlich Personal Firewalls. Ein möglich buntes Programm ermöglicht es einem, einzelnen Programmen den Zugriff auf das Internet zu gewähren bzw. zu verweigern. Unter einem Mehrbenutzersystem wie Linux hingegen filtert eine Firewall in der Regel auf Paketebene. Pakete sind die kleinste Dateneinheit, die beim Netzwerkverkehr auf einmal versendet wird. In der Regel greift man unter Linux auf iptables zurück.
== Personal Firewall ==
Die evtl. von Windows bekannten ''Personal Firewalls'' ermöglichen es, entweder nur einzelnen Programmen Zugriff aufs Internet zu gewähren (so genanntes Whitelisting – nur bestimmten Programmen diesen zu verweigern nennt man Blacklisting). Vorteil einer Personal Firewall ist, dass sie oft sehr einfach zu installieren ist, und meist eine grafische Schnittstelle anbietet.


== Firewall zurücksetzen ==
Das größte Problem von Personal Firewalls ist, dass sie in Händen eines unversierten Nutzers oft dazu neigen, mehr Schaden als Nutzen anzurichten. Die ständigen Fragen, wenn ein Systemdienst oder ein Teil eines Programms (Updatefunktionen sind unter Windows oft in einer zweiten Programmdatei), werden lästig, und irgendwann erlaubt der genervte Nutzer jedem Programm Internetzugriff.
Der Aufbau neuer Regeln sollte immer damit beginnen, alle vorhandenen Regeln zu löschen (flush):


iptables -F
== Paketfilter ==
Unter Linux hingegen kommt meist eine ''Paketfilterfirewall'' zum Einsatz. Diese analysiert und filtert die Datenpakete der Netzwerkübertragung. Paketfilterfirewalls (üblicher weise wird [[iptables]] verwendet) fragt nicht nach. Sie arbeitet einen vorher definierten Regelsatz ab, und entscheidet so, ob Daten übermittelt werden, oder nicht.


== Standardverhalten festlegen ==
Statt dass dem Browser Zugriff auf das Internet gewährt wird, wird Zugriff auf den hierzu üblicher Weise verwendeten Port 80 zugelassen. Auf normalen Systemen reicht es allerdings, statt auch den ausgehenden Datenverkehr zu filtern, nur den am Rechner ankommenden Datenverkehr zu filtern.
Bei iptables Stellen alle Regeln Ausnahmen vom Standardverhalten ab. Dabei stellt man die Richtlinien OUTPUT, INPUT und FORWARD ein. Wie die Namen suggerieren, steht OUTPUT für alle ausgehenden Pakete, INPUT für alle eingehenden und FORWARD für alle Weitergeleiteten. Solange es sich nicht um eine Firewall oder einen Router handelt, sollte FORWARD auf das Verhalten DROP gesetzt werden, d.h. alle Pakete werden einfach „fallen gelassen“.


== Beispiel für ein Desktop–System ==
Auf einem gewöhnlichen Desktop–System laufen für gewöhnlich keine oder kaum Dienste, die über das Netzwerk erreichbar sein müssen.
Das folgende Beispiel–Skript erlaubt lediglich den Zugriff auf SSH und CUPS (Um über das Netzwerk zu drucken).
# Vorhandene Regeln löschen
for table in filter nat mangle
do
iptables -t $table -F
iptables -t $table -X
iptables -t $table -Z
done
# Standardverhalten: Nur ausgehend erlauben
iptables -P INPUT  DROP
iptables -P OUTPUT  ACCEPT
  iptables -P FORWARD DROP
  iptables -P FORWARD DROP


Eine einfache Firewall erlaubt allen Ausgehenden Datenverkehr:
Nun folgen die Regeln für eingehende Pakete. Loopback–Traffic und ICMP–Pakete werden generell durchgelassen. Außerdem müssen eingehende Pakete,
die zu einer bestehenden Verbindung gehören, erlaubt werden:


  iptables -P OUTPUT ACCEPT
# Loopback-Traffic erlauben
 
  iptables -A INPUT -i lo -j ACCEPT
Im Gegensatz dazu wird aller Eingehender Verkehr Blockiert, und nur, wenn benötigt, einzelne Ports geöffnet:
# ICMP-Pakete durchlassen
iptables -A INPUT -p icmp -j ACCEPT
# Eingehende Antworten auf bestehende Verbindungen erlauben
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT


  iptables -P INPUT DROP
Zuletzt erlauben wir Zugriff auf die TCP–Ports 22 (SSH) und 631 (CUPS/IPP):
# SSH: tcp/22
  iptables -A INPUT -p tcp --dport  22 -j ACCEPT


== Einzelne Ports öffnen ==
# CUPS/IPP: tcp/631
In vielen Fällen kann es hilfreich sein, auch auf Desktopmaschinen mit [[SSH]] zuzugreifen. Dafür muss der Port 22 für TCP geöffnet werden:
iptables -A INPUT -p tcp --dport 631 -j ACCEPT


iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Um diese Regeln bei jedem Systemstart automatisch zu aktivieren, müssen die Regeln nach <code>/etc/iptables/iptables.rules</code> exportiert werden und der Dienst <code>iptables.service</code> aktiviert werden:


Zudem ist es in heterogenen Netzwerken meist erwünscht, Datenverkehr zum [[Samba|Sambaserver]] zuzulassen:
iptables-save > /etc/iptables/iptables.rules
systemctl enable iptables.service


iptables -A INPUT -p tcp --dport 139 -j ACCEPT
== Siehe auch ==
iptables -A INPUT -p tcp --dport 445 -j ACCEPT
* [[iptables]] zur Konfiguration des Kerneleigenen ''Netfilter''s


== Alle Aufgebauten Verbindungen Durchwinken ==
== Weblinks ==
Damit nicht eingehender Verkehr, der als Antwort auf ausgehenden Verkehr erfolgte, blockiert wird, werden die entsprechenden Pakete anhand ihres Status durchgewinkt:
* [http://ulm.ccc.de/PersonalFirewalls/Angriffe Grundlagen zu Angriffen auf den PC vom Ulmener CCC] {{sprache|de}}
 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
== Lokalen Netzwerkverkehr zulassen ==
Viele Systemdienste verlassen sich darauf, dass sie über die Loopback–Schnittstelle kommunizieren können. Daher sollte jeglicher Datenverkehr über die Schnittstelle lo zugelassen werden:
 
iptables -A INPUT -i lo -j ACCEPT


[[Kategorie:Netzwerk]]
[[Kategorie:Netzwerk]]
[[Kategorie:Grundlagen]]
[[Kategorie:Sicherheit]]

Aktuelle Version vom 16. Juli 2016, 20:16 Uhr

Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!


Eine Firewall ist ein Sicherheitskonzept, das es ermöglicht, nur ausgewählte Netzwerkkommunikation zuzulassen; und ist ein wichtiger Teil des Datenschutzes und der Datenintegrität. Häufig wird der Begriff „Firewall“ synonym zu einer einzelnen Schutzanwendung verwendet.

Personal Firewall

Die evtl. von Windows bekannten Personal Firewalls ermöglichen es, entweder nur einzelnen Programmen Zugriff aufs Internet zu gewähren (so genanntes Whitelisting – nur bestimmten Programmen diesen zu verweigern nennt man Blacklisting). Vorteil einer Personal Firewall ist, dass sie oft sehr einfach zu installieren ist, und meist eine grafische Schnittstelle anbietet.

Das größte Problem von Personal Firewalls ist, dass sie in Händen eines unversierten Nutzers oft dazu neigen, mehr Schaden als Nutzen anzurichten. Die ständigen Fragen, wenn ein Systemdienst oder ein Teil eines Programms (Updatefunktionen sind unter Windows oft in einer zweiten Programmdatei), werden lästig, und irgendwann erlaubt der genervte Nutzer jedem Programm Internetzugriff.

Paketfilter

Unter Linux hingegen kommt meist eine Paketfilterfirewall zum Einsatz. Diese analysiert und filtert die Datenpakete der Netzwerkübertragung. Paketfilterfirewalls (üblicher weise wird iptables verwendet) fragt nicht nach. Sie arbeitet einen vorher definierten Regelsatz ab, und entscheidet so, ob Daten übermittelt werden, oder nicht.

Statt dass dem Browser Zugriff auf das Internet gewährt wird, wird Zugriff auf den hierzu üblicher Weise verwendeten Port 80 zugelassen. Auf normalen Systemen reicht es allerdings, statt auch den ausgehenden Datenverkehr zu filtern, nur den am Rechner ankommenden Datenverkehr zu filtern.

Beispiel für ein Desktop–System

Auf einem gewöhnlichen Desktop–System laufen für gewöhnlich keine oder kaum Dienste, die über das Netzwerk erreichbar sein müssen. Das folgende Beispiel–Skript erlaubt lediglich den Zugriff auf SSH und CUPS (Um über das Netzwerk zu drucken).

# Vorhandene Regeln löschen
for table in filter nat mangle
do
	iptables -t $table -F
	iptables -t $table -X
	iptables -t $table -Z
done

# Standardverhalten: Nur ausgehend erlauben
iptables -P INPUT   DROP
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD DROP

Nun folgen die Regeln für eingehende Pakete. Loopback–Traffic und ICMP–Pakete werden generell durchgelassen. Außerdem müssen eingehende Pakete, die zu einer bestehenden Verbindung gehören, erlaubt werden:

# Loopback-Traffic erlauben
iptables -A INPUT -i lo -j ACCEPT

# ICMP-Pakete durchlassen
iptables -A INPUT -p icmp -j ACCEPT

# Eingehende Antworten auf bestehende Verbindungen erlauben
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Zuletzt erlauben wir Zugriff auf die TCP–Ports 22 (SSH) und 631 (CUPS/IPP):

# SSH: tcp/22
iptables -A INPUT -p tcp --dport  22 -j ACCEPT
# CUPS/IPP: tcp/631
iptables -A INPUT -p tcp --dport 631 -j ACCEPT

Um diese Regeln bei jedem Systemstart automatisch zu aktivieren, müssen die Regeln nach /etc/iptables/iptables.rules exportiert werden und der Dienst iptables.service aktiviert werden:

iptables-save > /etc/iptables/iptables.rules
systemctl enable iptables.service

Siehe auch

  • iptables zur Konfiguration des Kerneleigenen Netfilters

Weblinks