DS9/Setup

Aus Freifunk Rheinland e.V.
Zur Navigation springen Zur Suche springen

Installation DS9: Gedächtnisprotokoll von nomaster.

Basissystem

Hetzner stellt keine vServer mit vorinstalliertem Arch Linux zur Verfügung. Die Installation klappte jedoch über einen Umweg.

  1. Rescue System booten
  2. Festplatte partitionieren
  3. Das Arch-Linux-ISO auf eine Partition kopieren
  4. GRUB installieren und für das Booten des ISO konfigurieren
  5. Von der Festplatte neu starten
  6. Installation vornehmen
  7. GRUB neu konfigurieren, um das Zielsystem zu starten

Dienste

  • Cronie (vorinstalliert)
  • NTP
  • OpenSSH
  • Haveged
  • OpenVPN
 pacman -S ntp openssh haveged openvpn
 systemctl enable ntpd.service sshd.service haveged.service

Netzwerk

Für die Konfiguration der Netzwerkschnittstellen (Interfaces) habe ich netcfg verwendet. Für das reguläre Interface des Servers folgende Konfiguration in /etc/network.d/lan:

 CONNECTION='ethernet'
 DESCRIPTION='LAN via DHCP'
 INTERFACE='eth0'
 IP='dhcp'

OpenVPN

Das Paket openvpn installieren, Zertifikate einrichten und zwei Konfigurationen anlegen: eine für Verbindungen durch Queens und eine für den Uplink zu einem Anonymisierungsdienst (VPN Tunnel).

Die Zertifikate habe ich per easy-rsa erzeugt.

Im folgenden die Inhalte der Datei /etc/openvpn/ds9.conf

 # Authentifiziere per PAM  
 plugin /usr/lib/openvpn/openvpn-auth-pam.so system-auth
 username-as-common-name
 
 # Erzeuge Tunnel-Interface
 dev tunff
 
 # Finde Zertifikate und Schlüssel
 ca /etc/openvpn/ds9.ca 
 cert /etc/openvpn/ds9.crt
 client-cert-not-required
 dh /etc/openvpn/dh1024.pem
 key /etc/openvpn/ds9.key
 duplicate-cn
 tls-server
 
 # Setze Kompression per LZO voraus
 comp-lzo
 
 # Erhalte Verbindung aufrecht
 keepalive 10 120
 
 # Behalte Schlüssel im Speicher
 persist-key
 
 # Halte Tunnel-Interface offen
 persist-tun
 
 # Passe Paketgrößen automatisch an
 mssfix
 
 # Verteile IP-Adressen aus unserem Subnetz
 server 172.22.133.0 255.255.255.0
 
 # Teile den Clients mit, ihren Traffic über uns zu routen
 push "redirect-gateway def1"

Für den Uplink über eine weitere VPN-Verbindung habe ich folgende Konfiguration in /etc/openvpn/vpntunnel.conf verwendet:

 ; Gehe in den Client-Modus
 client
 
 ; Erzeuge Tunnel-Interface
 dev tunse
 
 ; Hole keine Routen vom Server
 route-nopull
 
 ; Verwende UDP-Protokoll
 proto udp
 
 ; Setze Vorgaben des Providers
 float
 nobind
 
 ; Finde Zertifikate
 ca /etc/openvpn/vpntunnel.crt 
 ns-cert-type server
 cipher BF-CBC
 
 ; Verbinde zu einem zufällig gewählten Server
 remote-random
 remote anna.vpntunnel.se 10010
 remote anna.vpntunnel.se 10020
 remote anna.vpntunnel.se 1194
 
 ; Versuche unendlich lang dich zu verbinden
 resolv-retry infinite
 
 ; Lies Benutzernamen und Passwort aus Datei
 auth-user-pass /etc/openvpn/vpntunnel.txt
 
 ; Behalte Schlüssel im Speicher
 persist-key
 
 ; Halte Tunnel-Interface offen
 persist-tun
 
 ; Setze Kompression voraus
 comp-lzo

Routing

Der Server soll allen Traffic, der durch das Queen-Interface (tunff) eingeht und unser Freifunk-Subnetz verlassen soll, durch den Uplink-Tunnel (tunse) routen.

Dazu habe ich eine Regel zum Routen über eine eigene Tabelle konfiguriert:

 ip rule add from 172.22.0.0/16 table freifunk

… und in dieser Tabelle eine Default-Route über tunse eingetragen:

 ip route replace default dev tunse table freifunk

Anschließend habe ich das Routing und NAT aktiviert:

 /proc/sys/net/ipv4/ip_forward
 iptables -t nat -A POSTROUTING -o tunse -j MASQUERADE

… und per Firewall-Konfiguration gesichert:

 iptables -P FORWARD DROP
 iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
 iptables -A FORWARD -o tunse -j ACCEPT
 iptables -A FORWARD -j REJECT

Persistenz

Damit die Konfiguration der OpenVPN-Verbindungen, das Routing und die Firewall-Regeln beim Booten übernommen werden, habe ich folgende Schritte durchgeführt.

netcfg-Konfiguration in /etc/network.d/ds9:

 CONNECTION="openvpn"
 INTERFACE="ignore"
 OVPN_CONFIG="/etc/openvpn/ds9.conf"
 OVPN_PID_FILE="/tmp/openvpn.ds9.pid"
 OVPN_FLAGS=""
 POST_UP="ip rule add from 172.22.0.0/16 table freifunk"

Dienst aktivieren:

 systemctl enable netcfg@ds9.service

netcfg-Konfiguration in /etc/network.d/vpntunnel:

 CONNECTION="openvpn"
 INTERFACE="ignore2"
 OVPN_CONFIG="/etc/openvpn/vpntunnel.conf"
 OVPN_PID_FILE="/tmp/openvpn.vpntunnel.pid"
 OVPN_FLAGS=""
 # Fünf Sekunden warten, bis das (Interface) hoffentlich erschienen ist
 POST_UP="sleep 5; ip route replace default dev tunse table freifunk"

Dienst aktivieren:

 systemctl enable netcfg@vpntunnel.service

Die Firewall-Konfiguration in eine Datei schreiben und beim Booten laden:

 iptables-save > /etc/iptables/iptables.rules
 systemctl enable iptables.service

Benutzerkonten

Für die Authentifizierung habe ich vorerst PAM verwendet.

Die Benutzer habe ich ohne Shell und ohne Home-Verzeichnis angelegt und Passwörter vergeben:

 useradd -s /bin/false -d / [Benutzername]
 passwd [Benutzername]

Zum Anlegen weiterer Konten gibt es ein Skript (für den Vereinsvorstand):

 adduser [Benutzername]

Das Passwort wird generiert und angezeigt.