Securing Internet Access on WRT via OpenVPN: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 12: | Line 12: | ||
$ mkdir certs |
$ mkdir certs |
||
$ openssl req -new -newkey rsa:1024 -out certs/server.csr -nodes -keyout private/server.key -days 3650 |
$ 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 |
$ 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) = |
= OpenVPN-Server-Konfiguration (/etc/openvpn/openvpn-server.conf) = |
||
# Zeilen-Kommentare koennen mit # oder ; eingeleitet werden. |
# Zeilen-Kommentare koennen mit # oder ; eingeleitet werden. |
||
# Dabei hat es sich durchgesetzt # für echte Kommentare zu verwenden und |
# 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) |
cd /etc/openvpn # Setzt cwd des Prozesses (fuer relative Pfadangaben) |
||
Line 42: | Line 49: | ||
server 192.168.200.0 255.255.255.0 # IP-Subnetz fuer Tunnel-Enden (wird auf tun-Device gesetzt) |
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 |
;duplicate-cn # Auskommentieren, wenn 1 Zert./Key-Paar fuer mehrere |
||
# Clienten benutzt werden soll |
# Clienten benutzt werden soll |
||
keepalive 30 300 # Anpassung fuer "Hello"-Pakete, default: 10 120 |
keepalive 30 300 # Anpassung fuer "Hello"-Pakete, default: 10 120 |
||
Line 53: | Line 60: | ||
comp-lzo # Komprimiere Pakete vor dem Verschluesseln |
comp-lzo # Komprimiere Pakete vor dem Verschluesseln |
||
# Gebe root-Rechte auf UNIX-Systemen nach dem Erzeugen der TUN/TAP-Devices ab |
# 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 |
verb 0 # Kein logging nach der Testphase |
||
Line 107: | Line 115: | ||
$ iptables -A OUTPUT -p udp --sport 1194 -j ACCEPT # Ausgehende 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 -i tun0 -o ppp0 -j ACCEPT # Pakete weiterleiten |
||
$ iptables -A FORWARD -o tun0 -i ppp0 -j ACCEPT |
$ iptables -A FORWARD -o tun0 -i ppp0 -j ACCEPT |
||
$ iptables -t nat -A POSTROUTING -i tun0 -o ppp0 -j MASQUERADE # Pakete ins Internet maskieren |
Latest revision as of 14:35, 12 March 2007
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