Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:08:contents:02 [2020/09/13 07:06]
iulia.florea
rl:labs:08:contents:02 [2023/11/05 12:54] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 2. [10p] Problemă ​la conectarea SSH folosind chei ====+==== 02. [10p] Format de pachete ​la translatare ​====
  
-Din contul utilizatorului ''​student'' ​de pe stația ''​red'' ​conectați-vă la utilizatorul ​''​ana'' ​de pe stația ''​host'' ​prin SSH prin rularea comenzii<​code bash> +Ne propunem să analizăm antetul IP al pachetelor ce sunt generate ​de stațiile ''​red''​, ''​green''​ și ''​blue'' ​și au ca destinație o rețea din Internet. Pentru acest lucru vom folosi utilitarul de captură ​''​tcpdump''​.
-student@red:​~$ ssh -l ana host +
-ana@host'​s password: ​+
  
 +Pe stația ''​red''​ pornim comanda ''​ping''​ către ''​8.8.8.8.'':<​code bash>
 +root@red:~# ping 8.8.8.8
 +PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
 +64 bytes from 8.8.8.8: icmp_req=1 ttl=127 time=42.0 ms
 +[...]
 </​code>​ </​code>​
-Observați că vi se cere parola. Folosiți ''​Ctrl+c''​ pentru a anula promptul de parolă și a reveni la shell-ul inițial. 
  
-Afiși fișierul care conține cheia publică stocată local și cel care conține cheia publică stocată la distanță. Folosiți comenzile<​code bash> +<​note>​ 
-student@red:​~$ cat ~/​.ssh/​id_rsa.pub  +Atunci când rulăm comanda ''​tcpdump''​ secvențde urmat este: 
-ssh-rsa AAAAB3NzaC1yc[...] student@red+  - Se rulează comanda ''​tcpdump''​ cu opțiunile aferente într-un terminal, activând astfel captura de pachete. Utilitarul ''​tcpdump''​ așteaptă acum transmiterea de pachete pe interfețele pe care ascultă
 +  - Într-un alt terminal se rulează o comandă specifică unui client de rețea care generează trafic
 +  - Se revine în terminalul în care rulează comanda ''​tcpdump''​ și se urmăresc pachetele capturate
 +  Când nu mai este nevoie de utilitarul ''​tcpdump''​ se întrerupe captura de pachete folosind combinația de taste ''​Ctrl+c''​. 
 +</​note>​
  
-student@red:~$ ssh -l ana host "cat ~/.ssh/​authorized_keys"​ +Pentru a urmări traficul, pe stația ''​host''​ rulăm comanda<​code bash> 
-ana@host'​s password:  +root@host:~# tcpdump ​-n -i eth0 ip dst host 8.8.8.8 
-ssh-rsa AAAAB3NzaC1yc[...] student@red+tcpdumpverbose output suppressed, use -v or -vv for full protocol decode 
 +listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 
 +12:59:20.976707 IP host > 8.8.8.8: ICMP echo request, id 625, seq 6, length 64 
 +12:​59:​21.977708 IP host > 8.8.8.8: ICMP echo request, id 625, seq 7, length 64
 </​code>​ </​code>​
-Pentru a doua comandă introduceți parola ''​student''​. Observați că cele două fișiere sunt identice. În mod obișnuit conectarea SSH ar trebui să funcționeze pe bază de chei, nu ar trebui să solicite parolă. 
  
-O primă metodă de identificare a problemelor de conectare este să rulați comanda de conectare cu opțiune de //​verbosity//:​<code bash> +<spoiler (click pentru expandare) Detalii rulare masina virtuala VMware local
-student@red:​~$ ssh -vvv -l ana host +<note important> 
-[...] +După rularea comenzii de mai sus, probabil vi se va bloca terminalul. În mașina virtuală VMware apare o mini-fereastră care vă indică intrarea plăcii de rețea ​în modul //promiscuous//. Apăsați pe butonul ​''​OK'' ​al ferestrei ​pentru a debloca mașina virtuală și, astfel, terminalul.
-debug3: remaining preferred: ,password +
-debug3: authmethod_is_enabled password +
-debug1: Next authentication method: password +
-ana@host'​s password: ​ +
-</codeDin păcate mesajele afișate nu oferă informații utile. Folosiți ''​Ctrl+c''​ pentru a anula promptul de parolă și a reveni la shell-ul inițial. +
- +
-Pentru identificarea problemei vrem să consultăm fișierele jurnal ale serverului de SSH de la distanță. Autentificați ca ''​root''​ pe stația ''​host'',​ folosiți comanda ''​tail''​ pentru a urmări mesajele ​de jurnalizare. Comanda rulează ​în continuu și afișează noile mesaje din fișierul primit ca argument pe măsură ce acestea apar:<​code bash> +
-root@host:​~#​ tail -f /var/log/auth.log  +
-[...] +
-Nov 14 16:48:31 host sshd[20898]:​ Authentication refused: bad ownership or modes for directory /home/ana/.ssh +
-Nov 14 16:49:09 host sshd[20898]:​ Connection closed by 192.168.1.2 [preauth] +
-</​code>​ Pentru a genera din nou mesaje legate de problemă, pe stația ''​red''​ rulați, din nou, comanda de conectare SSH:<​code bash> +
-ssh -l ana host +
-</​code>​ Folosiți ''​Ctrl+c''​ pentru a anula promptul de parolă și a reveni la shell-ul inițial. +
- +
-Urmăriți mesajele de jurnalizare ale serverului. Urmăriți linia care începe cu "​Authentication refused:"​. +
- +
-<note tip> +
-Problema este la directorul ''​.ssh/''​ din directorul home al utilizatorului ''​ana''​.+
 </​note>​ </​note>​
 +</​spoiler>​
  
