Debian: Firewall

Un firewall és un sistema de seguretat que analitza el tràfic entrant i sortint a la xarxa i només deixa passar el que coincideixi amb unes condicions predefinides.

El filtering network gateway és un firewall, que s’instal·la normalment a la màquina, que fa de porta d’entrada entre Internet i la xarxa. Protegeix a tota la xarxa. A part d’aquest, cada màquina pot tenir un firewall local que protegirà exclusivament a la màquina on estigui instal·lat.

Linux té un firewall anomenat netfilter que pots gestionar amb les comandes iptables i ip6tables, depenent de si vols controlar tràfic IPv4 o IPv6. També pots utilitzar l’eina fwbuilder que et permet configurar el firewall sense terminal.

Funcionament

Netfilter utilitza quatre taules diferents per emmagatzemar les regles:

  • filter: regles de filtratge
  • nat: regles que afecten l’origen o destí i als ports
  • mangle: regles que afecten altres canvis als paquets IP
  • raw: permet modificacions manuals dels paquets

Cada taula conté una llista de regles anomenades chains.
La taula filter té tres chains:

  • INPUT: afecta els paquets que tenen com a destinació al mateix firewall
  • OUTPUT: afecta els paquets que surten del firewall
  • FORWARD: afecta els paquets que passen a través del firewall, però que no és ni l’origen ni el destí.

La taula nat té també tres chains:

  • PREROUTING: permet modificar els paquets tan bon punt arriben
  • POSTROUTING: permet modificar els paquets que estan preparats per marxar
  • OUTPUT: permet modificar els paquets generats pel mateix firewall

Cada chain és un llistat de regles. Cada regla conté un conjunt de condicions que realitzen una acció quan la condició es compleix. Quan s’està processant un paquet, el firewall analitza, de la chain apropiada, cada regla, una rere l’altre. Quan una es compleix, executa l’acció i procedeix a analitzar el següent paquet.

Les accions més típiques que pot executar el firewall són:

  • ACCEPT: permet al paquet seguir el seu camí
  • REJECT: rebutja el paquet amb un missatge d’error ICMP
  • DROP: elimina (ignora) el paquet
  • LOG: a través de syslogd, emmagatzema un missatge de log amb la descripció del paquet. Aquesta acció no para l’anàlisi de la chain, per la qual cosa el firewall seguirà amb les següents regles.
  • ULOG: emmagatzema el missatge de log a través de ulogd, que és més eficient que syslog quan s’han de gestionar grans quantitats de logs.
  • MASQUERADE: quan està habilitat a una màquina i aquesta està connectada a Internet, els ordinadors que tinguin connexió amb la màquina podran connectar-se també a Internet, encara que no tinguin una IP assignada (només a la taula nat).
  • REDIRECT: redirigeix els paquets a un port específic del firewall. Això es pot utilitzar per configurar un proxy web transparent (només a la taula nat).

Comandes

Les comandes iptables i ip6tables et permeten manipular les taules, chains i regles. Per defecte, s’opera sobre la taula filter. Si vols operar sobre alguna altra, afegeix l’atribut -t NOM_TAULA en algun lloc de la comanda.

Les opcions per interactuar amb les chains són:

  • -L NOM_CHAIN: llista les regles d’una chain. Si no s’especifica quina, les mostrarà totes.
  • -N NOM_CHAIN: crea una nova chain.
  • -x NOM_CHAIN: elimina una chain buida i que no s’està utilitzant.
  • -A NOM_CHAIN REGLA: afegeix una nova regla al final de la chain.
  • -I NOM_CHAIN NUM REGLA: afegeix una nova regla abans de la posició indicada a NUM.
  • -D NOM_CHAIN NUM: (o -D NOM_CHAIN REGLA) elimina la regla de la chain.
  • -F NOM_CHAIN: elimina totes les regles d’una chain.
  • -P NOM_CHAIN ACCIÓ: defineix l’acció per defecte a una chain.

Regles

Cada regla s’expressa com CONDICIONS -j ACCIÓ OPCIONS_ACCIÓ. Si hi ha diverses condicions a una mateixa regla, s’aplica el criteri AND.

  • L’atribut -p PROTOCOL indica quin protocol utilitza el paquet: tcp, udp, icmp i icmpv6. Aquesta condició es pot complementar amb –source-port PORT i –destination-port PORT
  • Per negar una condició s’utilitza l’exclamació.
  • -s ADDREÇA o -s XARXA/MÀSCARA són per indica l’IP o xarxa origen.
  • -d ADDREÇA o -d XARXA/MÀSCARA són per indica l’IP o xarxa destí.
  • -i INTERFICIE o -o INTERFICIE seleccionen els paquets que venen o van d’una interfície de xarxa específica.
  • –state STAT permet seleccionar paquets segons l’estat de la comunicació: NEW, ESTABLISHED i RELATED.
  • -p tcp –dport PORT: indica el port.

Per exemple, si vols bloquejar tot el tràfic entrant de l’IP 10.0.1.5 i de la xarxa 31.13.74.0/24:

nadki@debian:~$ sudo iptables -A INPUT -s 10.0.1.5 -j DROP

nadki@debian:~$ sudo iptables -A INPUT -s 31.13.74.0/24 -j DROP

nadki@debian:~$ sudo iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  -- 10.0.1.5             0.0.0.0/0
DROP       all  -- 31.13.74.0/24        0.0.0.0/0

Si vols permetre el tràfic a ports específics perquè els usuaris es puguin connectar als serveis SSH, HTTP i IMAP:

nadki@debian:~$ sudo iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

nadki@debian:~$ sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

nadki@debian:~$ sudo iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

nadki@debian:~$ sudo iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  -- 10.0.1.5             0.0.0.0/0
DROP       all  -- 31.13.74.0/24        0.0.0.0/0
ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:143

Si vols eliminar algunes regles que ja no utilitzes. Tingues en compte que quan elimines una regla, es reanomenen totes les regles una altra vegada.

nadki@debian:~$ sudo iptables -n -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  -- 10.0.1.5             0.0.0.0/0
2    DROP       all  -- 31.13.74.0/24        0.0.0.0/0
3    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
4    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
5    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:143

nadki@debian:~$ sudo iptables -D INPUT 2

nadki@debian:~$ sudo iptables -D INPUT 1

nadki@debian:~$ sudo iptables -n -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
2    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
3    ACCEPT     tcp  -- 0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:143

Perquè les regles del firewall estiguin actives cada vegada que s’inicia el sistema, recorda registrar la configuració a un servei de /etc/network/interfaces.
Per exemple, pots generar l’script de les regles actuals amb iptables-save:

nadki@debian:~$ iptables-save | sudo tee /usr/local/etc/NOM_FITXER_CONFIG.fw

Modifica el fitxer /etc/network/interfaces afegint l’última línia:

auto eth0
iface eth0 inet static
pre-up iptables-restore < /usr/local/etc/NOM_FITXER_CONFIG.fw

Deixa un comentari