Marco Burmeister

  private Homepage



Linux / openSUSE als Router unter Einsatz von firewalld zum Verbinden von zwei Netzen

In diesem Dokument soll es darum gehen, wie zwei Netze mittels eines Linux Systems (openSUSE 15.6) miteinander verbunden werden können.
Dabei soll das interne Netz auch von äußerem Netz geschützt werden.

Hinweis:
Mit dem Update des OS auf openSUSE 15.6 und der damit verbundenen Nutzung von firewalld in Version 2.0.1 hat sich etwas im Bereich IP Forwarding verändert, weshalb ich diese Anleitung geschrieben habe.




Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!

top Ausgangslage

Wir haben zwei unterschiedliche Netzwerke. Im Netzwerk A sind unsere internen Rechner untergebracht, die vom Netzwerk B geschützt werden sollen. Gleichzeitig sollen die Rechner aus dem Netzwerk A aber auch Ressourcen im Netzwerk B bzw. dem Internet erreichen.

Ich gehe in dieser Dokumentation von folgenden Voraussetzungen aus:
Netzwerk A hat die IP-Range 192.168.0.0 bis 192.168.0.255.
Netzwerk B wird durch eine Fritzbox gestellt und hat die Range 192.168.178.0 bis 192.168.178.255. Hierüber ist auch das Internet erreichbar.
Der Rechner hat eine Netzwerkkarte, die für das Netzwerk A und eine, die für das Netzwerk B konfiguriert ist.

Die Netzerkkarte eth0 ist für das Netzwerk A konfiguriert.
Die Netzerkkarte eth1 ist für das Netzwerk B konfiguriert.

top Kernel-Parameter einstellen

Damit das Forwarding von Netzwerk-Paketen funktioniert habe ich in der sysctl.conf einen entsprechenden Eintrag für IPv4 angelegt.
Als User root in der sysctl.conf eintragen:


 net.ipv4.ip_forward=1
    
Danach muss dann noch der folgende Befehl ausgeführt werden:

 sysctl -p
 		

top Lokales Netzwerk einrichten

Wer via yast arbeitet sollte sicherstellen, dass folgendes konfiguriert ist:

top Router

Für die eigentliche Funktion als Router ist nur die Konfiguration des FirewallD notwendig. Im OS selbst ist erstmal nichts zu konfigurieren.
Die Einstellungen, die im firewalld konfiguriert werden, sorgen dann für die Weiterleitung der Datenpakete und den Schutz des Rechners sowie des Netzes selbst.

top Firewall einrichten

Ich verwende firewalld. Diese Firewall lässt sich auch gut via Yast oder besser firewall-config verwalten. Das Tool firewall-config wird aus der Kommandozeile gestartet und benötigt einen XServer zur Darstellung.

Die Netzwerkkarten sind wie folg zugeordnet worden: eth0 ist der Firewall-Zone internal zugeordnet. eth1 ist der Firewall-Zone external zugeordnet.

In der Zone internal können alle Dienste freigegeben werden, die vom sicheren Netz auf diesem Rechner erreicht werden sollen. Vielleicht dient dieser Rechner ja auch noch als DNS-Server.
In der Zone external müssen keine Dienste freigegeben werden.

Ich brauche dann noch eine Weiterleitung der Datenpakete von eth0 zu eth1 und zurück. Folgende Befehle sind User root im Firewall-GUI Tool oder mit Kommandozeilenbefehl die Runtime-Konfiguration fest runtergeschrieben werden.


(Anmerkung: \ = Zeilenumbruch)

 firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 10 -o eth1 -j MASQUERADE
 firewall-cmd --direct --add-rule ipv4 filter FORWARD 10 -i eth0 -o eth1 -j ACCEPT
 firewall-cmd --direct --add-rule ipv4 filter FORWARD 10 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
		

 firewall-cmd --direct --add-rule ipv4 \
     nat POSTROUTING 10 -o eth1 -j MASQUERADE
 firewall-cmd --direct --add-rule ipv4 \
     filter FORWARD 10 -i wlan1 -o eth0 -j ACCEPT
 firewall-cmd --direct --add-rule ipv4 \
     filter FORWARD 10 -i wlan1 -o eth0 -m state \
     --state RELATED,ESTABLISHED -j ACCEPT
		



Update Juni 2024 wegen neuer Version von firewalld:
Mit der Version 2.0.1 die mir durch ein OS Update einspielt worden ist, sind die Einstellungen zu ergänzen, da nun die verschiedenen Zonen und die zugeordneten Netzwerk-Devices nun im Standard getrennt sind.

Ausgangslage ist, dass das Device eth0 zur Firewalld-Zone internal gehört und das Device eth1 zur Firewalld-Zone external.

Mit den folgenden Befehlen, kann der aktuelle Zustand ermittelt werden:

firewall-cmd --list-all-policies
firewall-cmd --direct --get-all-rules
firewall-cmd --list-all-zones
firewall-cmd --list-all --zone=internal
firewall-cmd --list-all --zone=external
  	


Nun passen wir die Regeln an.



(Anmerkung: \ = Zeilenumbruch)


Zunächst aktivieren wir das Forwarding zwischen den Zonen:
(MBU-fwd-internal ist der Name der Policy der frei gewählt werden kann - max. 18 Zeichen)

firewall-cmd --permanent --delete-policy=MBU-fwd-internal
firewall-cmd --permanent --new-policy=MBU-fwd-internal
firewall-cmd --permanent --policy=MBU-fwd-internal --add-ingress-zone=internal
firewall-cmd --permanent --policy=MBU-fwd-internal --add-egress-zone=external
firewall-cmd --permanent --policy=MBU-fwd-internal --set-target=ACCEPT
firewall-cmd --permanent --policy MBU-fwd-internal --add-masquerade

firewall-cmd --permanent --zone=external --add-masquerade 
		

firewall-cmd --permanent \
--delete-policy=MBU-fwd-internal firewall-cmd --permanent \
--new-policy=MBU-fwd-internal firewall-cmd --permanent \
--policy=MBU-fwd-internal --add-ingress-zone=internal firewall-cmd --permanent \
--policy=MBU-fwd-internal --add-egress-zone=external firewall-cmd --permanent \
--policy=MBU-fwd-internal --set-target=ACCEPT firewall-cmd --permanent \
--policy MBU-fwd-internal --add-masquerade firewall-cmd --permanent \
--zone=external --add-masquerade


Nun am besten den ganzen Rechner neu starten. Das Restarten der Dienste scheint nicht in allen Fällen alle alten Einstellungen sauber aufzuräumen.



top Links zum Thema

Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!