Debian Server als Gateway einrichten

Statische IP-Adressen können teuer sein, vor allem im Cloud Computing. Will man ein Netzwerk an Server in der Cloud aufbauen ist es oft erforderlich, dass die einzelnen Server Internetzugriff haben. Zumindest um Aktualisierungspakete und Pakete für Installationen abrufen zu können. Hier eine kurze Anleitung, wie man einen Debian Server zu einer Art Internet-Gateway-Firewall machen kann, so dass dieser zwar ausgehende Internet-Verbindungen zulässt, aber eingehende Verbindungen blockiert.

Der Server, der als Gateway dienen soll, kann minimal ausgestattet sein, da dieser lediglich eine Routing-Funktion erfüllt. Außerdem braucht dieser 2 Netzwerk Interfaces (eins für die Verbindung zum Internet und eins für das lokale Netz in das beliebig viele lokale Maschinen eingebunden werden sollen).

Gehen wir davon aus, dass das Netzwerk-Interface eth0 die Verbindung zum Internet und eine entsprechende IP hat (z.B. 213.176.221.22). Das Netzwerk-Interface eth1 hat eine lokale IP (z.B. 10.10.10.11). Jetzt benötigen wir ein Skript, dass das Routing durchführt und zwar wiefolgt:

  • Alle eingehenden Verbindungsanfragen an eth0 verbieten
  • Alle ausgehenden Verbindungsanfragen an eth1 erlauben und weiterleiten auf eth0
  • Bestehende Verbindungen in beide Richtungen kommunizieren lassen (eine Anfrage nach draußen muss ja auch eine Antwort erhalten können)

Dazu erstellen wir im Ordner /etc/network/if-up.d/ ein Skript. Die Inhalte dieses Ordners werden beim Start in alphanumerischer Reihenfolge durchgeführt, deshalb sollte die Datei einen Namen haben, der sie ganz oben stehen lässt. Bsp.: 000gateway

nano /etc/network/if-up.d/000gateway

Danach muss in die Datei folgender Inhalt geschrieben werden:

#!/bin/sh

PATH=/usr/sbin:/sbin:/bin:/usr/bin

#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT


# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Masquerade.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

Damit die Datei beim Systemstart auch ausgeführt werden darf, benötigt sie execution Rechte. Das geht mit

chmod 755 /etc/network/if-up.d/000gateway

Jetzt den Server neustarten und mehr ist nicht zu tun. Alle Server die jetzt in das lokale LAN eingehängt werden (10.10.10.XXX) können als Gateway die IP-Adresse 10.10.10.11 erhalten und haben damit Internetzugriff.