6. [10p] Blocare servicii necriptate

Prezentare scurtă iptables (dați click)

Prezentare scurtă iptables (dați click)

iptables este un utilitar Linux care oferă și rol de firewall software. iptables folosește suportul nucleului pentru a intercepta pachete de rețea în diverse puncte ale trecerii acestora prin nucleu și a efectua acțiuni asupra acestora. Astfel de acțiuni sunt:

  • acceptarea pachetului (ACCEPT)
  • respingerea pachetului (REJECT)
  • aruncarea pachetului (DROP), similar cu respingerea dar nu se transmite nici o notificare de respingere către cel care a transmis pachetul inițial

O diagramă a drumului urmat de un pachet de rețea în nucleu este aici.

Comanda iptables înseamnă lucrul cu reguli de filtrare de la nivelul nucleului. În mod obișnuit se va preciza:

  • tipul de operație pe regulă (adăugare, ștergere, înlocuire, inserare)
  • punctul din nucleul în care trebuie să se găsească pachetul pentru a se aplica regula
  • regula în sine

De exemplu, comanda de mai jos are semnificația descrisă în continuare:

iptables -A FORWARD -d green -p tcp --dport telnet -j REJECT
  • -A: se adaugă regulă (este vorba de append, se adaugă la finalul listei de reguli);
  • FORWARD: regula se aplică pachetelor care vor fi rutate; alte variante sunt INPUT (pachetele primite direct de sistem) și OUTPUT (pachetele care pleacă de la sistem);
  • -d green: sunt selectate pachetele care au ca destinație adresa stației green;
  • -p tcp: pachetele selectate sunt pachete TCP;
  • --dport telnet: portul TCP destinație este portul specific protocolului telnet (adică portul 23, identificat din fișierul /etc/services)
  • -j REJECT: pachetul este respins

În tabela de filtrare aferentă iptables vom avea, așadar, o listă de reguli care sunt parcurse secvențial. Partea -A FORWARD identifică lanțul de reguli, partea -d green -p tcp --dport telnet este partea de match (ce pachete fac match pe regulă), iar partea -j REJECT este partea de acțiune (ce face regula cu pachetul).

După cum ați observat la punctul anterior, traficul pentru protocoalele telnet și FTP este trafic în clar, necriptat, putându-se afla cu ușurință credențialele unui anumit cont și comenzile rulate.

Ne propunem să blocăm accesul de la stația red către stația green pentru aceste servicii, configurând ruterul dintre cele două stații, adică stația host. Practic vom configura pe stația host opțiuni de firewall cu ajutorul utilitarului iptables.

Autentificați-vă prin SSH ca root pe stația host. Pentru a bloca accesul la serviciul telnet (port 23) destinat stației green, rulați pe stația host comanda de mai jos. Comanda adaugă regula iptables corespunzătoare.

root@host:~# iptables -A FORWARD -d green -p tcp --dport telnet -j REJECT

Pentru a verifica adăugarea regulii de mai sus, rulați pe stația host comanda

root@host:~# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             green                tcp dpt:telnet reject-with icmp-port-unreachable

Pentru a afișa informații și despre pachetele prelucrate și interfețele folosite, rulați pe stația host comanda

root@host:~# iptables -L FORWARD -v
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  any    any     anywhere             green                tcp dpt:telnet reject-with icmp-port-unreachable

Pentru a afișa informații în format numeric (pentru nume de stații și nume de porturi), rulați pe stația host comanda

root@host:~# iptables -L FORWARD -v -n
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            192.168.2.2          tcp dpt:23 reject-with icmp-port-unreachable

De acum înainte recomandăm folosirea acestor opțiuni (-v -n) pentru listarea regulilor iptables.

Pentru a verifica blocarea traficului telnet către green, rulați pe stația red comanda

telnet green

Vă apare un mesaj de forma

Trying 192.168.2.2...
telnet: Unable to connect to remote host: Connection refused

semnificând faptul că se încearcă realizarea conexiunii dar conexiunea este respinsă

Pentru a vedea că regula de blocare a funcționat, rulați din nou pe stația host comanda

root@host:~# iptables -L FORWARD -v -n
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   120 REJECT     tcp  --  *      *       0.0.0.0/0            192.168.2.2          tcp dpt:23 reject-with icmp-port-unreachable

Observați, în output-ul comenzii, că există acum valori diferite de 0 în coloana pkts și bytes, semn că au fost pachete prelucrate de această regulă, deci blocate.

Pentru a verifica funcționarea în continuare a altor conexiuni (diferite de telnet) de la red la green, rulați pe stația red comenzile

ftp green
ssh -l student green

Dorim să blocăm și celălalt serviciu necriptat, FTP. Adăugați o regulă iptables similară pentru a bloca, pe stația host, traficul FTP destinat stației green. După adăugarea regulii folosiți iptables -L FORWARD -n -v pentru a valida adăugarea regulii.

Pentru această regulă puteți transmite argumentul 21 opțiunii --dport sau chiar numele ftp. Asocierea între port (număr) și protocol (nume) se găsește în fișierul /etc/services.

De pe stația red verificați blocarea traficului FTP către stația green folosind comanda

ftp green