-<note tip> +Observăm că adresa IP sursă este ''​host.local''​ chiar dacă stația ''​red''​ este cea care execută ​comanda ''​ping'' ​și generează pachetele ​de tip ''​ICMP echo request''​.
-Folosițcomanda<code bash> +
-ls -ld <​director>​ +
-</​code>​ pe un director pentru a afișa permisiunile pe directorul ​''​<​director>​''​. Permisiunile ar trebui să corespundă cu permisiuni pe directoarele identice ​deținute de alți utilizatori. +
-</​note>​+
  
-<​hidden>​ +Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă ''​tcpdump''​ pe interfața ''​veth-red''​ în loc de ''​eth0'': ​<​code ​bash
-<​solution>​ +root@host:~# tcpdump -n -i veth-red ip dst host 8.8.8.8 
-Mesajul complet este<​code>​ +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
-Authentication refusedbad ownership ​or modes for directory /home/ana/.ssh+listening on veth-red, link-type EN10MB (Ethernet), capture size 65535 bytes 
 +13:01:12.557692 IP red > 8.8.8.8: ICMP echo request, id 626, seq 6, length 64 
 +13:​01:​13.559726 IP red > 8.8.8.8: ICMP echo request, id 626, seq 7, length 64
 </​code>​ </​code>​
-Sunt permisiuni nepotrivite ​pe directorul ​''​/home/ana/.ssh''​. ​Investigăm permisiunile:​<code bash> +Observăm că pe interfața ​''​veth-red''​ adresa IP sursă este adresa stației ''​red'',​ adică așa cum este generat de la început pachetulMotivul este reprezentat de faptul că pachetele ce intră pe intefața ​''​veth-red''​ sunt capturate înainte de rutare, iar procesul NAT este aplicat **după rutare** (vezi [[rl:​labs:​09:​contents:​01|]]. 
-root@host:​~# ​ls -ld /home/ana/.ssh/ + 
-drwxrwxrwx 2 ana ana 4096 Sep 18  2013 /home/ana/.ssh/+Pentru a vedea modul în care se translatează traficul capturăm traficul pe toate interfețele (cele de interes sunt ''​veth-red''​ și ''​eth0''​)<code bash> 
 +root@host:​~# ​tcpdump ​-n -i any ip dst host 8.8.8.8 
 +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
 +listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 
 +10:23:07.632412 IP red > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 
 +10:​23:​07.632430 IP host > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 
 +10:​23:​08.633936 IP red > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 
 +10:​23:​08.633954 IP host > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64
 </​code>​ </​code>​
-Permisiunile sunt prea permisive (drepturi complete). Întrucât directorul ''/​home/​ana/​.ssh/''​ conține și fișierul ce reprezintă cheia privată a utilizatorului ''​ana''​ (posibil chiar mai multe fișiere de cheie privată), care trebuie să rămână **privat**, trebuie permisiuni mai restrictive pe fișier. 
-</​solution>​ 
-</​hidden>​ 
  
-Corectați problema indicată de fișierele jurnal.+În lista de mai sus observăm atât pachetele care sunt captuarate pe interfața ''​veth-red''​ (generate ​de stația ''​red''​) cât și cele capturate pe interfața ''​eth0''​ (translatate de stația ''​host''​).
  
-<​hidden>​ +Capturați și pachetele de reply, care au ca **sursă** adresa ​''​8.8.8.8''​. ​Folosiți șirul de argumente ''​ip src host 8.8.8.8''​ pentru ''​tcpdump''​.
-<​solution>​ +
-Reducem permisiunile pe directorul ​''​/home/ana/.ssh/''​+
-<code bash> +
-root@host:​~#​ chmod 755 /home/ana/.ssh/ +
-root@host:~# ls -ld /home/ana/.ssh/ +
-drwxr-xr-x 2 ana ana 4096 Sep 18  2013 /home/ana/.ssh/ +
-</​code>​ +
-</​solution>​ +
-</​hidden>​+
  
-După corectarea problemei, verificați funcționarea conectării SSH folosind chei publice:<​code bash> +Repetați testele de mai sus pentru stația ''​green''​.
-student@red:​~$ ssh -l ana host +
-[...] +
-ana@host:~$  +
-</​code>​+
  
-Dacă i realizat configurația corectă atunci comanda ​de mai sus va conduce la conectarea SSH prin cheie publicăfără a vă fi solicitată parola de conectare pentru utilizatorul ​''​ana'' ​de pe stația ​''​host''​.+<​note>​ 
 +Întrucât latențDNS poate fi semnificativă,​ recomandăm folosirea opțiunii ''​-n''​ a utilitarului ''​tcpdump'',​ opțiune care dezactivează rezolvarea DNS. În exemplele ​de mai sus, nu am folosit opțiunea ​''​-n'' ​a utilitarului ​''​tcpdump'' ​pentru a identifica mai ușor numele stațiilor implicate în conversație. 
 +</​note>​
rl/labs/08/contents/02.1599969975.txt.gz · Last modified: 2020/09/13 07:06 by iulia.florea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0