OpenVPN - HOWTO

Hunter

Użytkownik
Dołączył
Październik 29, 2005
Posty
478
=================================================
I. PRZYGOTOWANIE
=================================================


apt-get update ; apt-get upgrade
apt-get install openssl
apt-get install openvpn


groupadd openvpn
useradd -g openvpn -d /usr/local/etc/openvpn -s /bin/false -f 1 openvpn
mkdir /usr/local/etc/openvpn
chown openvpn:eek:penvpn /usr/local/etc/openvpn ; chmod 750 /usr/local/etc/openvpn ; chmod -s /usr/local/etc/openvpn


cd /etc/ssl
mkdir newcerts crlnumber crl
touch index.txt ; echo 00 > serial


=================================================
II. CERTYFIKATY
=================================================


#1. generujemy klucz prywatny


openssl genrsa -des3 -out private/cakey.pem 3072
(zostaniemy poproszeni o podanie hasla)


#2. generujemy certyfikat CA


openssl req -new -x509 -days 365 -key private/cakey.pem -out cacert.pem
(podajemy dane certyfikatu - wazne aby zpamietac najlepiej wszystkie dane certyfikatu ;))


#3. po wygenerowaniu certyfikatu CA mozemy przystapic do wygenerowania klucza servera vpn


openssl genrsa -des3 -out private/serverkey.pem 3072
(podajemy haslo dla serverkey.pem)


#4. tworzymy wniosek o wystawienie certyfikatu servera


openssl req -new -key private/serverkey.pem -out serverreq.pem


#5. podpisujemy certfikat servera przez utworzony w pkt.2 CA


openssl ca -notext -in serverreq.pem -out servercert.pem
(wpisujemy haslo utworzone dla CA w pkt.2)


#6. zdejmujemy haslo z klucza prywatnego servera (aby openvpn mogl startowac automatycznie wraz ze startem systemu bez koniecznosci wpisywania hasla)


openssl rsa -in private/serverkey.pem -out private/serverkey.pem_nopass
(wpisujemy poprzednio stworzone haslo dla serverkey.pem)




#7. w celu wygenerowania dostpeu dla uzytkownikow zdalnych do uslugi vpn generujemy tak jak w pkt. 3,4,5 klucz prywatny oraz certyfikat podpisany przez CA


np.


openssl genrsa -des3 -out private/user1_key.pem 3072
(podajemy nowe haslo dla uzytkownika user1)
openssl req -new -key private/user1_key.pem -out user1_req.pem
(wpisujemy dane certyfikatu identyczne jak w pkt.2 podczas tworzenia CA, oprocz pola "Common Name" ktore sluzy jako login uzytkownika, w naszym przypadku "Common Name" : user1)
openssl ca -notext -in user1_req.pem -out user1_cert.pem
(wpisujemy haslo utworzone dla CA w pkt.2)


#8. tworzymy dodatkowe zabezpieczenie protokolu UDP dzieki uwierzytelnianiu HMAC (miedzy innymi zabezpiecza to przed skanowaniem w celu wykrycia aktywnego tunelu udp, udp floodu etc. - szyfrowanie SHA-1 160 bitowe po wiecej info zapraszam do lektury http://openvpn.net/howto.html)


openvpn --genkey --secret ta.key

