This shows you the differences between two versions of the page.
gsr:laboratoare:laborator-11 [2016/01/14 16:51] razvan.deaconescu [Conectare prin SSH] |
gsr:laboratoare:laborator-11 [2017/01/19 14:19] (current) alexandru.carp [Rețea OpenVPN] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 11: Servicii de acces la distanță ===== | + | ====== Laborator 11: Acces la distanță ===== |
===== Completare formular de feedback ===== | ===== Completare formular de feedback ===== | ||
- | Pentru a îmbunătăți cursul de GSR, componentele sale și modul de desfășurare, ne sunt foarte utile opiniile voastre. Pentru aceasta, vă rugăm, să accesați și completați [[http://cs.curs.pub.ro/2015/blocks/simplehtml/view.php?courseid=166&blockid=1468|formularul de feedback de pe site-ul cs.curs.pub.ro]]. Trebuie să fiți autentificați și înrolați în cadrul cursului. | + | Pentru a îmbunătăți cursul de GSR, componentele sale și modul de desfășurare, ne sunt foarte utile opiniile voastre. Pentru aceasta, vă rugăm, să accesați și completați [[http://cs.curs.pub.ro/2016/blocks/feedbackacs/view.php?courseid=197&blockid=3269|formularul de feedback de pe site-ul cs.curs.pub.ro]]. Trebuie să fiți autentificați și înrolați în cadrul cursului. |
- | Formularul este anonim și este activ în perioada 4-20 ianuarie 2016. Rezultatele vor fi vizibile în cadrul echipei cursului doar după încheierea sesiunii. Găsiți [[http://cs.curs.pub.ro/2015/blocks/simplehtml/view.php?courseid=166&blockid=1468|formularul]] în partea dreaptă a paginii principale de GSR de pe cs.curs.pub.ro într-un frame intitulat %%"FEEDBACK"%%. | + | Formularul este anonim și este activ pana pe 20 ianuarie 2017. Rezultatele vor fi vizibile în cadrul echipei cursului doar după încheierea sesiunii. Găsiți [[http://cs.curs.pub.ro/2016/blocks/feedbackacs/view.php?courseid=197&blockid=3269|formularul]] în partea dreaptă a paginii principale de GSR de pe cs.curs.pub.ro într-un frame intitulat %%"FEEDBACK"%%. |
Vă invităm să evaluați activitatea echipei de GSR și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a disciplinei. Feedback-ul vostru este foarte important pentru noi să creștem calitatea materiei în anii următori și să îmbunătățim disciplinele pe care le veți face în continuare. | Vă invităm să evaluați activitatea echipei de GSR și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a disciplinei. Feedback-ul vostru este foarte important pentru noi să creștem calitatea materiei în anii următori și să îmbunătățim disciplinele pe care le veți face în continuare. | ||
Line 15: | Line 15: | ||
Vă mulțumim! | Vă mulțumim! | ||
+ | |||
===== Conectare prin SSH ===== | ===== Conectare prin SSH ===== | ||
- | Porniți o mașină virtuală VirtualBox din cadrul sistemului și realizați o conexiune SSH în ambele sensuri (de la mașină virtuală la sistemul fizic și invers) folosind autentificare cu chei publice. Folosiți pentru conectare utilizatorul ''student'' de pe fiecare stație. | + | Realizați o conexiune SSH de pe statia fizica pe ''fep.grid.pub.ro'', folosind autentificare cu chei publice. Folosiți pentru conectare: |
- | + | * utilizatorul ''student'' de pe statia fizica | |
- | <note> | + | * utilizatorul vostru de pe ''fep.grid.pub.ro'' |
- | Importați în VirtualBox mașina virtuala ''GSR Debian.ova'' din directorul ''/mnt/sda5/gsr/''. | + | |
- | </note> | + | |
- | + | ||
- | <note tip> | + | |
- | Există o problemă cu serverul SSH de pe mașina virtuală ''GSR Debian'' pe care trebuie să o rezolvați. | + | |
- | </note> | + | |
<note tip> | <note tip> | ||
Line 32: | Line 27: | ||
<note tip> | <note tip> | ||
- | Folosiți adresa IP a interfeței ''vboxnext0'' pentru sistemul host și interfața echivalentă din mașina virtuală. | + | Daca pe masina fizica nu aveți creată o pereche de cheie publică/cheie privată, folosiți comanda |
- | </note> | + | <code> |
- | + | ||
- | <note tip> | + | |
- | Pe mașina virtuală nu aveți creată o pereche de cheie publică/cheie privată. Folosiți comanda<code> | + | |
ssh-keygen | ssh-keygen | ||
</code> | </code> | ||
Line 43: | Line 35: | ||
===== X Forward prin SSH ===== | ===== X Forward prin SSH ===== | ||
- | Realizați configurația în așa fel încât **de pe sistemul fizic** să vă conectați de pe sistemul fizic **pe mașina virtuală** și să porniți acolo o aplicație grafică, precum ''xeyes'' sau ''xterm'' folosind X forwarding prin SSH. | + | Realizați configurația în așa fel încât **de pe sistemul fizic** să vă conectați pe ''fep.grid.pub.ro'' și să porniți acolo o aplicație grafică, precum ''xeyes'' sau ''xterm'' folosind X forwarding prin SSH. |
- | Realizați această conexiune între două stații din laborator (cel mai bine împreună cu un coleg). | + | Apoi, realizați această conexiune si între două stații din laborator (cel mai bine împreună cu un coleg). |
===== Tunel SSH ===== | ===== Tunel SSH ===== | ||
- | De pe mașina virtuală conectați-vă pe fep prin SSH și deschideți un tunel invers către ''fep.cs.pub.ro'' în așa fel încât să vă puteți conecta de pe sistemul unui coleg către mașina virtuală. | + | De pe o masina virtuala din OpenStack, conectați-vă pe fep prin SSH și deschideți un tunel invers către ''fep.cs.pub.ro'' în așa fel încât să vă puteți conecta de pe sistemul unui coleg către mașina virtuală. |
Va trebui ca fiecare dintre cei doi participanți la comunicație să deschidă un port distinct remote (pe ''fep.grid.pub.ro''). | Va trebui ca fiecare dintre cei doi participanți la comunicație să deschidă un port distinct remote (pe ''fep.grid.pub.ro''). | ||
Line 71: | Line 63: | ||
<note tip> | <note tip> | ||
- | If you plan on using [[https://wiki.gnome.org/action/show/Projects/Vino|Vino]], locate the server executable file using<code> | + | Dacă planificați să folosiți [[https://wiki.gnome.org/action/show/Projects/Vino|Vino]], localizați fișierul executabil al server-ului folosind comanda<code> |
- | locate vino | + | locate vino-server |
+ | </code> | ||
+ | |||
+ | Dacă folosiți ''vino'' atunci activați remote access folosind comanda<code> | ||
+ | sudo dconf write /org/gnome/desktop/remote-acccess/enabled true | ||
</code> | </code> | ||
</note> | </note> | ||
- | ===== VPN ===== | ||
- | Pentru exercițiile de mai jos vom folosi o topologie și vom configura OpenVPN și IPsec. | + | <note tip> |
- | + | Folosiți<code> | |
- | ==== Topologie ==== | + | netstat -tlpn |
- | + | </code> | |
- | {{ {{ :gsr:laboratoare:topologie-vpn.jpg | Topologie VPN}} | + | pentru a vă asigura că serverul e pornit și ascultă pe portul aferent (în general ''5900''). |
- | + | ||
- | Topologia este formata din 2 routere Cisco emulate in Dynamips și 3 mașini virtuale KVM. | + | |
- | + | ||
- | === Scenariu === | + | |
- | + | ||
- | Topologia infatiseaza reteaua unei companii, compusa din: | + | |
- | * un sediu central (Headquarters), ce contine: | + | |
- | * router-ul de acces (HQ) - o masina Linux; | + | |
- | * un host din reteaua HQ (HQ Host) - o masina Linux; | + | |
- | * un sediu regional (Branch), ce contine: | + | |
- | * router-ul de acces (Branch) - un router Cisco; | + | |
- | * un host din reteaua Branch (Branch Host) - o masina Linux; | + | |
- | Sediul central si sediul regional sunt conectate prin intermediul unui service provider. Acesta detine router-ul ISP (router Cisco). | + | |
- | + | ||
- | <note> | + | |
- | Host-urile "HQ Host" si "Branch Host" sunt "in spatele" unor NAT-uri. | + | |
</note> | </note> | ||
- | <note> | + | <note tip> |
- | Adresarea, rutarea si NAT-ul **sunt deja** configurate pe router-ele ISP si Branch. | + | Pe post de client puteți folosi [[http://www.remmina.org/wp/|Remmina]]. Îl puteți instala folosind comanda<code> |
- | + | sudo apt-get install remmina | |
- | Router-ul ISP are acces la Internet. | + | </code> |
</note> | </note> | ||
- | === Pornirea topologiei === | + | <note tip> |
- | + | Folosiți comanda ''vino-preferences'' (este posibil să fie nevoie să o localizați) pentru a configura serverul VNC. | |
- | <note warning> | + | |
- | Toate comenzile sau scripturile din acest laborator trebuie rulate ca **superuser (root)**. | + | |
</note> | </note> | ||
- | Pentru a porni topologia: | + | ===== Rețea OpenVPN ===== |
- | * Deschideti un terminal in care va logati ca **root**; | + | |
- | * Descarcati arhiva de laborator de la adresa http://swarm.cs.pub.ro/~carpalex/saisp/saisp-lab06.tar<code> | + | |
- | wget http://swarm.cs.pub.ro/~carpalex/saisp/saisp-lab06.tar | + | |
- | </code> | + | |
- | * Dezarhivati arhiva:<code> | + | |
- | tar -xvf saisp-lab06.tar | + | |
- | </code> | + | |
- | * Executati script-ul "prepare.sh":<code> | + | |
- | chmod +x prepare.sh | + | |
- | ./prepare.sh | + | |
- | </code> | + | |
- | * Cand sunteti intrebati daca sa importati configuratiile, raspundeti **Y**. | + | |
- | * Apoi, din consola Dynagen, tastati **console /all** pentru a deschide consolele pentru routerele ISP si Branch. | + | |
- | * Masinile virtuale vor fi pornite automat. | + | |
- | ===== Configurare VPN folosind OpenVPN ===== | + | |
- | + | ||
- | In final, vom configura si folosi o solutie de SSL VPN (OpenVPN): | + | |
- | * **HQ Router** va fi **server OpenVPN**; | + | |
- | * Statiile din retelele private (**HQ Host** si **BR Host**) pot fi **clienți OpenVPN**. | + | |
- | + | ||
- | Vom configura **doar BR Host** ca client VPN. | + | |
- | + | ||
- | === Instalare OpenVPN === | + | |
- | + | ||
- | Instalați, pe cele 2 mașini (**HQ Router**, și **BR Host**) pachetul **openvpn**: | + | |
- | <code> | + | |
- | # apt-get update | + | |
- | # apt-get install openvpn | + | |
- | </code> | + | |
- | + | ||
- | === Generare chei === | + | |
- | + | ||
- | Cheile vor fi generate pe server (**HQ Router**). | + | |
- | + | ||
- | Pentru generarea cheilor, ne vom folosi de scripturile **easy-rsa 2.0** aflate în directorul ''/usr/share/doc/openvpn/examples/easy-rsa/2.0''. Copiați scripturile în directorul ''/etc/openvpn'' pentru a vă fi mai ușor.<code> | + | |
- | saisp-vm-1# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/ | + | |
- | </code> | + | |
- | + | ||
- | În continuare vom lucra în directorul **/etc/openvpn**: | + | |
- | <code> | + | |
- | saisp-vm-1# cd /etc/openvpn | + | |
- | </code> | + | |
- | + | ||
- | Editati fișierul **vars** pentru a configura variabilele de mediu. | + | |
- | <code> | + | |
- | export KEY_SIZE=1024 | + | |
- | + | ||
- | export KEY_COUNTRY="RO" | + | |
- | export KEY_PROVINCE="B" | + | |
- | export KEY_CITY="Bucharest" | + | |
- | export KEY_ORG="CS" | + | |
- | export KEY_EMAIL="saisp@cs.pub.ro" | + | |
- | </code> | + | |
- | + | ||
- | Setați variabilele de mediu configurate folosind **source vars**: | + | |
- | <code> | + | |
- | saisp-vm-1# source vars | + | |
- | saisp-vm-1# ./clean-all | + | |
- | </code> | + | |
- | + | ||
- | Generăm certificatul pentru CA folosind **build-ca**. Răspundeți la întrebări cu răspunsurile default. | + | |
- | <code> | + | |
- | ./build-ca | + | |
- | </code> | + | |
- | + | ||
- | Cheia pentru Diffie Hellman se generează cu **buid-dh**: | + | |
- | <code> | + | |
- | ./build-dh | + | |
- | </code> | + | |
- | + | ||
- | Pentru server generăm cheia folosind **build-key-server**, iar pentru fiecare client, generăm o cheie folosind **build-key**. Răspundeți la întrebări cu răspunsurile default. | + | |
- | **Atentie!** Cand sunteti intrebati daca doriti sa semnati certificatele, raspundeti cu **Y**. | + | |
- | + | ||
- | <code> | + | |
- | ./build-key-server server | + | |
- | ./build-key client1 | + | |
- | </code> | + | |
- | + | ||
- | Examinați conținutul directorului **keys** pentru a vedea fișierele create. | + | |
- | + | ||
- | === Configurare server și client === | + | |
- | + | ||
- | Pe server (**HQ Router - saisp-vm-1**), creați fișierul **/etc/openvpn/server.conf** cu următorul conținut: | + | |
- | <code> | + | |
- | port 1194 | + | |
- | proto tcp | + | |
- | dev tap | + | |
- | client-to-client | + | |
- | server 172.16.123.0 255.255.255.0 | + | |
- | push "redirect-gateway" | + | |
- | push "dhcp-option DNS 141.85.37.1" | + | |
- | ca keys/ca.crt | + | |
- | cert keys/server.crt | + | |
- | key keys/server.key | + | |
- | dh keys/dh1024.pem | + | |
- | client-to-client | + | |
- | cipher AES-128-CBC | + | |
- | max-clients 10 | + | |
- | user nobody | + | |
- | group nogroup | + | |
- | persist-key | + | |
- | persist-tun | + | |
- | chroot /etc/openvpn | + | |
- | log server.log | + | |
- | comp-lzo | + | |
- | </code> | + | |
- | + | ||
- | Pe **BR Host (saisp-vm-3)** creați fisierul **/etc/openvpn/client1.conf** cu următorul conținut: | + | |
- | <code> | + | |
- | client | + | |
- | tls-client | + | |
- | dev tap | + | |
- | proto tcp | + | |
- | remote 28.28.28.2 1194 | + | |
- | persist-key | + | |
- | persist-tun | + | |
- | ca keys/ca.crt | + | |
- | cert keys/client1.crt | + | |
- | key keys/client1.key | + | |
- | cipher AES-128-CBC | + | |
- | comp-lzo | + | |
- | log client1.log | + | |
- | </code> | + | |
- | + | ||
- | Va trebui să copiați pe client fișierele cu **certificatele** si cu **cheile**. Vom folosi **scp**. | + | |
- | * Pe **BR Host (saisp-vm-3)**: | + | |
- | <code> | + | |
- | saisp-vm-3# scp -r root@28.28.28.2:/etc/openvpn/keys/ /etc/openvpn/ | + | |
- | </code> | + | |
- | + | ||
- | Porniți OpenVPN pe toate stațiile configurate folosind | + | |
- | <code> | + | |
- | # /etc/init.d/openvpn start | + | |
- | </code> | + | |
- | Observați interfața **tap0** creată pe **server** si pe **client**. | + | |
- | + | ||
- | Încercați să generati trafic intre client si server: | + | |
- | <code> | + | |
- | saisp-vm-3# ping 172.16.123.1 | + | |
- | </code> | + | |
- | + | ||
- | Rulați **ip route show** și observați ruta implicită. Pe unde va circula tot traficul? Care linie din configurația VPN-ului forțează acest lucru? | + | |
- | + | ||
- | === Clean up === | + | |
- | + | ||
- | Închideți serviciul de OpenVPN pe cele trei stații: | + | |
- | <code> | + | |
- | # /etc/init.d/openvpn stop | + | |
- | </code> | + | |
- | + | ||
- | ===== Configurare VPN folosind IPsec ===== | + | |
- | + | ||
- | In cele ce urmeaza, vom configura un tunel **IPsec** intre **HQ Router** si **BR Router**. | + | |
- | Deoarece IPsec este un framework de securitate standard, putem sa realizam interoperarea intre echipamente diferite: | + | |
- | * pe **HQ Router** (Linux) vom folosi **OpenSWAN**; | + | |
- | * pe **BR Router** (Cisco) vom folosi o imagine de **Cisco IOS** ce suporta IPsec. | + | |
- | + | ||
- | === Instalare === | + | |
- | + | ||
- | Instalați pe **HQ Router (saisp-vm-1)**, folosind **apt-get**, pachetul **openswan**:<code> | + | |
- | saisp-vm-1# apt-get install openswan | + | |
- | </code> | + | |
- | + | ||
- | La intrebarea "Use an X.509 certificate for this host?", răspundeți **No**. | + | |
- | + | ||
- | === Configurare Cisco === | + | |
- | + | ||
- | Mai intai, vom crea un **ACL** ce defineste traficul ce trebuie protejat:<code> | + | |
- | Branch(config)#ip access-list extended IPSEC_ACL | + | |
- | Branch(config-ext-nacl)#permit ip 42.42.42.0 0.0.0.255 28.28.28.0 0.0.0.255 | + | |
- | </code> | + | |
- | + | ||
- | Apoi, cream o politica **ISAKMP** ce defineste parametrii pentru **faza 1** (de negociere) a IPsec:<code> | + | |
- | Branch(config)#crypto isakmp policy 10 | + | |
- | Branch(config-isakmp)#authentication pre-share | + | |
- | Branch(config-isakmp)#encryption 3des | + | |
- | Branch(config-isakmp)#hash md5 | + | |
- | Branch(config-isakmp)#group 2 | + | |
- | </code> | + | |
- | + | ||
- | Apoi, cream **cheia** partajata si o asociem "interlocutorului":<code> | + | |
- | Branch(config)#crypto isakmp key 0 saisp address 28.28.28.2 no-xauth | + | |
- | </code> | + | |
- | + | ||
- | Cream un **transform set** ce defineste parametrii pentru **faza 2** (de comunicatie efectiva) a IPsec:<code> | + | |
- | Branch(config)#crypto ipsec transform-set IPSEC_TS esp-3des esp-md5-hmac | + | |
- | Branch(cfg-crypto-trans)#mode tunnel | + | |
- | </code> | + | |
- | + | ||
- | Cream un **crypto map**, ce reuneste la un loc toate configuratiile anterioare:<code> | + | |
- | Branch(config)#crypto map IPSEC_MAP 10 ipsec-isakmp | + | |
- | Branch(config-crypto-map)# match address IPSEC_ACL | + | |
- | Branch(config-crypto-map)# set peer 28.28.28.2 | + | |
- | Branch(config-crypto-map)# set transform-set IPSEC_TS | + | |
- | </code> | + | |
- | + | ||
- | In final, aplicat crypto-map-ul pe interfata:<code> | + | |
- | Branch(config)#int f0/0 | + | |
- | Branch(config-if)#crypto map IPSEC_MAP | + | |
- | </code> | + | |
- | + | ||
- | === Configuratie OpenSWAN === | + | |
- | + | ||
- | In fișierul **/etc/ipsec.conf**, editati liniile:<code> | + | |
- | nat_traversal=no | + | |
- | protostack=netkey | + | |
- | </code> | + | |
- | + | ||
- | Apoi, in acelasi fisier, definiti parametrii pentru tunelul IPsec:<code> | + | |
- | conn ipsec-tun | + | |
- | authby=secret | + | |
- | left=28.28.28.2 | + | |
- | leftnexthop=28.28.28.1 | + | |
- | leftsubnet=28.28.28.0/24 | + | |
- | right=42.42.42.2 | + | |
- | rightnexthop=42.42.42.1 | + | |
- | rightsubnet=42.42.42.0/24 | + | |
- | ike=3des-md5;modp1024 | + | |
- | keyexchange=ike | + | |
- | pfs=no | + | |
- | auto=start | + | |
- | </code> | + | |
- | + | ||
- | Observati ca parametrii corespund configurarilor facute in IOS. | + | |
- | + | ||
- | Apoi, in fisierul **/etc/ipsec.secrets** definiti cheia partajata, adaugand urmatoarea linie:<code> | + | |
- | 28.28.28.2 42.42.42.2: PSK "saisp" | + | |
- | </code> | + | |
- | + | ||
- | Porniți conexiunea resetând serviciul:<code> | + | |
- | saisp-vm-1# /etc/init.d/ipsec restart | + | |
- | </code> | + | |
- | + | ||
- | Testati conectivitatea, executand un **ping** de pe **BR Router** catre **HQ Router**:<code> | + | |
- | Branch# ping 28.28.28.2 | + | |
- | </code> | + | |
- | + | ||
- | Observati cum arata pachetele in Wireshark (capturati pe **tap11**). | + | |
- | + | ||
- | Pe **BR Router**, afisati informatii despre functionarea IPsec:<code> | + | |
- | Branch# show crypto isakmp sa | + | |
- | Branch# show crypto ipsec sa | + | |
- | Branch# show crypto session | + | |
- | </code> | + | |
- | + | ||
- | Procedati la fel pe **HQ Router**:<code> | + | |
- | saisp-vm-1# ip xfrm state show | + | |
- | </code> | + | |
- | + | ||
- | === Clean up === | + | |
- | + | ||
- | <note warning> | + | |
- | Pentru acest laborator, acest pas este foarte important. Daca nu stergeti tunelele create, urmatoarele task-uri **nu vor functiona!** | + | |
- | <note> | + | |
- | + | ||
- | Pe **HQ Router** închideți serviciul OpenSWAN:<code> | + | |
- | saisp-vm-1# /etc/init.d/ipsec stop | + | |
- | </code> | + | |
- | + | ||
- | Pe **BR Router** scoateti crypto-map-ul de pe interfata:<code> | + | |
- | Branch(config)#int f0/0 | + | |
- | Branch(config-if)#no crypto map | + | |
- | </code> | + | |
- | ===== BONUS: Rețea OpenVPN ===== | + | În echipe de câte trei persoane, creați o infrastructură VPN în care să comunicați între două statii care rulează un client OpenVPN prin intermediul celei de-a treia stații care rulează un server OpenVPN. |
- | În echipe de câte trei persoane, creați o infrastructură VPN în care să comunicați între două mașini virtuale VirtualBox care se găsesc pe două dintre cele trei stații și care rulează un client OpenVPN prin intermediul celeil de-a treia stații care rulează un server OpenVPN. | + | Urmăriți indicațiile de [[https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04|aici]] pentru configurare. |
/* | /* |