Bàsics d'Iptables

Iptables és un programa del kernel de Linux que té com a funció filtrar els paquets de xarxa i pot actuar sobre aquests modificant-ne certs paràmetres.

El seu funcionament és senzill: quan un paquet creua el nostre sistema Linux, anirà passant per les diverses taules fins que compleixi alguna regla i se li aplicarà la acció que tingui associada.

En aquest post explicarem més a fons el recorregut d’un paquet, les taules amb les chains que contenen i les regles dins les chains.

Un paquet de xarxa pot tenir varies rutes, segons on s’origina i a qui va destinat. Per explicar-ho utilitzarem el següent diagrama.

On la interfície de xarxa 1 és on entra un paquet des d’un equip extern (per exemple un altre pc de la xarxa), la interfície 2 és el que connecta amb un altre equip extern (per exemple un altre ordinador), i els processos locals són processos del nostre ordinador.

Tots els paquets que venen d’una interfície de xarxa, venen de fora del nostre equip, i si van cap a un procès local, són processos destinats al nostre sistema. Quan els enviem és el mateix, si venen d’un procès local vol dir que tenen com a origen el nostre equip, i si van a una interfície de xarxa, vol dir que van a un equip extern.

Ara ens centrarem en les taules i les chains i més endavant explicarem amb un nou diagrama alló que haurem afegit.

Les taules són conjunts de regles que són qui decideix com es tractaran els paquets, ja sigui deixant-los passar, bloquejant-ne el pas o modificant-los.

Hi ha 5 taules, cadascuna especialitzada en un tipus de processament dels paquets, tot i que les més utilitzades són 3 (Filter, NAT i Mangle):

S’utilitza pel filtrat de paquets. Els paquets que compleixin les regles que especifiquem a aquesta taula seguiran el target (acció) especificat. Els principals targets d’aquesta taula són: ACCEPT (deixar passar el paquet), DROP (descartar el paquet) i REJECT (descartar el paquet i notificar amb ICMP a l’emissor), tot i que n’hi ha més.

Les chains associades a aquesta taula són:

  • INPUT: Paquets destinats a la màquina local.

  • FORWARD: Paquets que venen de fora la màquina i van també cap a fora (origen i destí diferents a la màquina local, és a dir, la travessen).

  • OUTPUT: Paquets originats a la màquina local.

S’utilitza per traduir adreces de xarxa, com redireccions per exemple. Als paquets se’ls pot alterar la IP o el port segons les regles definides. Els principals targets d’aquesta taula són: DNAT (modifica el destí dels paquets), SNAT (modifica l’origen dels paquets), MASQUERADE (tradueix IPs privades internes a una sola pública) i REDIRECT (redirigeix els paquets a un port diferent).

Les chains associades a aquesta taula són:

  • PREROUTING: Els paquets es modifiquen abans de ser enrutats.

  • OUTPUT: Els paquets són alterats al originar-se al firewall.

  • POSTROUTING: Els paquets són alterats desprès d’enrutar-se.

S’utilitza per modificar els paquets. Els principals targets d’aquesta taula són: MARK (marca els paquets), TOS (modifica el camp Type of Service), TTL (modifica el valor Time to Live).

Les chains associades a aquesta taula són:

  • PREROUTING: Els paquets són modificats abans de ser enrutats.

  • INPUT: Els paquets modificats són els que tenen com a destí el firewall.

  • FORWARD: Els paquets modificats són els que passen a través del router (ni origen ni destí és l’equip local).

  • OUTPUT: Es modifiquen els paquets que s’originen al router.

  • POSTROUTING: Els paquets es modifiquen un cop enrutats.

Aquesta taula s’utilitza per realitzar excepcions al seguiment d’estat dels paquets. Els seus principals targets són: NOTRACK (envia una ordre de no fer seguiment d’estat als paquets) i LOG (registra informació del paquet).

Les chains associades a aquesta taula són:

  • PREROUTING: S’aplica als paquets que encara no han estat enrutats.

  • OUTPUT: S’aplica als paquets que tenen com a origen la màquina local.

La taula security s’utilitza amb SELinux per poder aplicar polítiques de seguretat als paquets. Els seus principals targets són: SECMARK (marca els paquets per polítiques de seguretat), CONNSECMARK (propaga les etiquetes de seguretat entre paquets dins la mateixa connexió) i DROP (descarta el paquet).

Les chains associades a aquesta taula són:

  • INPUT: Les configuracions s’apliquen als paquets entrants.

  • OUTPUT: Les configuracions s’apliquen als paquets sortints.

  • FORWARD: Les configuracions s’apliquen als paquets que travessen l’equip (origen i destí diferents al sistema local).

Per tant, una ruta d’un paquet quedaria així:

Si un paquet ve des de fora i va cap a fora, entrarà per la interfície 1, passarà per la chain PREROUTING on podran actuar les taules NAT, MANGLE i RAW, seguirà cap a fora (FORWARD), arribarà a la chain POSTROUTING, on podran actuar les taules NAT i MANGLE i posteriorment deixarà l’equip.

Si el paquet va del firewall cap a fora, partirà de Firewall (veure esquema), passarà per OUTPUT on podran actuar les taule FILTER, NAT, MANGLE, RAW i SECURITY, seguirà per POSTROUTING i sortirà del sistema.

Si el paquet ve de fora i el destí és el sistema, partirà de la interfície de xarxa 1, passarà per PREROUTING, entrarà a INPUT on podran actuar les taules FILTER, MANGLE i SECURITY i finalment es quedarà al Firewall.

Fins aquí el post d’avui, aviat en faré un explicant com manejar iptables en CLI, on configurarem un firewall bàsic amb Linux des de zero. Pots deixar un comentari o compartir si creus que és útil. Ens veiem al següent!