Differences

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

Link to this comparison view

rl:labs:09:contents:05 [2013/11/28 09:02]
razvan.deaconescu [05. [10p] Port forwarding]
rl:labs:09:contents:05 [2023/11/05 13:08] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 05. [10pPort forwarding ​====+==== 05. [5pAccesare URL conținând caractere speciale ​====
  
-La exercițiile de până acum am folosit NAT pentru a permite stațiilor cu adrese private dintr-o 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//​.+Unele URL-uri pot avea caractere interpretate special în shell rezultând într-un comportament ciudat la descărcare.
  
-Dorim să putem accesa prin SSH, din 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''​.+Pentru a evidenția acest lucru, pe stația ''​host'' ​folosiți pentru a descărca resursa de la link-ul ​''​%%http://​localhost/​login.php?​name=Lab10&​email=rl@upb.ro%%''​:<code bash> 
 +root@host:​~# ​ wget http://localhost/login.php?​name=Lab10&​email=rl@upb.ro 
 +[1] 3284 
 +root@host:​~#​ --2013-12-05 09:​02:​10-- ​ http://​localhost/​login.php?​name=Lab10 
 +Resolving localhost (localhost)... 127.0.0.1 
 +Connecting to localhost ​(localhost)|127.0.0.1|:​80... connected. 
 +HTTP request sent, awaiting response... 200 OK 
 +Length: 72 [text/​html] 
 +Saving to: `login.php?​name=Lab10'​
  
-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> +100%[======================================>] 72          ​--.-K/s   in 0s      ​
-root@host:​~#​ iptables ​-t nat -A PREROUTING ​-p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:​22 +
-</code>+
  
-Verificăm aplicarea regulii prin consultarea lanțului ''​PREROUTING''​ din tabela NAT:<code bash> +2013-12-05 09:02:10 (13.3 MB/s- `login.php?​name=Lab10'​ saved [72/72] 
-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 ​         +[1]+  Done                    wget http://localhost/​login.php?​name=Lab10 
-    ​0 ​    0 DNAT       ​tcp ​ --  *      *       ​0.0.0.0/0            0.0.0.0/0            tcp dpt:10022 to:192.168.1.2:22+root@host:~#
 </​code>​ </​code>​
  
-Pentru a verifica rezultatul ​de mai susde pe sistemul fizic (stația fizică, ''​mjolnir''​) deschidem un nou terminal și 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  +După output-ul comenzii ​de mai, pentru a vă reapărea prompt-ul consoleiapăsați pe ''​Enter'' ​ca să vă reapară prompt-ul
-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.+Observați ​că procesul intră în background (linia cu ''​[1] 3284''​ înseamnă că a fost pornit un job). Acest lucru se întâmplă întrucât simbolul ​''​&'' ​(//ampersand//) nu este escapat și se folosește rolul său special din shell: pornirea unui proces în background. Se observă din output că este separată comanda înainte de ''&'',​ adică rezultă comanda ''​wget http://​localhost/​login.php?​name=Lab10''​.
  
-Folosim ​comanda ​de conectare SSH de mai sus de pe stația ''​green''​:<code bash> +Ștergeți fișierul descărcat prin comanda de mai sus:<​code bash> 
-root@green:~# ssh -l root $ADRESA_IP_MV -p 10022 +root@host:~# ls 
-[...] +PacketTracer5 ​ folder ​ login.php?​name=Lab10 
-root@red:~# +root@host:​~#​ rm login.php\?​name\=Lab10 
 +root@host:~# ls 
 +PacketTracer5 ​ folder
 </​code>​ </​code>​
  
-Observăm că ș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//​.+Folosiț[[http://steve-parker.org/sh/escape.shtml|escaping în shell]] pentru a folosi în mod corect URL-ul și pentru a descărca resursa disponibilă la acel link.
  
-Ș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''​.+Fișierul final descărcat trebuie să arate în acest fel (să conțină //Lab10// și //​rl@upb.ro//​). Folosiți ''​cat log<​TAB>''​ pentru rula comanda de mai jos, ca să obțineți ​//autocompletion// din partea shell-ului (''​<TAB>'' ​înseamnă apăsarea tastei ''​TAB''​):<​code bash> 
 +root@host:​~#​ cat login.php\?​name\=Lab10\&​email\=rl@upb.ro 
 +<​html>​ 
 +<​body>​
  
-<note tip+Welcome Lab10<br
-Aplicați regula doar pentru pachetele ce **sosesc** pe interfața ''​eth0''​. Adică ''​eth0''​ este interfața de **intrare**+Your email address is: rl@upb.ro 
-</note+</body
- +</​html>​ 
-Realizați apoi din nou conectare SSH pe portul ''​10022''​ al stației ''​host''​ de pe stația fizică și de pe stația ''​green''​. Dacă ați configurat corect, nu va merge conexiunea SSH de pe stația ''​green''​ dar va merge în continuare de pe stația fizică.+</​code>​
  
-<solution -hidden>​ +<​hidden>​ 
-Ștergem vechea regulă și aplicăm regula nouă, ce ține cont de interfața de intrare:<code bash> +<​solution>​ 
-root@host:​~# ​iptables -t nat -D PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 +Cel mai simplu este să plasăm întregul URL între apostroafe:<code bash> 
-root@host:​~#​ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:​22 +root@host:​~# ​wget 'http://localhost/​login.php?​name=Lab10&​email=rl@upb.ro'
-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> +Resursa ​de la acel URL se va descărca în mod corect:<code bash> 
-student@mjolnir:​~$ ssh $ADRESA_IP_VM -p 10022 +root@host:~# cat /​var/​www/​login.php  
-root@host.local'​s password +<​html>​ 
-[...] +<​body>​
-root@red:~#+
  
-root@green:​~#​ ssh -l root 192.168.56.101 -p 10022 +Welcome <?php echo $_GET["​name"​];​ ?><​br>​ 
-sshconnect to host 192.168.56.101 port 10022: Connection refused+Your email address is<?php echo $_GET["​email"​];​ ?> 
 +</​body>​ 
 +</​html>​
 </​code>​ </​code>​
 </​solution>​ </​solution>​
 +</​hidden>​
rl/labs/09/contents/05.1385622157.txt.gz · Last modified: 2013/11/28 09:02 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