UF3-NF1. Filtre d'informació a nivell de xarxa (i/o Transport)

De Wiki IES Marianao. Departament Informàtica
La revisió el 11:36, 11 abr 2012 per Alex (Discussió | contribucions) (traducció d'adreces, NAT)

Dreceres ràpides: navegació, cerca

tornar M11_-_Seguretat_i_alta_disponibilitat#UF3_-_Tallafocs_i_servidors_intermediaris

Filtre d'informació. Nivell de Xarxa (i/o Transport)

Els filtres s'implementen amb política per defecte + Llista de Regles

Les polítiques per defecte depenen del paradigma de seguretat:

  • Permissiu. Política per defecte ACCEPTAR
  • Restrictiu. Política per defecte NEGAR

En els tallafocs de nivell de xarxa, una regla simplement és una condició sobre el paquet, origen, destí, port, protocol, etc... i una acció associada (ACCEPT, DENY, DROP).

En general per a cada paquet, es repassa la llista de regles de manera seqüencial, si una compleix s'executa l'acció associada. Si no compleix cap s'executa la política per defecte.

Tipus de tràfec:

  • Connexions d' entrada, seguretat del propi firewall. Molt important, el firewall és un punt calent de la xarxa, si la seva seguretat es veu compromesa el perímetre es trenca.
  • Connexions de sortida, en general no cal controlar la sortida.
  • Connexions reenviades (xarxa interna <-> Internet), tant d'entrada com de sortida
    • Entrada, control de l'accés als serveis de xarxa que ofereix la LAN.
    • Sortida, accés a dels ordinadors de la zona de confiança a recursos externs (no confiables)


iptables (StateLess)

En Linux la majoria de tallafocs es basen en iptables. Aquesta eina permet implementar les polítiques de filtre típiques dels tallafocs, però a més afegeix altres funcionalitats com traducció d'adreces o modificació dels paquets.

Forma part del framework NetFilter integrat en el nucli de Linux i per tant funciona a molt baix nivell, per tant és ràpida i segura.

S'estructura en taules, cada taula té unes cadenes (Chains) associades, a partir de les quals es creen les regles que s'apliquen als paquets que passen pel tallafocs.

S'organitza en taules:

  • FILTER: Filtre, taula per defecte (Firewall)
    • Cadenes: INPUT, OUTPUT, FORWARD
  • NAT: Traducció d'adreces i reenviament
    • Cadenes: POSTROUTING, PREROUTING (També OUTPUT)
  • MANGLE: Modificació de paquests, afinament
  • RAW: Intercepta paquets en cru (abans que cap altre taula)


A les regles se'ls assigna una acció (target).

  • ACCEPT
  • DROP
  • Target extensions
    • REJECT, només a INPUT, UTPUT, FORWARD, en alguns casos pot retornar un error (ICMP), en qualsevol altre idèntica a DROP
    • LOG, no finalitza, continua a la següent (Per tant en cas de refusar cal indicar 2 regles LOG + DROP)


El resultat de les regles es mostra als missatges del nucli

/var/log/messages
o
/var/log/kern.log

Sintaxi bàsica

iptables -A {CADENA} [options de filtre] -j {ACCIÓ}

#iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT


Algunes opcions:

-A : Afegir una regla
-D : Esborrar una regla
-F : Esborrar totes les regles d'un tipus

-P : política per defecte per una cadena

-v : (Verbose) Permet veure els paquets tractats per cada regla

-Z : Inicialitza els contadors


Filtres. Es poden negar amb el caràcter "!"

-p tcp/udp: A quin protocol s'aplica: tcp, udp, icmp o all
-s IP: IP origen (Source)
-s IP/MASK: 0.0.0.0/0 per qualsevol xarxa
-d IP: IP destí 
-j DROP/ACCEPT # (Jump) Acció que cal fer si el paquet compleix les especificacions
-o eth0: Output interfase
-i eth0: Input interfase
--dport numero


Cadenes personals

-N : crear una cadena personal

-X : Esborrar una cadena personal


traducció d'adreces, NAT

La taula nat de iptables permet gestionar la traducció d'adreces (sortida) i el reenviament (entrada).

Aquesta taula modifica la informació dels paquets i es basa en les cadenes

  • POSTROUTING, per als paquets que passen a través del sistema de sortida, els modifica just abans de sortir. Després d'aplicar les regles FORWARD per exemple.
    • Serveix per configurar el NAT dinàmic. Ordinadors de la xarxa local sortint a Internet amb una adreça pública per exemple.
  • PREROUTING, per als paquets que passen a través del sistema d' entrada, els modifica tant bon punt entren. Abans d'aplicar les regles FORWARD per exemple.
    • Serveix per gestionar els reenviaments. Clients d'Internet, que només tenen accés a l'adreça pública de la xarxa, són reenviats a màquines concretes de la xarxa local per exemple.
  • OUTPUT, generats pel propi sistema.


Aquestes cadenes tenen nous Targets:

  • DNAT --> PREROUTING (També OUTPUT), canvia IP destí
  • MASQUERADE --> POSTROUTING, nat dinàmic PAT, canvia IP origen
  • SNAT --> POSTROUTING, nat estàtic, canvia IP origen (igual que MASQUERADE però permet un pool d'adreces externes)
Exemples
# NAT de sortida, eth0 és la interfase de sortida dels paquets. Activació del bit de forward (enrutament entre interfases)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Redirecció del tràfec al port 80 entrant a la interfase eth0, al port 80 de la màquina 192.168.10.12
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.12:80
# SNAT de sortida
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 --to-source 194.236.50.155-194.236.50.160:1024-32000 -j SNAT

Dport-routing-02.png

http://www.sysresccd.org/images/dport-routing-02.png

iptables (StateFull)

Addicionalment, iptables permet el tractament de l'estat de les connexions.

Les comunicacions client-servidor es poden veure com:

  • Nivell de xarxa, intercanvi de paquets
  • Nivell de transport (TCP), establiment d'una connexió, una connexió passa per diferents estats.

Amb el mòdul (match) state es pot diferenciar entre aquests estats

  • NEW, comença nova connexió
  • ESTABLISHED, paquet associat a una connexió existent
  • RELATED, comença nova connexió secundària, associada a una existent (p.e. FTP)
  • INVALID, qualsevol altre

Pot interessar per exemple deixar sortir connexions noves (NEW) però només deixar entrar connexions establertes o secundàries (ESTABLISHED - RELATED), d'aquesta manera impedir l'inici de connexions contra el servidor o altres màquines de la xarxa.

iptables -A FORWARD -i eth1 -m state ! --state INVALID -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A FORWARD -j DROP

Més ...

Tutorial molt complet

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html

Alguns exemples per a protocols concrets

http://ocw.uv.es/ingenieria-y-arquitectura/seguridad/3Seguridad_perimetrica.pdf

http://www.mmc.igeofcu.unam.mx/LuCAS/Manuales-LuCAS/doc-unixsec/unixsec-html/node252.html