This shows you the differences between two versions of the page.
rl:labs:08:contents:04 [2020/09/13 07:23] iulia.florea |
rl:labs:08:contents:04 [2023/11/05 12:54] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 4. [10p] Generare cheie publică și autentificare === | + | ==== 04. [10p] Configurare incorectă a translatării ==== |
- | În contul utilizatorului ''corina'' de pe stația ''blue'' generați o pereche cheie publică/cheie privată SSH prin rularea comenzii<code bash> | + | Comanda folosită mai sus pentru translatare, la [[:rl:labs:09:contents:01]], are neajunsuri pe care le vom identifica mai jos. |
- | corina@blue:~$ ssh-keygen -t rsa | + | |
- | Generating public/private rsa key pair. | + | |
- | Enter file in which to save the key (/home/corina/.ssh/id_rsa): | + | |
- | Created directory '/home/corina/.ssh'. | + | |
- | Enter passphrase (empty for no passphrase): | + | |
- | Enter same passphrase again: | + | |
- | Your identification has been saved in /home/corina/.ssh/id_rsa. | + | |
- | Your public key has been saved in /home/corina/.ssh/id_rsa.pub. | + | |
- | [...] | + | |
- | </code> Folosiți ''ENTER'' pentru a folosi căile implicite. Nu folosiți passphrase (adică apăsați ''ENTER'' când vi se solicită passphrase-ul). Cheile sunt generate respectiv, în fișierele, ''.ssh/id_rsa'' (cheia privată) și ''.ssh/id_rsa.pub'' (cheia publică). | + | |
- | Realizați operațiile necesare pentru a permite autentificarea pe bază de chei din contul utilizatorului ''corina'' de pe stația ''blue'' în contul utilizatorului ''student'' de pe stația ''host''. După aceea, verificați faptul că autentificarea se face pe baza de chei. | ||
- | Aceștia sunt pașii pe care îi veți urma pentru a configura conectare SSH pe bază de chei: | + | Pe stația ''green'' capturăm traficul pe interfața ''green-eth0'' folosind comanda ''tcpdump'':<code bash> |
- | - generare pereche de chei SSH (folosind comanda ''ssh-keygen'') | + | root@green:~# tcpdump -i green-eth0 |
- | - copiere cheie publică în contul de la distanță (folosind comanda ''ssh-copy-id'') | + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode |
- | - conectare la distanță (folosind comanda ''ssh'') | + | listening on green-eth0, link-type EN10MB (Ethernet), capture size 65535 bytes |
+ | </code> | ||
- | <hidden> | + | Pe stația ''red'' executăm comanda ''ping'' către stația ''green'':<code bash> |
- | <solution> | + | root@red:~# ping -c 2 green |
- | <code bash> | + | PING green (192.168.2.2) 56(84) bytes of data. |
- | corina@blue:~$ ssh-copy-id student@host | + | 64 bytes from green (192.168.2.2): icmp_req=1 ttl=63 time=0.155 ms |
- | student@host's password: | + | 64 bytes from green (192.168.2.2): icmp_req=2 ttl=63 time=0.086 ms |
- | Now try logging into the machine, with "ssh 'student@host'", and check in: | + | [...] |
+ | </code> | ||
- | ~/.ssh/authorized_keys | + | În acest moment, pe stația ''green'' avem captura pachetelor în output-ul comenzii ''tcpdump'':<code> |
+ | 11:18:54.535064 IP host > green: ICMP echo request, id 633, seq 17, length 64 | ||
+ | 11:18:54.535092 IP green > host: ICMP echo reply, id 633, seq 17, length 64 | ||
+ | </code> | ||
- | to make sure we haven't added extra keys that you weren't expecting. | + | Observăm că adresa sursă a pachetelor de tip ''ICMP echo request'' este stația ''host'', nu stația ''red''. Acest lucru se întâmplă din cauză că atunci când am activat NAT nu am specificat pentru ce tip de trafic să aplice politica de translatare. Astfel stația ''host'' aplică politica de NAT pentru tot traficul care o tranzitează. Dorim să aplicăm politica doar pentru pachetele ce **ies** în Internet, adică cele ale căror **interfață de ieșire** este interfața ''eth0''. Vom șterge vechea regulă de NAT și vom adăuga o regulă corectă. |
- | corina@blue:~$ ssh -l student host | + | Pentru ștergerea vechii reguli de NAT rulăm pe stația ''host'' comanda<code bash> |
- | [...] | + | root@host:~# iptables -t nat -D POSTROUTING -j MASQUERADE |
- | student@host:~$ | + | </code> |
+ | Verificăm faptul că nu mai există comanda<code bash> | ||
+ | root@host:~# iptables -t nat -L POSTROUTING -n -v | ||
+ | Chain POSTROUTING (policy ACCEPT 1 packets, 328 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | </code> | ||
+ | Adăugăm din nou regula de NAT, dar de data aceasta vom specifica să aplice politica de NAT pachetelor ce ies prin interfața ''eth0'' a stației ''host'':<code bash> | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
</code> | </code> | ||
- | </solution> | + | Verificați că regula a fost inserată:<code bash> |
- | </hidden> | + | root@host:~# iptables -t nat -L POSTROUTING -n -v |
+ | Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 | ||
+ | </code> | ||
+ | Observăm prezența interfaței ''eth0'' în coloana ''out''. Înainte apărea caracterul ''*'', adică orice interfață. | ||
+ | |||
+ | Repetați testul de la începutul exercițiului și arătați că pachetele trimise de la ''red'' către ''green'' au adresele IP sursă/destinație nemodificate (nu mai fac trecerea prin NAT), în vreme ce pachetele ce ies în Internet sunt translatate. |