Differences

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

Link to this comparison view

rl:labs:09:contents:04 [2013/11/26 11:13]
razvan.deaconescu [04. Tutorial port forwarding (DNAT)]
rl:labs:09:contents:04 [2024/12/04 17:52] (current)
laura.ruse [04. [15p] Descărcare recursivă de resurse web]
Line 1: Line 1:
-==== 05Port forwarding ​====+==== 04[15p] Descărcare recursivă de resurse web ====
  
-La exercițiile de până acum am folosit NAT pentru a permite stațiilor cu adrese private dintr-rețea locală să acceseze Internetul. NAT poate fi folosit ​și pentru a permite unei stații din rețeaua locală să fie accesată din Internet, adică să se inițieze conexiuni din Internet. Acest proces poartă numele de //port forwarding//​.+La adresa ''​%%http://​red/​folder%%''​ se află o structură de directoare și fișiere. Pe stația ''​host'',​ descărcați întreaga structură folosind o singură comandă ''​wget''​ cu parametrul corespunzător.
  
-Dorim să putem accesa prin SSHdin Internet, stația ''​red''​. Acest lucru nu este posibil ​în mod implicit întrucât stația ​''​red'' ​are adresă IP privată. Soluția este "​deschiderea unui port" pe gateway (adică stația ''​host''​) ​și redirectarea acestui port (//port forwarding//​) către portul aferent serviciului SSH (portul TCP ''​22''​) de pe stația ''​red''​.+<note tip> 
 +Pentru a identifica opțiunea corespunzătoarecăutațîn pagina de manual a ''​wget'' ​după șirul ''​recursive''​. 
 +</​note>​
  
-Vom aplica pe stația ''​host'' ​o regulă prin care redirectăm traficul ce vine către ​''​host''​ pe portul ​''​10022'' ​către portul ''​22''​ (SSH) al stației ''​red''​ (adresa IP ''​192.168.1.2''​):<code bash> +Folosiți utilitarul ​''​tree'' ​pentru a lista conținutul directorului descărcat. Este posibil ca pachetul ​''​tree'' ​să fie deja instalat ​pe ''​host''​. Dacă nu este instalat, atunci puteți folosi următoarea comandă pentru a-l instala: 
-root@host:​~# ​iptables ​-t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-dest red:22+<code bash> 
 +root@host:​~# ​apt-get install tree
 </​code>​ </​code>​
  
-Verificăm aplicarea regulii prin consultarea lanțului ''​PREROUTING'' ​din tabela NAT:<​code bash> +Când rulați ''​tree''​ pe directorul descărcat observați prezența mai multor fișiere cu nume de forma ''​index.html?​C=S;​O=D''​. ​Aceste fișiere sunt fișiere de tip directory listing generate de serverul web și nu avem nevoie de eleȘtergeți structura de directoare pe care tocmai ați descărcat-o pe stația ''​host''​ și descărcați-o din nou ignorând aceste fișiere.
-root@host:​~#​ iptables -t nat -L PREROUTING -n -v +
-Chain PREROUTING (policy ACCEPT 1 packets, 474 bytes) +
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +
-    0     0 DNAT       ​tcp ​ --  *      *       0.0.0.0/0            0.0.0.0/​0 ​           tcp dpt:10022 to:​192.168.1.2:22 +
-</​code>​+
  
-Pentru a verifica rezultatul de mai sus, de pe sistemul fizic (stația fizică, ''​mjolnir''​) deschidem un nou terminal șne conectăm prin SSH folosind portul ''​10022''​ la stația ''​host''​:<code bash> +<note tip> 
-student@mjolnir:​~$ ssh -l root $ADRESA_IP_MV ​-p 10022  +Urmărițdiscuția de [[http://​stackoverflow.com/​questions/​273743/​using-wget-to-recursively-fetch-a-directory-with-arbitrary-files-in-it|aici]]Să aveți în vedere și partea din discuția care conține șirul //​%%"​without the hostname"​%%//​
-root@192.168.138.129'​s password: +</note>
-[...] +
-root@red:~# +
-</codeunde ''​$ADRESA_IP_MV''​ este adresa interfeței ''​eth0''​ a stației ''​host''​.+
  
-Observăm că în urma autentificării ne găsim pe stația ''​red''​. ​//Port forwarding//​ a funcționat.+Structura de directoare trebuie să fie similară cu:<​code>​ 
 +root@host:​~#​ tree folder/ 
 +folder/ 
 +├── embedded 
 +│   ├── Qualcomm 
 +│   │   ├── Krait 
 +│   │   │   └── info.txt 
 +│   │   └── Scorpion 
 +│   │   ​    ​└── info.txt 
 +│   └── TI 
 +│   ​    ​├── OMAP3 
 +│   ​    ​│   └── info.txt 
 +│   ​    ​└── OMAP4 
 +│   ​        ​└── info.txt 
 +└── mobile 
 +    ├── Apple 
 +    │   ├── iPadAir 
 +    │   │   └── info.txt 
 +    │   └── iPhone5S 
 +    │   ​    ​└── info.txt 
 +    └── Google 
 +        ├── Nexus4 
 +        │   └── info.txt 
 +        └── Nexus7 
 +            └── info.txt
  
-Folosim comanda de conectare SSH de mai sus de pe stația ''​green'':<​code bash> +14 directories,​ 8 files
-root@green:​~#​ ssh -l root $ADRESA_IP_MV -p 10022 +
-[...] +
-root@red:​~# ​+
 </​code>​ </​code>​
  
-Observăm că și de pe stația ''​green''​ am accesat stația ''​red''​ prin //port forwarding//​. Dorim să limităm //port forwarding//​ doar pentru conexiuni de la stațiile din Internet. Pentru aceasta trebuie să actualizăm regula de //port forwarding//​. +<​hidden>​ 
- +<​solution>​ 
-Ștergeți regula de //port forwarding//​ și adăugați o regulă nouă care să permită **doar** stațiilor din Internet să acceseze prin //port forwarding//​ stația ​''​red''​+Pentru descărcarea inițială folosim comanda ​''​wget'' ​cu opțiunea ''​-r'' ​apoi rulă''​tree'':<​code bash> 
- +root@host:​~# ​wget -r http://​red/​folder/​ 
-<note tip> +[...] 
-Aplicați regula doar pentru pachetele ce **sosesc** pe interfața ​''​eth0''​. Adică ''​eth0'' ​este interfața de **intrare**. +root@host:​~# ​tree red/ 
-</​note>​ +[...]
- +
-<​solution -hidden>​ +
-Ștergem vechea regulă și aplicăm regula nouă, ce ține cont de interfața de intrare:<code bash> +
-root@host:​~# ​iptables ​-t nat -D PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 +
-root@host:​~#​ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 +
-root@host:​~# ​iptables -t nat -L PREROUTING -n -v +
-Chain PREROUTING (policy ACCEPT 1 packets, 474 bytes) +
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +
-    0     0 DNAT       ​tcp ​ --  eth0   ​* ​      0.0.0.0/0            0.0.0.0/​0 ​           tcp dpt:10022 to:​192.168.1.2:​22+
 </​code>​ </​code>​
-Verificăm conectarea de la stația fizică și de la stația ''​green''​. Prima merge în continuare, dar a doua nu mai merge:<code bash> +Ștergem vechea structură:<code bash> 
-student@mjolnir:~$ ssh $ADRESA_IP_VM ​-p 10022 +root@host:~# rm -fr folder/ 
-root@host.local's password +</​code>​ 
-[...] +Ca să avem un output mai aranjat, rulăm următoarea comandă ''​wget'​':<code bash> 
-root@red:~# +root@host:~# wget --nH -np --reject "index.html*" http://​red/​folder/​
- +
-root@green:​~#​ ssh -l root 192.168.56.101 ​-p 10022 +
-ssh: connect to host 192.168.56.101 port 10022Connection refused+
 </​code>​ </​code>​
 +Se vor descărca astfel doar fișierele utile, cele existente în structura de directoare de pe server.
 </​solution>​ </​solution>​
 +</​hidden>​
rl/labs/09/contents/04.1385457208.txt.gz · Last modified: 2013/11/26 11:13 by razvan.deaconescu
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