Securing Internet Access on WRT via OpenVPN
Jump to navigation
Jump to search
Voraussetzungen
Es müssen auf den Endpunkten die openvpn-binaries inkl. aller Bibliotheken vorhanden sein (liblzo, libopenssl); TUN/TAP-Device muss auf dem System vorhanden sein (Kernel-Modul, Treiber)
CA und Zertifikate erstellen
CA Key + Cert-Req.
$ mkdir private $ openssl genrsa -out private/ca.key 2048 # RSA-CA-Key erstellen $ openssl req -new -x509 -days 3650 -key private/ca.key -out ca.cert -set_serial 1 # CA-Zertifikat erstellen (ca.cert)
Keys und Zertifikate für Server/Client
$ echo 01 > serial $ mkdir certs $ openssl req -new -newkey rsa:1024 -out certs/server.csr -nodes -keyout private/server.key -days 3650 # Cert-Request für Server $ openssl x509 -req -in certs/server.csr -out certs/server.cert -CA ca.cert -CAkey private/ca.key -CAserial serial -days 3650 # Cert aus Request $ openssl req -new -newkey rsa:1024 -out certs/client01.csr -nodes -keyout private/client01.key -days 3650 # Cert-Request für 1. Client $ openssl x509 -req -in certs/client01.csr -out certs/client01.cert -CA ca.cert -CAkey private/ca.key -CAserial serial -days 3650 # Cert aus Request
OpenVPN-Server-Konfiguration (/etc/openvpn/openvpn-server.conf)
# Zeilen-Kommentare koennen mit # oder ; eingeleitet werden.
# Dabei hat es sich durchgesetzt # für echte Kommentare zu verwenden und
# ; zum Ausschalten von nicht gewuenschten Konfigurations-Parametern.
cd /etc/openvpn # Setzt cwd des Prozesses (fuer relative Pfadangaben)
;local 192.168.x.y # Lauscht nur auf der angegebenen IP-Adresse, hier: alle Adressen
proto udp
port 1194
dev tun # Benutzt das naechste freie tun-Device, falls unterstuetzt
# (unter MacOSX muss man z.B. /dev/tun0 oder /dev/tun1, ... angeben)
# Angaben fuer die TLS-Verbindung (pkcs#12-Container oder 3 einzelne Dateien)
;pkcs12 server.p12 # pkcs#12-Datei sofern unterstuetzt (nicht unter OpenWrt!)
ca ca.cert # Alternativ: CA-Zert.
cert server.cert # Alternativ: Server-Zert.
key server.key # Alternativ: Server-Key
;crl-verify crl.pem # (optional) CRL-Liste mit gesperrten Zertifikaten
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
dh dh1024.pem
server 192.168.200.0 255.255.255.0 # IP-Subnetz fuer Tunnel-Enden (wird auf tun-Device gesetzt)
;duplicate-cn # Auskommentieren, wenn 1 Zert./Key-Paar fuer mehrere
# Clienten benutzt werden soll
keepalive 30 300 # Anpassung fuer "Hello"-Pakete, default: 10 120
# Zusaetzlicher DoS-Schutz
# Erzeuge preshared.key mit:
# openvpn --genkey --secret preshared.key
tls-auth preshared.key 0
comp-lzo # Komprimiere Pakete vor dem Verschluesseln
# Gebe root-Rechte auf UNIX-Systemen nach dem Erzeugen der TUN/TAP-Devices ab
user nobody group nobody persist-key persist-tun
verb 0 # Kein logging nach der Testphase
float # Ignoriere IP-Adress-Aenderungen des Clients
OpenVPN-Client-Konfiguration (/etc/openvpn/openvpn-client.conf)
cd /etc/openvpn # Setzt cwd des Prozesses (fuer relative Pfadangaben)
proto udp
remote 192.168.x.y 1194 # Legt VPN-Server fest (z.B. WLAN-IP-Adresse des Servers)
nobind # Kein Binden des Ports
resolv-retry infinite # Versuche immer weiter ein Verbindung herzustellen
dev tun # Benutzt das naechste freie tun-Device, falls unterstuetzt
# (unter MacOSX muss man z.B. /dev/tun0 oder /dev/tun1, ... angeben)
# Angaben fuer die TLS-Verbindung (pkcs#12-Container oder 3 einzelne Dateien)
;pkcs12 client01.p12 # pkcs#12-Datei sofern unterstuetzt (nicht unter OpenWrt!)
ca ca.cert # Alternativ: CA-Zert.
cert client01.cert # Alternativ: Server-Zert.
key client01.key # Alternativ: Server-Key
client # Client-Modus
keepalive 30 300 # Anpassung fuer "Hello"-Pakete, default: 10 120
# Braucht preshared.key vom Server
tls-auth preshared.key 1
comp-lzo # Komprimiere Pakete vor dem Verschluesseln
# Gebe root-Rechte auf UNIX-Systemen nach dem Erzeugen der TUN/TAP-Devices ab user nobody group nobody persist-key persist-tun
verb 0 # Kein logging nach der Testphase
redirect-gateway # - Setze default-Gateway auf anderes Tunnel-Ende
# - Erstelle Host-Route zum VPN-Server ueber ungesichertes Netz
OpenVPN starten
Debug-Modus
$ openvpn --conf /etc/openvpn/openvpn-(server|client).conf --verb 4
Regulaerer Betrieb
$ openvpn --conf /etc/openvpn/openvpn-(server|client).conf --daemon
iptables-Regeln setzen
Nachdem Pings durchkommen, Forwarding + MASQ. einrichten (tun0 = OpenVPN-Tunnel, ppp0 = DSL-Device):
$ echo 1 > /proc/sys/net/ipv4/ip_forward # Routing an $ iptables -A INPUT -p udp --dport 1194 -j ACCEPT # Eingehende VPN-Pakete erlauben $ iptables -A OUTPUT -p udp --sport 1194 -j ACCEPT # Ausgehende VPN-Pakete erlauben $ iptables -A FORWARD -i tun0 -o ppp0 -j ACCEPT # Pakete weiterleiten $ iptables -A FORWARD -o tun0 -i ppp0 -j ACCEPT $ iptables -t nat -A POSTROUTING -i tun0 -o ppp0 -j MASQUERADE # Pakete ins Internet maskieren