Firewallkonfiguration#
Warnung
Die folgenden Optionen und Anleitungen können nur per Root-Zugang direkt an dem Server bzw. per SSH-Zugang vorgenommen werden. Bedenken Sie das es bei der Änderung an der Firewallkonfiguration zu Verbindungsabbrüchen kommen kann und Sie dann eventuell keinen Zugriff mehr auf den Server haben bzw. direkt an den Server kommen müssen um ihn wieder erreichbar zu machen.
Einführung#
IServ nutzt ferm zur Verwaltung der Firewall. ferm wiederum implementiert eine eigene Sprache, die strukturierten Programmiersprachen ähnlich ist. Sie kann z.B. verschiedene Ebenen (Blöcke) und Listen enthalten. Wenn Sie sich mit klassischen iptables-Befehlen auskennen, dann werden Sie einige Elemente direkt wiedererkennen, da iptables-Befehle auch weiterhin im Hintergrund genutzt werden. ferm ist vornehmlich ein Werkzeug um das Schreiben von Firewallregeln einfacher zu gestalten.
Die Integrität der Firewall, also die Existenz aller notwendigen Regeln, wird bei jedem iservchk mit Hilfe von /usr/lib/iserv/firewallstatus überprüft. Administratoren werden so über Änderungen an der Konfiguration informiert.
Die Konfigurationsdateien finden Sie unter /etc/ferm.d mit folgender Struktur:
20iserv.conf
80local.conf
99defaults.conf
Die Datei 20iserv.conf wird von durch die IServ GmbH verwaltete Pakete verwendet. Sie können an der Datei Änderungen vornehmen und mit Hilfe von iconf save 20iserv.conf speichern, aber wir raten dringend von dieser Möglichkeit ab, außer wenn es absolut notwendig ist, da Sie beispielsweise Regeln entfernen möchten. Stattdessen bearbeiten Sie die Datei 80local.conf und speichern Ihre Änderungen mit iconf save 80local.conf. Stellen Sie sicher, dass Sie Ihre Anpassungen unterhalb der Beispielkonfiguration ablegen, so dass zukünftige Anpassungen an diesem Beispiel nicht im Konflikt mit Ihren lokalen Änderungen stehen. Als Paketentwickler erstellen Sie Ihre eigene Konfigurationsdatei unter /etc/ferm.d. Stellen Sie sicher, dass diese zusammen mit Ihrem Paket deinstalliert wird.
Ferm Funktionen#
Zur Vereinfachung stellt IServ Funktionen für häufig benötigte Anpassungen zur Verfügung. Diese stellen sicher, dass Ihre Anpassungen auch in der Zukunft mit IServ kompatibel bleiben, da die Funktionsdefinitionen stetig durch IServ angepasst werden können. Eine Oberfläche zur einfacheren Konfiguration der Firewall ist ebenfalls geplant.
Hier finden Sie einige Beispiele, wie diese Funktionen genutzt werden können:
/etc/ferm.d/80local.conf
# [...]
# &openPort(<Protokoll(-e)>, <Port(-s)>, <nurLAN>)
# Öffnet den TCP Port 8080 für Rechner aus dem IServ LAN
# für IPv4 und IPv6 Verbindungen
domain (ip ip6) &openPort(tcp, 8080, 1);
# Öffnet TCP und UDP Port 8080 für alle Rechner
# für IPv4 und IPv6 Verbindungen
domain (ip ip6) &openPort((tcp udp), 8080, 0);
# Wie oben, aber nur für IPv4 Verbindungen
domain (ip) &openPort((tcp udp), 8080, 0);
# &forwardPort(<Protokoll(-e)>, <lokalerPort>, <Zieladresse>, <Zielport>)
# Leitet den TCP Port 8080 an 10.0.0.3:80 und [2001:db8::a3]:80 weiter.
# Bitte beachten Sie, dass IPv4 und IPv6 getrennt behandelt werden müssen.
domain (ip ip6) {
&forwardPort4(tcp, 8080, 10.0.0.3, 80);
&forwardPort6(tcp, 8080, 2001:db8::1, 80);
}
# &whitelistHost(<HostIp>, <ProxyUmgehen>)
# Whitelistet 1.1.1.1 und 2001:db8::2, sodass sie auch dann erreichbar
# sind, wenn der Internet Zugriff gesperrt ist.
# Häufig verwendet für Update-Server.
# Bitte beachten Sie, dass der Proxy Server Squid seperat konfiguriert
# werden muss.
domain (ip ip6) &whitelistHost((1.1.1.1 fe80::), 1);
# Fortgeschrittene Anwender
# &bidirectional(<addr1>, <addr2>)
# Erlaubt die Kommunikation von 192.168.0.0/24 und 10.0.0.0/24 in beiden Richtungen.
domain (ip) table filter chain forward_white ACCEPT &bidirectional(192.168.0.0/24, 10.0.0.0/24);
# &unidirectional(<addr1>, <addr2>)
# Erlaubt die Kommunikation von 192.168.0.0/24 nach 10.0.0.0/24 und Antworten auf
# entsprechende Anfragen.
domain (ip) table filter chain forward_white ACCEPT &unidirectional(192.168.0.0/24, 10.0.0.0/24);
Übersicht der iptables-Ketten#
Um die Tabelle übersichtlich zu halten sind Ketten, die von IServ selbst nicht genutzt werden, nicht aufgeführt. Ketten mit Namen in GROSSBUCHSTABEN sind von iptables selbst definierte Ketten. Bitte schlagen Sie diese bei Bedarf in der iptables Dokumentation nach, wenn Sie weitere Informationen benötigen.
Tabelle |
Kette |
Sub-Kette |
Zweck |
---|---|---|---|
filter |
Standard iptables-Tabelle zur Filterung von eingehendem und ausgehendem Paketen. |
||
INPUT |
Verarbeitet eingehende Pakete. |
||
input_first |
Ankerpunkt für Regeln, die vor den Regeln der restlichen IServ Pakete verarbeitet werden müssen. |
||
└exam_input |
[iserv-exam] Verhindert den Zugriff auf das Netzwerk für Rechner im Klausurmodus. |
||
input_lan |
Verarbeitet eingehende Pakete aus dem LAN. |
||
input_world |
Verarbeitet eingehende Pakete aus dem Internet. |
||
FORWARD |
Verarbeitet eingehende Pakete für andere Geräte (z.B. Desktop Computer im IServ LAN). |
||
forward_first |
Ankerpunkt für Regeln, die vor den Regeln der restlichen IServ Pakete verarbeitet werden müssen. |
||
forward_white |
Ankerpunkt für Ausnahmen für die Internetsperre. Rechner die hier aufgeführt werden sind auch dann erreichbar, wenn der Internetzugriff für den Benutzer oder das Gerät eigentlich gesperrt ist. Wird üblicherweise für Update-Server verwendet. |
||
check_mac |
Überprüft ob IP und MAC-Adresse zusammenpassen, um IP-Spoofing zu verhindern. |
||
inet_in |
Verarbeitet eingehende Pakete aus dem Internet für Geräte im IServ LAN. |
||
inet_out |
Verarbeitet ausgehende Pakete aus dem IServ LAN für Zieladressen im Internet. |
||
└activation_out |
Schränkt den Internetzugriff auf Geräte und Benutzer ein, die auf das Internet zugreifen dürfen. |
||
docker_internal |
[iserv-server-docker] Verarbeitet Verbindungen zwischen Docker-Containern. |
||
docker_in |
[iserv-server-docker] Verarbeitet eingehende Pakete für Docker-Container. |
||
docker_out |
[iserv-server-docker] Verarbeitet ausgehende Pakete von Docker-Containern. |
||
nat |
Implementiert Network Address Translation (NAT) Regeln. Sowohl SNAT (MASQUERADE), für ausgehende Verbindungen, als auch DNAT (oft als Port Weiterleitung bezeichnet) findet hier statt. |
||
PREROUTING |
Verarbeitet Pakete bevor eine Routing-Entscheidung getroffen wurde. |
||
prerouting_first |
Ankerpunkt für Regeln, die vor den Regeln der restlichen IServ Pakete verarbeitet werden müssen. |
||
forward_proxy |
Entscheidet welche Pakete abgefangen und an Squid (HTTP Proxy) weitergeleitet werden sollen. |
||
└forward_direct |
Ausnahmen für das Abfangen und die Weiterleitung an Squid. |
||
dnat |
Port Weiterleitungen. |
||
POSTROUTING |
Verarbeitet Pakete nachdem eine Routing-Entscheidung getroffen wurde. |
||
OUTPUT |
NAT-Regeln für lokal erzeugte Pakete (z.B. Weiterleitung von IMAP und SIEVE an andere Ports, um den Login ohne Verschlüsselung lokal zu erlauben). |
||
mangle |
Wird verwendet um IP-Paket Header zu bearbeiten und Verbindungen zu makieren. |
||
PREROUTING |
Verarbeitet Pakete bevor eine Routing-Entscheidung getroffen wurde. |
||
raw |
Verhindert, dass Pakete andere Tabellen durchlaufen. I.d.R. aus Performance-Grüden. |
||
PREROUTING |
Verarbeitet Pakete bevor eine Routing-Entscheidung getroffen wurde. |
||
raw_lo |
Verhindert, dass lokale Verbindungen durch die Firewall geleitet werden. Fügt Ausnahmen für lokale Verbindungen hinzu, die verfolgt werden müssen. |
||
OUTPUT |
Verarbeitet lokal erzeugte ausgehende Pakete. |
||
raw_lo |
Siehe oben. |