DS9/Setup: Unterschied zwischen den Versionen

Aus Freifunk Rheinland e.V.
Zur Navigation springen Zur Suche springen
(Basissystem)
 
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 12: Zeile 12:
# Installation vornehmen
# Installation vornehmen
# GRUB neu konfigurieren, um das Zielsystem zu starten
# 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 <tt>/etc/network.d/lan</tt>:
  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 [[Queen|Queens]] und eine für den Uplink zu einem Anonymisierungsdienst ([https://www.vpntunnel.com VPN Tunnel]).
Die Zertifikate habe ich per [https://wiki.archlinux.org/index.php/Create_a_Public_Key_Infrastructure_Using_the_easy-rsa_Scripts easy-rsa] erzeugt.
Im folgenden die Inhalte der Datei <tt>/etc/openvpn/ds9.conf</tt>
  # 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 <tt>/etc/openvpn/vpntunnel.conf</tt> 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 <tt>tunse</tt> 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 <tt>/etc/network.d/ds9</tt>:
  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 <tt>/etc/network.d/vpntunnel</tt>:
  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.

Aktuelle Version vom 15. Juli 2013, 11:53 Uhr

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.