Debian als Router einrichten. Schritt für Schritt Anleitung
Vorab
In vielen Netzwerkprojekten setze ich auf OpnSense als mein Gateway und Firewall Lösung. Dennoch habe ich aktuell ein Projekt, wo es weniger um ein Netzwerk geht sondern einen All-In-One Server. Dabei soll ein Active Directory aufgespannt werden, sowie auch ein Mail-Server mit LDAPS Anbindung. Hierfür ist nun auch die Überlegung, diesen Server mit als Gateway zu nutzen.
Aufbau
Der Server wurde mit der Debian-Net-Install aufgesetzt und verfügt über die Standard-Pakete. Auf zwei physischen Interfaces wird ein WAN und ein LAN realisiert.
Das WAN steht hierbei auf DHCP und erhält von einer Fritzbox, welche als Modem genutzt wird, seine IP Adresse. Auf der Fritzbox werden dann die Ports für den Mail-Server freigegeben.
Das LAN besteht aus einem nativen Management Netzwerk mit dem IP Bereich 172.0.0.1/24 und verfügt über zwei VLANs.
Das erste VLAN ist über die Endnutzer als Access-Netzwerk gedacht und hat die VLAN-ID 10 und den IP Bereich 10.10.0.1/16.
Das zweite VLAN ist für alle IoT Geräte angedacht und stellt so eine Trennung zwischen den Netzwerken her. Dieses VLAN erhält die VLAN ID 20 und den IP-Bereich 10.20.0.1/16.
Um den Server und die Netzwerke abzusichern wird in Debian UFW aktiviert und dient als einfache Firewall.
Netzwerke anlegen & konfigurieren
Zunächst müssen die Netzwerke unter Debian angelegt werden. Ebenso werden auch gleich die VLANs vorbereitet. Damit VLANs unter Debian genutzt werden kann muss zunächst das Paket installiert werden:
apt install vlanIm weiteren aktiviert man das Modul für den VLAN Standard:
echo 8021q >> /etc/modulesInterfaces konfigurieren
In der Datei /etc/network/interfaces werden alle Konfigurationen für die Netzwerke vorgenommen. Dafür kann die Datei mittels nano geöffnet und bearbeitet werden.
In der Datei werden zunächst das WAN und das LAN Interface angelegt.
#WAN GATEWAY DHCP
auto eth0
iface eth0 inet dhcp
#NATIVES MGMT LAN
auto eth1
iface eth1 inet static
address 172.0.0.1/24
network 172.0.0.0
broadcast 172.0.0.255Mit dieser Konfiguration sind aber noch nicht die VLANs angelegt und an das Parent Interface eth1 gebunden. Dafür wird die Datei um die VLANs erweitert.
#VLAN 10 ACCESS Netzwerk
auto eth1.10
iface eth1.10 inet static
address 10.10.0.1/16
network 10.10.0.0
broadcast 10.10.255.255
vlan-raw-device eth1
#VLAN 20 IoT netzwerk
auto eth1.20
iface eth1.20 inet static
address 10.20.0.1/16
network 10.20.0.0
boradcast 10.20.255.255
vlan-raw-device eth1Damit diese Konfiguration auch wirksam wird, muss der Dienst Networking neu gestartet werden
systemctl restart networkingÜber den Befehl ip a kann die Netzwerk Konfiguration über die Konsole angezeigt werden.
/etc/network/interfaces folgende Zeile eingefügt werden: source /etc/network/interfaces.d/*. Dann kann in dem Verzeichnis für jedes Interface eine Datei abgelegt werden, welche dann die Konfiguration des jeweiligen Netzwerkes beinhaltet.IP Forwarding & NAT
Nun sind die Netzwerke angelegt und können auch erreicht werden über das LAN Netzwerk, dennoch können aus den Netzwerken die Geräte nicht auf das Internet zugreifen. Damit aber die Geräte auch ins Internet kommen, muss das IP Forwarding aktiviert werden und eine NAT Regel gesetzt werden die den Trafik umgewandelt. Dafür installiere ich zunächst die statischen IP-Tables Pakete:
apt install iptables-persistentNun erkläre ich Debian, dass IP Forwarding erlaubt ist:
sysctl -w net.ipv4.ip_forward=1Damit ich nun die NAT Regel anlegen kann öffne ich wie gewohnt mit nano die Datei /etc/iptables/rules.v4 und schreibe eine Masquerade Regel für das WAN Interfaces rein.
*nat
-A POSTROUTING -o eth0 -j MASQUERADE
COMMITDamit diese Regel auch nach einem Neustart immer noch greift, muss ich die Regel speichern. Dies erfolgt mit folgenden Befehl:
iptables-restore < /etc/iptables/rules.v4Nun ist es soweit, dass alle Netzwerke Ihren Trafik auch zum WAN Netzwerk weiterleiten können.
DHCP auf den einzelnen Interfaces einrichten
DHCP ist eine Komfort Funktion für jeden Administrator und erspart das lästige vergeben von IPv4 Adressen. Durch den Dienst DNSmasq wird der DHCP für das native MGMT LAN und den zwei VLANs aufgespannt. Dafür wird das Paket zunächst über die Konsole installiert.
apt install dnsmasqDie Konfiguration für DNSmasq wird in der Datei /etc/dnsmasq.conf vorgenommen. Dafür öffnet man die Datei mit nano und erstellt für jedes Interface die Konfiguration.
#LAN MGMT NETZWERK
interface=eth1
listen-address=127.0.0.1
domain=mgmt.local.lan #Die Domain kann Freigewählt werden
dhcp-range=172.0.0.10,172.0.0.250,12h #Start, Ende, Leasetime
#VLAN 10 ACCESS Netzwerk
interface=eth1.10
listen-address=127.0.0.1
domain=intern.local.lan
dhcp-range=10.10.0.200,10.10.250.254,12h
#VLAN 20 IoT Netzwerk
interface=eth1.20
listen-address=127.0.0.1
domain=iot.local.lan
dhcp-range=10.20.0.200,10.20.250.254,12hDer dnsmasq Dienst muss nun neu gestartet werden und ab diesen Zeitpunkt werden die Ipv4 Adressen über den Server vergeben.
systemctl restart dnsmasqDNS Overwrites mit DNSmasq
Damit ich nun auch eigene Hostnames oder FQDNs vergeben kann brauche ich die Möglichkeit DNS Overwrites anzulegen. Dafür editiere ich wieder die /etc/dnsmasq.conf Datei und füge direkt am Anfang folgende Zeile ein. Damit wird definiert in welcher Datei die DNS Overwrites stehen.
addn-hosts=/etc/dnsmasq.overwritesIn der Datei kann ich dann die IPv4 und den FQDN eintragen. So wird dann die lokale IPv4 Adresse bei einer Namensauflösung übergeben.
10.20.18.151 test.example.comSobald ich den Dienst neu gestartet habe, kann ich einen Ping auf den FQDN setzen und erhalte die interne IPv4 Adresse zurück.
Statische DHCP Leases vergeben
Um statische DHCP Leases zu vergeben muss in die Konfigurationsdatei von DNSmasq die Datei für die statischen Adressen hinterlegt werden. Dafür fügt man unterhalb der addn-hosts Zeile folgende Zeile in die Datei /etc/dnsmasq.conf ein.
dhcp-hostsfile=/etc/dnsmasq.hosts
In der Datei /etc/dnsmasq.hosts werden dann die MAC und die reservierte IPv4 Adresse eingetragen.
BC:24:11:C5:EA:AC,10.20.250.1Die Netzwerke absichern mit UFW
UFW ist nicht Standardmäßig installiert, daher muss auch dieses Paket erst installiert werden.
apt install ufwDanach erstellt man eine deny:deny Regel für eingehenden Anfragen. So kann später ein Whitelisting erstellt werden, wer zu welchen Host kommt.
ufw default deny incomingDanach wird der Trafik der Outgoing ist freigegeben.
ufw default allow outgoingDamit nun auch über DHCP Adressen vergeben werden und DNS Anfragen gestellt werden können, müssen der DHCP Port 67/UDP und der DNS Port 53/UDP freigegeben werden.
ufw allow 67/udp
ufw allow 53/udpLeider können die Clients aus dem VLANs nicht auf das Internet zugreifen, da die route von UFW blockiert wird. Dafür muss also für jedes Interface eine Regel angelegt werden. Diese Regel besagt, dass jeglicher Trafik über das WAN Interface geroutet werden darf.
ufw route allow in on eth1.10 out on eth0
ufw route allow in on eth1.20 out on eth0Dennoch ist es immer noch möglich zwischen den VLANs zu pingen. Das muss noch unterbunden werden, da die Firewall nur über Whitelisting funktionieren soll. In den Before Rules von UFW wird der Forward von ICMP explizit erlaubt. Daher muss dieser in der Datei /etc/ufw/before.rules auskommentiert werden.
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPTNach dem Auskommentieren sollte es so aussehen:
# ok icmp codes for INPUT
#-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# ok icmp code for FORWARD
#-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
#-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
#-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
#-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
Das könnte dich interessieren!