This shows you the differences between two versions of the page.
rl:labs:08:contents:05 [2013/11/20 21:05] razvan.deaconescu [5. Ștergere reguli adăugate] |
rl:labs:08:contents:05 [2023/11/05 12:55] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 5. Ștergere reguli adăugate ==== | + | ==== 05. [10p] Port forwarding ==== |
- | Pentru a permite tot traficul către stația ''green'', ștergeți pe stația ''host'' toate regulile ''iptables'' din lanțul ''FORWARD''. Folosiți opțiunea ''-F'' (//flush//) a comenzii ''iptables''. Practic revenim la situația inițială, fără reguli ''iptables'' pe stația ''host''. Folosiți comanda ''iptables -L FORWARD -n -v'' pentru a valida ștergerea regulilor din lanțul ''FORWARD''. | + | 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//. |
- | <solution -hidden> | + | 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''. |
- | <code bash> | + | |
- | root@host:~# iptables -F FORWARD | + | 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> |
- | root@host:~# iptables -L FORWARD -n -v | + | root@host:~# iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 |
- | Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | + | </code> |
+ | |||
+ | Verificăm aplicarea regulii prin consultarea lanțului ''PREROUTING'' din tabela NAT:<code bash> | ||
+ | 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 | pkts bytes target prot opt in out source destination | ||
- | root@host:~# | + | 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10022 to:192.168.1.2:22 |
</code> | </code> | ||
- | </solution> | ||
- | După ștergerea regulilor verificați funcționarea serviciilor telnet, FTP, SSH prin conectare de la stația ''red'' la stația ''green''. | + | Pentru a verifica rezultatul de mai sus, de pe ''fep.grid.pub.ro'' deschidem un nou terminal și ne conectăm prin SSH folosind portul ''10022'' la stația ''host'':<code bash> |
+ | mihai.carabas@fep:~$ ssh -l student $ADRESA_IP_MV -p 10022 | ||
+ | root@192.168.138.129's password: | ||
+ | [...] | ||
+ | root@red:~# | ||
+ | </code> unde ''$ADRESA_IP_MV'' este adresa IP a masinii virtuale obținută din dashboard-ul OpenStack. | ||
+ | <spoiler Pentru rulare masina virtuala VMware local> | ||
+ | Daca rulați VMware local, ''$ADRESA_IP_MV'' este adresa interfeței ''eth0'' a stației ''host''. | ||
+ | </spoiler> | ||
- | <solution -hidden> | + | Observăm că în urma autentificării ne găsim pe stația ''red''. //Port forwarding// a funcționat. |
- | <code bash> | + | |
- | root@red:~# ftp green | + | |
- | Connected to green. | + | |
- | 220 (vsFTPd 2.3.5) | + | |
- | Name (green:root): ^C | + | |
- | root@red:~# ssh green | + | Folosim comanda de conectare SSH la stația ''host'' de pe stația ''green'':<code bash> |
- | root@green's password: | + | root@green:~# ssh -l student host -p 10022 |
+ | [...] | ||
+ | root@red:~# | ||
+ | </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//. | ||
+ | |||
+ | Ș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''. | ||
+ | |||
+ | <note tip> | ||
+ | Aplicați regula doar pentru pachetele ce **sosesc** pe interfața ''eth0''. Adică ''eth0'' este interfața de **intrare**. Folosiți opțiunea ''-i'' a ''iptables'' pentru precizarea interfeței de **intrare**. | ||
+ | </note> | ||
+ | |||
+ | Realizați apoi din nou conectare SSH pe portul ''10022'' al stației ''host'' de pe ''fep.grid.pub.ro'' ș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 ''fep.grid.pub.ro''. | ||
+ | |||
+ | <hidden> | ||
+ | <solution> | ||
+ | Ș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> | ||
+ | Verificăm conectarea de la ''fep.grid.pub.ro'' și de la stația ''green''. Prima merge în continuare, dar a doua nu mai merge:<code bash> | ||
+ | mihai.carabas@fep:~$ ssh $ADRESA_IP_VM -p 10022 | ||
+ | root@host.local's password: | ||
+ | [...] | ||
+ | root@red:~# | ||
- | root@red:~# telnet green | + | root@green:~# ssh -l student host -p 10022 |
- | Trying 192.168.2.2... | + | ssh: connect to host host port 10022: Connection refused |
- | Connected to green. | + | |
- | Escape character is '^]'. | + | |
- | Ubuntu 12.04.3 LTS | + | |
- | green login: ^CConnection closed by foreign host. | + | |
</code> | </code> | ||
</solution> | </solution> | ||
+ | </hidden> |