This shows you the differences between two versions of the page.
rl:labs:08:contents:11 [2020/09/13 07:15] iulia.florea |
rl:labs:08:contents:11 [2023/11/05 12:57] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 11. [5p] Blocare SSH ==== | + | ==== 11. [BONUS - 10p] Translatare selectivă de adrese ==== |
- | Ne propunem ca stația ''green'' să nu fie acesibilă nici prin SSH. Pentru aceasta adăugați pe stația ''host'' o regulă ''iptables'' care va bloca traficul aferent serviciului SSH (portul 22). | + | Pentru situația în care adresa IP exterioară a gateway-ului este adresă statică (nu dinamică) se recomandă folosirea acțiunii ''SNAT'' în loc de ''MASQUERADE'' la translatarea de adrese. Pe lângă aceasta, SNAT are avantajul precizării unui spațiu de adrese care să fie noile adrese (cele substituite) și a porturilor. |
- | <hidden> | + | <note tip> |
- | <solution> | + | Informații despre folosirea ''SNAT'' și diferența dintre ''SNAT'' și ''MASQUERADE'' găsiți [[http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html|aici]]. |
- | <code bash> | + | </note> |
- | root@host:~# iptables -A FORWARD -d green -p tcp --dport ssh -j DROP | + | |
- | </code> | + | |
- | </solution> | + | |
- | </hidden> | + | |
- | Verificați adăugarea regulii ''iptables'' și apoi verificați de pe stația ''red'' blocarea traficului SSH către stația ''green''. | + | Ștergeți regula anterioară de tip ''MASQUERADE'' și folosiți reguli de tip ''SNAT'' pentru a face următoarele translatări: |
+ | * conexiunile TCP către Internet de la stația ''red'' să iasă prin porturi din spațiul ''45000-50000''; | ||
+ | * conexiunile TCP către Internet de la stația ''green'' să iasă prin porturi din spațiul ''50000-55000''; | ||
+ | * conexiunile TCP către Internet de la stația ''blue'' să iasă prin porturi din spațiul ''55000-60000''; | ||
+ | * toate celelalte conexiuni să fie realizate în mod obișnuit, având ca adresă sursă adresa IP de exterior a stației ''host'' (această regulă trebuie să fie ultima). | ||
+ | |||
+ | Verificați translatarea corectă inițiind conexiuni HTTP (folosind ''wget'') către ''cs.pub.ro'' de pe fiecare dintre cele trei stații de tip container (''red'', ''green'' și ''blue'') și folosind ''tcpdump'' pe stația ''host'' pentru a captura traficul aferent. | ||
<hidden> | <hidden> | ||
<solution> | <solution> | ||
- | <code bash> | + | Ștergem regula de tip ''MASQUERADE'', adăugăm cele patru reguli de tip ''SNAT'' și verificăm prezența acestora în tabela ''nat'':<code bash> |
- | root@host:~# iptables -L FORWARD -n -v | + | root@host:~# iptables -t nat -F POSTROUTING |
- | Chain FORWARD (policy ACCEPT 94 packets, 10307 bytes) | + | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:45000-50000 |
+ | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.2.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:50000-55000 | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -s 192.168.3.2 -p tcp -o eth0 -j SNAT --to-source 192.168.56.101:55000-60000 | ||
+ | root@host:~# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.56.101 | ||
+ | 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 | pkts bytes target prot opt in out source destination | ||
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:23 | + | 0 0 SNAT tcp -- * eth0 192.168.1.2 0.0.0.0/0 to:192.168.56.101:45000-50000 |
- | 0 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:21 | + | 0 0 SNAT tcp -- * eth0 192.168.2.2 0.0.0.0/0 to:192.168.56.101:50000-55000 |
- | 0 0 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:22 | + | 0 0 SNAT tcp -- * eth0 192.168.3.2 0.0.0.0/0 to:192.168.56.101:55000-60000 |
+ | 0 0 SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:192.168.56.101 | ||
+ | </code> | ||
- | root@red:~# ssh green | + | Pornim ''tcpdump'' pentru a captura mesaje destinate ''cs.pub.ro'' pe portul ''80'', aferent HTTP:<code bash> |
- | ^C | + | root@host:~# tcpdump -n -i any ip dst host cs.pub.ro and tcp dst port 80 |
- | + | [...] | |
- | root@host:~# iptables -L FORWARD -n -v | + | 16:43:45.683809 IP 192.168.1.2.43031 > 141.85.166.61.80: Flags [.], ack 1461, win 17520, length 0 |
- | Chain FORWARD (policy ACCEPT 94 packets, 10307 bytes) | + | 16:43:45.683836 IP 192.168.56.101.45000 > 141.85.166.61.80: Flags [.], ack 1461, win 17520, length 0 |
- | pkts bytes target prot opt in out source destination | + | 16:43:45.684033 IP 192.168.1.2.43031 > 141.85.166.61.80: Flags [.], ack 2921, win 20440, length 0 |
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:23 | + | 16:43:45.684041 IP 192.168.56.101.45000 > 141.85.166.61.80: Flags [.], ack 2921, win 20440, length 0 |
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:21 | + | [...] |
- | 3 180 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:22 | + | 16:44:12.865807 IP 192.168.2.2.60147 > 141.85.166.61.80: Flags [.], ack 4105, win 23256, length 0 |
+ | 16:44:12.865811 IP 192.168.56.101.50000 > 141.85.166.61.80: Flags [.], ack 4105, win 23256, length 0 | ||
+ | 16:44:12.885166 IP 192.168.2.2.60147 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:12.885175 IP 192.168.56.101.50000 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | [...] | ||
+ | 16:44:27.929672 IP 192.168.3.2.59957 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:27.929683 IP 192.168.56.101.59957 > 141.85.166.61.80: Flags [.], ack 5473, win 25992, length 0 | ||
+ | 16:44:27.929902 IP 192.168.3.2.59957 > 141.85.166.61.80: Flags [.], ack 6841, win 28728, length 0 | ||
+ | 16:44:27.929918 IP 192.168.56.101.59957 > 141.85.166.61.80: Flags [.], ack 6841, win 28728, length 0 | ||
</code> | </code> | ||
+ | Observăm că translatarea TCP se face în spațiul de porturi definit prin regulile de mai sus. | ||
</solution> | </solution> | ||
</hidden> | </hidden> |