Vídím, že je tohle vlákno sice vedeno jako vyřešeno, ale s čím jsem se dnes potácel se toho týkalo, tak to sem ještě všechno postnu.
Zde je funkční konfigurace openvpn serveru, který operuje na třetí vrstvě OSI modelu:
Nepopisuju zde jak generovat certifikáty, to si každý načte na openvpn.net v dokumentaci, jestli jen statické klíče viz starší příspěvek, nebo certifikáty, každého věc.
Než začnu cokoli dělat vyresetuju si firewall:
#!/bin/bash
echo "Mažu všechny iptables pravidla..."
sleep 1
# reset firewalu
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -Z
iptables -X
# tabulka nat
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
# tabulka mangle
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
for table in filter nat mangle; do
iptables -t $table -F
iptables -t $table -X
iptables -t $table -Z
done
Tento skript lze vhodně rozšířit ověřenými pravidly, které firewall zase nastaví a hodit celý skript do cronu, spuštět třeba jednou za hodinu, nebo častěji, není to žádná náročná činnost. Když se při pokusech na vzdáleném systému něco při nastavovaní iptables zesere

, tak se to ve zvoleném intevalu zase přenastaví.
Kofigurace serveru:
# typ zařízení - routování, layer 3 ip pakety, v případě, že chcete rozchodit vpn server pro
# hraní her a využívání windows sharů přes jména, doporučuje se přemostění,
# resp. dev tap.
dev tun
# defaultní protokol
proto udp
# vpn server subnet
server 10.79.1.0 255.255.255.0
# statické přiřazování adres podle hostname
# formát "HOSTNAME, xxx.xxx.xxx.xxx", jeden řádek, jeden záznam
ifconfig-pool-persist ipp.txt
# certifikát certifikační autority
ca ca.crt
# certifikát serveru
cert server.crt
# klíč serveru
key server.key
# Diffie-Hellman pro zabezpečené vyjednávání SSL nebo TLS
# soubor je identický na serveru i klientovi
dh dh1024.pem
# řekne klientovi, aby vytvořil routu do subnetu vpn
# lze konfigurovat i na klientovi
push "route 10.79.1.0 255.255.255.0"
# řekne klientovi, aby přesměroval veškerý síťový provoz na vpn server
# lze konfigurovat i na klientovi, lze tak některé klienty nastavit, aby do šlo vše přes
# vpn server, u kterých to nebude, tak nepůjdou
# jelikož openvpn v tuto chvíli nepodporuje něco jako "multiinstancing rules" :-),
# tak lepší cestou jak dosáhnout klientů, kteří jdou/nejdou přes vpn server do internetu
# je zavedení více separátních instancí (více konfiguračních souborů) openvpn
# je to stále experimentální funkce, spustí příslušné routovací příkazy tak,
# aby byl celý provoz klienta přesměrován na vpn server, na serveru musíte
# zase nastavit přes iptables pravidla tak, aby si s tímhle příchozím provozem
# server poradil tak, že vše přesměruje do internetu
push "redirect-gateway def1"
# komprese roury, tato direktiva musí být na serveru i všech klientech, jinak chyba
comp-lzo
#nastavení pro udržení spojení přes stavové firewally viz dokumentace
keepalive 30 300
ping-timer-rem
persist-tun
persist-key
# dropnout rootovské oprávnění, které je potřeba pro vytvoření tun/tap zařízení
user nobody
group nogroup
# při auto startu openvpn během bootování zademonizuje proces openvpn
daemon
Routy na serveru:
Destination Gateway Genmask Flags MSS Window irtt Iface
10.79.1.2 * 255.255.255.255 UH 0 0 0 tun0
localnet * 255.255.255.0 U 0 0 0 eth0
10.79.1.0 10.79.1.2 255.255.255.0 UG 0 0 0 tun0
10.79.1.0 * 255.255.255.0 U 0 0 0 eth0
default xxx.xxx.xxx.xxx 0.0.0.0 UG 0 0 0 eth0
poznámka: xxx.xxx.xxx.xxx je výchozí brána serveru od ISPKlient:
# mód vpn
client
# typ zařízení - routování, layer 3 ip pakety
dev tun
# protokol
proto udp
# server ip a port
remote xxx.xxx.xxx.xxx 1194
# komprese roury, musí být konzistentní na všech mašinách
comp-lzo
# certifikáty
ca ca.crt
cert ja.crt
key ja.key
# jestli je použit DHCP pro nastavení address na klientovi, je dobré
# vytvářet routy až po nějakém čase,aby se stihly řádně IP addresy nastavit
route-delay 2
# na widláckym (windows) klientovi použij shell příkaz route.exe pro přidání rout
route-method exe
# lze dat spíše do server konfiguráku s direktivou push, direktiva dhcp je pro vícero použití
dhcp-option DNS 10.79.0.1
# ukecanost, hodnoty 0 až patnáct
verb 3
No a routy na klientovi:
Směrovací tabulka v jádru pro IP
Adresát Brána Maska Přízn MSS Okno irtt Rozhraní
10.79.1.5 * 255.255.255.255 UH 0 0 0 tun0
10.79.1.1 10.79.1.5 255.255.255.255 UGH 0 0 0 tun0
46.28.108.174 10.128.195.177 255.255.255.255 UGH 0 0 0 eth0
10.128.195.128 * 255.255.255.192 U 0 0 0 eth0
192.168.69.0 * 255.255.255.0 U 0 0 0 vmnet1
172.16.228.0 * 255.255.255.0 U 0 0 0 vmnet8
10.79.1.0 10.79.1.5 255.255.255.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 0 0 0 eth0
default 10.79.1.5 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.79.1.5 128.0.0.0 UG 0 0 0 tun0
default xxx.xxx.xxx.xxx 0.0.0.0 UG 0 0 0 eth0
Poznámka: xxx.xxx.xxx.xxx je výchozí brána na klientovi kterou máš od ISP nebo pokud si na vlastní síti jde o standardní bránu, která je v routovací tabulce vždy při funkční síti, i bez vpnTakto nastavený klient server je funkční připojení mezi oběma, na klientovi však nefunguje internet, jelikož posílá vše na vpn server, ten ale neví co s příchozími pakety, proto je potřeba na serveru nastavit iptables:
$ iptables -A POSTROUTING -s 10.79.1.0/24 -o eth0 -j MASQUERADE
Teď je nastavený firewall i openvpn server, ale je možné, že připojení do internetu stále nefunguje. To může způsobit nastavení jádra. Je nutné ověřit:
archenroot:~# cat /etc/sysctl.conf | grep ipv4.ip_forward
net.ipv4.ip_forward=1
Pokud je hodnota paremetru 1, je to OK, jestli je tam nula, pak forward nefunguje a klienti se do netu nepřipojí. To napraví bez rebootování serveru následující buď ruční konfigurace souboru /etc/sysctl.conf nebo..
sysctl -w net.ipv4.ip_forward=1
sysctl -p /etc/sysctl.conf
Poslední příkaz přivede parametry ze souboru k životu v jádru bez nutnosti restrartu
Takže teď když se klient připojí k vpn serveru a nahodí prakticky jakýkoli program, který chce komunikovat po síti. je takový požadavek poslán na vpn server, který požadavek přesměruje na svou bránu. Odpověď pak vrátí klientovi. Jak jsem zmínil výše, pro některé speciální aplikace bude tato konfigurace nefunkční, např. windows shary podle názvů, herní servery, apod. Avšak na prohlížení internetových stránek a využití standardních protokolů jako SSH, FTP, HTTP, HTTPS, POP, IMAP atd. to však stačí.
Tato konfigurace je samozřejmě velmi nebezpečná na produkční systém. Po donastavení všech požadovaných služeb je dobré firewall nastavit obráceně, než byl do této doby, kdy povoloval vše. Měl by blokovat vše, a povolovat jen něco. Při testování se ale vyplatí mít vše povolené, abyste hledali případné chyby pouze v konfiguraci vpn a ne zároveň na firewallu, takže nejdří nastavím službu, pak zavřu stavidla.
S nastavení firewallu pomůže velmi snadno rozšiřitelný skript na:
http://svn.openvpn.net/projects/openvpn/trunk/openvpn/sample-config-files/firewall.sh
I když bude firewall dobře nastavený, existuje celá řada faktorů, které umožní takto nastavený openvpn server kompromitovat, budu se tím zabývat později a někam postnu step-by-step návod. Mluvím zde např. o chrootování, integraci autentizačních pluginů jako je pam nebo eurephia, někde vše postnu, je toho spousta, co lze s vpn dělat

Zajímavé může být v tomto případě také zajíštění vysoké dostupnosti, buď ať už běži více insancí VPN na jednom serveru, jedna instance na více serverch, nebo více instancí na více serverech. Na klientech se v konfiguráku pomocí bloků <connection> dají nakofigurovat různé profily. Pro tyto profily připojení lze konfigurovat společné nebo specifické parametry. Klient pak zkouší myslím, že náhodně, připojení podle různých profilů dokud se někam nepřipojí. To je dobré

Blbý je to, že zatím něco podobného neexistuje na úrovni serveru, tj. mám více instancí v jednom konfiguračním souboru.
Celou funkcionalitu testuji na VSP, který je velmi lehce konfigurovatelný. Co. Anonymizační projekt v českých vodách chybí. Po světě jich je vícero, na některých českých fórech jsem se také dočetl o podobných myšlenkách, zatím však nic, co by v českých vodách bylo provozováno s větším úspěchem.
Každopádně good luck s openvpn.
Ladislav
