This shows you the differences between two versions of the page.
rl:labs:08:contents:04 [2020/12/10 18:23] florin.stancu [4. [10p] Copiere fișiere cu diverse protocoale: durată și consum de resurse] fix ftp |
rl:labs:08:contents:04 [2023/11/05 12:54] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 4. [10p] Copiere fișiere cu diverse protocoale: durată și consum de resurse ==== | + | ==== 04. [10p] Configurare incorectă a translatării ==== |
- | Ne propunem să măsurăm timpul de copiere și consumul de resurse pentru un transfer realizat între două stații folosind, pe rând, transfer direct, FTP și SSH. În directorul home al utilizatorului ''student'' de pe stația ''green'' există un fișier ''file-100M.dat''. Vom transfera acest fișier în directorul home al utilizatorului ''student'' de pe stația ''host''. Vom folosi transfer direct, transfer FTP și transfer SSH. Pentru fiecare caz, stația ''host'' va rula server-ul, iar stația ''green'' clientul. | + | Comanda folosită mai sus pentru translatare, la [[:rl:labs:09:contents:01]], are neajunsuri pe care le vom identifica mai jos. |
- | <note tip> | ||
- | Dați copy-paste la comenzile de mai jos ca să vă asigurați că le scrieți corect. Pentru paste folosiți, în terminal, combinația de taste ''Shift+Insert''. | ||
- | </note> | ||
- | **Transfer direct** | + | Pe stația ''green'' capturăm traficul pe interfața ''green-eth0'' folosind comanda ''tcpdump'':<code bash> |
+ | root@green:~# tcpdump -i green-eth0 | ||
+ | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | ||
+ | listening on green-eth0, link-type EN10MB (Ethernet), capture size 65535 bytes | ||
+ | </code> | ||
- | Pentru transfer direct vom porni un server simplu TCP pe stația ''host'' și un client pe stația ''green''; vom folosi utilitarul ''netcat'', prescurtat și ''nc''. Rulați pe stația ''host'', în contul utilizatorului ''student'', comanda<code bash> | + | Pe stația ''red'' executăm comanda ''ping'' către stația ''green'':<code bash> |
- | student@host:~$ nc -l 12345 > file-100M-nc.dat | + | root@red:~# ping -c 2 green |
- | </code> Comanda deschide un server TCP care ascultă conexiuni pe portul ''12345''. Comanda rămâne activă în așteptarea unei conexiuni de la un client. | + | PING green (192.168.2.2) 56(84) bytes of data. |
+ | 64 bytes from green (192.168.2.2): icmp_req=1 ttl=63 time=0.155 ms | ||
+ | 64 bytes from green (192.168.2.2): icmp_req=2 ttl=63 time=0.086 ms | ||
+ | [...] | ||
+ | </code> | ||
- | De pe stația ''green'', din contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii((În cazul unui transfer prin rețea folosind ''netcat'' nu se face verificare de integritate (//integrity check//). Există riscul (mic, dar există) ca fișierul să nu fie transferat corespunzător. De aceea e bine să verificați integritatea acestuia prin calcularea sumei de control (//checksum//) folosind, de exemplu, utilitarul ''sha512sum''.))<code bash> | + | În acest moment, pe stația ''green'' avem captura pachetelor în output-ul comenzii ''tcpdump'':<code> |
- | student@green:~$ time cat file-100M.dat | nc -q0 host 12345 | + | 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> | </code> | ||
- | Comanda de mai sus trimite un fișier comenzii ''nc'', iar comanda ''nc'' are rolul unui client TCP care se conectează la stația ''host'' pe portul ''12345''. | + | 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ă. |
- | **Transfer FTP** | + | Pentru ștergerea vechii reguli de NAT rulăm pe stația ''host'' comanda<code bash> |
- | + | root@host:~# iptables -t nat -D POSTROUTING -j MASQUERADE | |
- | Pentru transfer FTP, serverul de FTP este deja pornit pe stația ''host''. De pe stația ''green'', din contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii<code bash> | + | </code> |
- | student@green:~$ time curl -T file-100M.dat -u student:student ftp://red/file-100M-ftp.dat | + | 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> | </code> | ||
- | **Transfer SSH** | + | 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 | |
- | Pentru transfer SSH, serverul de SSH este deja pornit și configurat pe stația ''host''. De pe stația ''green'', în contul utilizatorului ''student'', transferați fișierul și măsurați timpul de transfer și consumul de resurse prin rularea comenzii<code bash> | + | </code> |
- | student@green:~$ time scp file-100M.dat student@host:file-100M-scp.dat | + | Verificați că regula a fost inserată:<code bash> |
+ | 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> | </code> | ||
+ | Observăm prezența interfaței ''eth0'' în coloana ''out''. Înainte apărea caracterul ''*'', adică orice interfață. | ||
- | Urmăriți timpii de rulare și consumul de memorie și de procesor pentru cele trei cazuri de mai sus. Observați valorile ridicate pentru SSH pentru timpul utilizator (//User time//) și procentul de procesor (//Percent of CPU//). Acesta valori ridicate se datorează componentei de criptare a SSH: această componentă asigură securizarea datelor cu un cost de reducere de performanță. | + | 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. |