Oczywiscie od 2005 roku kiedy to ogloszono luke na tle kryptograficznym w SHA-1 (zainteresowanych zapraszam do lektury http://www.schneier.com/blog/archives/2005/02/sha1_broken.html) powstalo wiele dyskusji nt bezpieczenstwa OpenVPN ktore nadal korzysta z SHA-1. Otoz pamietajmy ze SHA-1 nie szyfruje calego polaczenia tylko Tworzy dodatkowe zabezpieczenie monitorujace stan protokolu udp np. wykrywa uzyskanie fake polaczenia przez niezaufane komputery.

Ponizej komentarz openvpn.net dt luki SHA-1:


Conclusions:
(1) HMAC SHA-1 is NOT broken (and there is no need to look for an alternative)
(2) SHA-1 -- if the paper is right -- is considered to be broken in a
cryptographers sense.
(3) There is a need for a new standardized hash function but no need for
panic actions: 2**69 possible variations can be considered safe.
(4) Nothing changed on the security level of OpenVPN

best regards,
Adi Kriegisch

#9. generujemy plik pomocniczy z parametrami protokolu kryptograficznego Diffiego-Hellmana


openssl dhparam -out dh2048.pem 2048
(moze potrwac nawet kilka minut w zaleznosci od cpu)


=================================================
III. KONFIGURACJA OPENVPN
=================================================


#10. kopiujemy utworzone cacert.pem, servercert.pem, ta.key, dh2048.pem do katalogu /usr/local/etc/openvpn


#11. tworzymy plik konfiguracyjny servera vpn


touch /usr/local/etc/openvpn/server.conf


- konfiguracja server.conf:


dev tun # opcja tun - jako router, tap - jako bridge (brama do laczenia kilku placowek firm etc.)
local xxx.xxx.xxx.xxx # bindowany ip
proto udp # wybieramy protokol tcp/udp (osobiscie wole udp poniewaz generuje on mniej syfu -.-)
port 5000 # port uslugi vpn
user openvpn # przydzielony user
group openvpn # przydzielona grupa
ca cacert.pem # nazwa CA
cert servercert.pem # nazwa certyfikatu servera
key serverkey.pem_nopass # klucz prywatny servera (w tym przypadku bez hasla)
dh dh2048.pem # nazwa klucza dh
server 10.8.0.0 255.255.255.0 # adresacja ip, maska
ifconfig-pool-persist ipp.txt # informacje o przydzielonych ip klientow (dziala podobnie jak dhcpd.leases)
client-config-dir ccd # nazwa katalogu dla konfiguracji indywidualnej
keepalive 10 120 # keepalive wiadomix
tls-auth ta.key 0 # po stronie servera opcja 0, po stronie klienta 1
cipher AES-256-CBC # rodzaj szyfrowania w tym przypadku 256 bitowe, domyslnie jest blowfish 128 bitowy
max-clients 30 # wiadomix
persist-key # nie pamietam... na http://openvpn.net/howto.html jest opisane (domyslnie zaleca sie uzycie tej opcji)
persist-tun # to samo co wyzej...
comp-lzo # rodzaj kompresji


#12. tworzymy katalog ccd & plik ipp.txt


touch /usr/local/etc/openvpn/ipp.txt
mkdir /usr/local/etc/openvpn/ccd


tworzymy plik indywidualnej konfiguracji dla user1


touch /usr/local/etc/openvpn/ccd/user1


w pliku /usr/local/etc/openvpn/ccd/user1 zapisujemy:


ifconfig-push 10.8.0.6 10.8.0.5 # statyczny adres klienta, bramy
push "route 192.168.10.0 255.255.255.0" # dodanie trasy dla firmowej sieci lokalnej
push "dhcp-option DNS 213.156.98.141" # dodanie 1 serwera dns (opcje ta dodajemy jesli zezwalamy na masquerade czyli "redirect-gateway" - przekierowanie calego ruchu klienta na lacze vpn, nie ma sensu zmieniac na sile dnsy 'domowe' na 'firmowe' poniewaz ze wzgledu na roznice odleglosci, predkosc 'domowego' internetu moze drastycznie zmalec)
push "dhcp-option DNS 150.254.173.3" # dodanie 2 serwera dns
push "dhcp-option WINS 192.168.10.3" # dodanie serwera wins aby moc np. wchodzic na zasoby sieciowe po nazwie komputera np. \\debian-server
push "redirect-gateway" # nadanie masquerady (czyli przekierowanie calego ruchu klienta przez tunel vpn, w efekcie nasz wychodzacy na swiat adres ip ulegnie zmianie - proxy :) - ze wzgledu na bezpieczenstwo nie kazdy user powinien miec dostep do tej opcji)


w pliku /usr/local/etc/openvpn/ipp.txt zapisujemy:
user1,10.8.0.50


#13. konfiguracja uruchamiania uslugi vpn / reguly iptables
generujemy polityke dostepu lan/wan np.:

iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
iptables -A INPUT -i eth0 -p udp --dport 5000 -j ACCEPT


przepuszczamy caly ruch tcp/udp dla user1 ktorego staly ip to 10.8.0.6:


iptables -A INPUT -i tun+ -s 10.8.0.6 -j ACCEPT
iptables -A FORWARD -i tun+ -s 10.8.0.6 -j ACCEPT


dla user2 10.8.0.7 zezwalamy na dostep do www i MySQL serwera 192.168.10.30:


iptables -A FORWARD -i tun+ -s 10.8.0.7 -d 192.168.10.30,ajax.googleapis.com -p udp --dport 53-j ACCEPT
iptables -A FORWARD -i tun+ -s 10.8.0.7 -d 192.168.10.30,ajax.googleapis.com -p tcp --match multiport --dports www,https,mysql -j ACCEPT
(przepuscilismy rowniez porty dla ajax.googleapis.com poniewaz strona internetowa (http://192.168.10.30) pobiera z tejze wlasnie domeny skrypty js)

reszte dropujemy:

iptables -A INPUT -s 10.8.0.0/24 -j DROP
iptables -A FORWARD -s 10.8.0.0/24 -j DROP



- edytujemy plik /etc/init.d/openvpn


szukamy linijki: CONFIG_DIR=/etc/openvpn
zamieniamy na: CONFIG_DIR=/usr/local/etc/openvpn


szukamy linijki: --config $CONFIG_DIR/$NAME.conf || STATUS=1
zamieniamy na: --config $CONFIG_DIR/$NAME.conf --auth-nocache || STATUS=1
(dzieki --auth-nocache blokujemy zapis hasla w pamieci)


restartujemy usluge vpn /etc/init.d/openvpn restart


#14. konfiguracja klienta systemu windows:


pobieramy i instalujemy openvpn win32 - domyslnie c:\program files\openvpn


kopiujemy cacert.pem, user1_cert.pem, user1_key.pem, ta.key do katalogu c:\program files\openvpn\config
w katalogu c:\program files\openvpn\config tworzymy plik user1.ovpn (koniecznie rozszerzenie .ovpn)


w pliku user1.ovpn zapisujemy:


dev tun # jako router
client # client mode
remote xxx.xxx.xxx.xxx # zdalny ip serwera na ktorym zainstalowalismy usluge openvpn
proto udp
port 5000
nobind # nie binduj lokalnie
ca cacert.pem
cert user1_cert.pem
key user1_key.pem
tls-auth ta.key 1
cipher AES-256-CBC
persist-key
persist-tun
comp-lzo
verb 3


Uruchamiamy openvpn-gui jako administrator, klikamy polacz, wpisujemy haslo klucza prywatnego podanego podczas tworzenia user1_key.pem i wsio ;)


- mamy zew. ip firmowe
- mozemy wchodzic na firmowe zasoby sieciowe np. \\vps-server\archiwum
- mozemy laczyc sie na dowolny komputer z uruchomiona usluga np. remotedesktop 192.168.10.29

PS. jezeli nie chcemy na glownej bramie instalowac vpn'a tylko na innym komputerze wew sieci wystarczy dodac odpowiednia regule iptables:

iptables -t nat -A PREROUTING -s 0/0 -d xxx.xxx.xxx.xxx -p udp --dport 5000 -j DNAT --to-destination 192.168.10.2:5000

-d xxx.xxx.xxx.xxx <-- adres bramy odpowiedzialnej za prerouting vpn
-s 0/0 <-- nalezy zamienic adresem ip/domena jezeli chcemy zezwolic na laczenie sie z serwerem vpn tylko statycznym adresom.
 
Ostatnio edytowane przez moderatora:

Hunter

Użytkownik
Dołączył
Październik 29, 2005
Posty
478
Ps. Drobny blad, jest:

"...--match multiport --dport"

a powinno byc:

"...--match multiport --dports"


# scurity note

do pliku konfiguracyjnego servera dopisujemy:

keysize 256
auth SHA512
tls-cipher DHE-RSA-AES256-SHA


do pliku konfiguracyjnego klienta dopisujemy:

script-security 2
keysize 256
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA
auth-nocache
 
Ostatnia edycja:

Hunter

Użytkownik
Dołączył
Październik 29, 2005
Posty
478
# Pisze nowego posta poniewaz nie moge edytowac wlasnego tematu -.-

Zakradl sie wielki blad, jest:

"mkdir newcerts crlnumber crl"

a powinno byc:

"mkdir newcerts crl ; touch crlnumber" # crlnumber to plik przechowujacy liczbe uniewaznionych certyfikatow.

#15. uniewaznianie certyfikatow:

openssl ca -revoke user1_cert.pem # uniewazniamy certyfikat
openssl ca -gencrl -out crl.pem # generujemy plik z lista uniewaznionych certyfikatow

cp crl.pem ~openvpn # kopiujemy wygenerowany crl.pem do katalogu konfiguracji openvpn

vi ~openvpn/server.conf
crl-verify crl.pem # w pliku konfiguracyjnym dopisujemy funkcje odpowiedzialna za weryfikacje uniewaznionych certyfikatow.
/etc/init.d/openvpn restart

## za kazdym razem kiedy uniewazniamy certyfikat musimy ponownie wygenerowac crl.pem oraz skopiowac jego aktualna wersje do katalogu ~openvpn. ##
 
Do góry Bottom