Login
Newsletter
Werbung

Do, 16. Februar 2017, 15:00

DSL-Modem im Bridging-Modus betreiben

Von wogri

Routing

Das IPForward=yes in der systemd-networkd-Konfiguration erledigt das Setzen der bekannten ip_forwarding-Parameter, somit sollte ein manuelles Bearbeiten von sysctl.conf nicht notwendig sein.

Die Maschine sollte von nun an mit dem Internet verbunden sein. Was hier aber noch fehlt, ist das Masquerading. Da das interne Netzwerk mit privaten IP-Adressen betrieben wird, ist es notwendig, die private Quell-IP-Adresse der nach außen gerichteten Pakete zu verändern. Unter Linux wird diese Technik Masquerading genannt. Da dieses Tutorial neue Technologien verwendet, werde ich zuerst auf die Masquerading-Konfiguration von nftables eingehen, danach auch kurz iptables aufzeigen.

Firewall

Ziel dieses Tutorials ist es, die Angriffsfläche aufs Heimnetzwerk zu verkleinern. Daher konfigurieren wir eine Firewall, die per Default von außen keine Verbindungen erlaubt. Ich empfehle StrongSwan + IKEv2, sollte jemand das Bedürfnis haben, von außen auf sein Heimnetzwerk zugreifen zu wollen.

nftables

NFTables ist die geplante Ablöse von IPTables. NFTables befindet sich bereits im Linux-Kernel seit Version 3.13. Ein schönes Tutorial über nftables hat Martin Loschwitz im Linux-Magazin geschrieben. Mein Fazit zu nftables ist, dass es bereits ganz gut verwendbar ist, jedoch noch ein paar Features fehlen, bzw. teilweise die Syntax für mich nicht ganz verständlich ist. Fehlende Features für meine Anwendungsfälle sind:

  • mangelnde IPSec-Integration
  • teilweise inkonsistente Syntax der nft-Befehlszeile.
  • Spezial-Features wie MSS Clamping (mehr dazu später) sind noch nicht verfügbar.

Ich gehe davon aus, dass diese Probleme mit der Zeit gelöst werden.

Nun zur Installation: Das Userspace-Tool ist in Debian Jessie nur aus den Backports zu beziehen:

apt-get -t jessie-backports install "nftables"

Nftables kann man wie iptables mit einzelnen Befehlen betreiben oder aber über eine Datei, die atomar in den Kernel geladen (oder geändert) wird. Ich bevorzuge, eine Datei zu pflegen, die atomar in den Kernel geladen wird, ähnlich zum pf-System unter BSD. Eine weitere Eigenheit von nftables NAT ist, dass iptables NAT nicht geladen sein darf. Daher ist es erforderlich, das iptabes NAT-Modul zu entladen:

rmmod iptables_nat

Hier sieht man ein einfaches Beispiel, das nur ein Masquerading mit nftables macht und sinnvolle Chains für die weitere Verwendung angelegt hat:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0;
    iifname lo accept
    iifname lan accept
    iifname ppp0 jump input_ppp0
    drop
  }
  chain input_ppp0 { # rules applicable to public interface
    ct state {established,related} counter accept
    ct state invalid counter drop
    log
    drop
  }
  chain ouput {
    type filter hook output priority 0;
    accept
  }
  chain forward {
    type filter hook forward priority 0;
    iifname ppp0 counter jump from_internet
    accept
  }
  chain from_internet {
    ct state {established,related} counter accept
    ct state invalid counter drop
    drop
  }
}

table ip nat {
  chain prerouting {
    type nat hook prerouting priority 0;
  }
  chain postrouting {
    type nat hook postrouting priority 0;
    oifname ppp0 counter masquerade
  }
}

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung