Com configurar un tallafoc Iptables per habilitar l'accés remot als serveis a Linux - Part 8


Presentació del programa de certificació de la Fundació Linux

Recordaràs de la part 1 – Sobre Iptables d'aquesta sèrie LFCE (Linux Foundation Certified Engineer) que vam donar una descripció bàsica del que és un tallafoc: un mecanisme per gestionar paquets que entren i surten de la xarxa. Per gestionar ens referim realment a:

  1. Per permetre o impedir que determinats paquets entrin o surtin de la nostra xarxa.
  2. Per reenviar altres paquets d'un punt de la xarxa a un altre.

en funció de criteris predeterminats.

En aquest article parlarem de com implementar el filtratge bàsic de paquets i com configurar el tallafocs amb iptables, una interfície per a netfilter, que és un mòdul del nucli natiu utilitzat per al tallafoc.

Tingueu en compte que el tallafocs és un tema ampli i que aquest article no pretén ser una guia completa per entendre tot el que cal saber sobre això, sinó com un punt de partida per a un estudi més profund d'aquest tema. Tanmateix, revisarem el tema a la part 10 d'aquesta sèrie quan explorem alguns casos d'ús específics d'un tallafoc a Linux.

Podeu pensar en un tallafocs com un aeroport internacional on els avions de passatgers entren i surten gairebé les 24 hores del dia. D'acord amb una sèrie de condicions, com ara la validesa del passaport d'una persona o el seu país d'origen (per citar alguns exemples), se li pot permetre o no entrar o sortir d'un determinat país.

Al mateix temps, els agents de l'aeroport poden indicar a les persones que es traslladin d'un lloc a un altre de l'aeroport si cal, per exemple quan hagin de passar pels Serveis de Duanes.

Pot ser que l'analogia de l'aeroport sigui útil durant la resta d'aquest tutorial. Només cal tenir en compte les relacions següents mentre avancem:

  1. Persones = paquets
  2. Talafocs = Aeroport
  3. País #1 = Xarxa #1
  4. País #2 = Xarxa #2
  5. Normes de l'aeroport aplicades pels agents = regles del tallafoc

Iptables: conceptes bàsics

Al nivell baix, és el propi nucli qui \decideix què fer amb els paquets basant-se en regles agrupades en cadenes o oracions Aquestes cadenes defineixen quines accions s'han de dur a terme quan un paquet coincideix amb els criteris especificats per elles.

La primera acció que farà iptables consistirà a decidir què fer amb un paquet:

  1. Accepteu-lo (permeteu-lo passar a la nostra xarxa)?
  2. Rebutjar-lo (impedir que accedeixi a la nostra xarxa)?
  3. Reenviar-lo (a una altra cadena)?

Per si us pregunteu per què aquesta eina s'anomena iptables, és perquè aquestes cadenes estan organitzades en taules, sent la taula de filtres la més coneguda i la que és s'utilitza per implementar el filtratge de paquets amb les seves tres cadenes per defecte:

1. La cadena INPUT gestiona els paquets que arriben a la xarxa, que estan destinats a programes locals.

2. La cadena OUTPUT s'utilitza per analitzar els paquets originats a la xarxa local, que s'han d'enviar a l'exterior.

3. La cadena FORWARD processa els paquets que s'han d'enviar a una altra destinació (com en el cas d'un encaminador).

Per a cadascuna d'aquestes cadenes hi ha una política per defecte, que dicta què s'ha de fer per defecte quan els paquets no coincideixen amb cap de les regles de la cadena. Podeu veure les regles creades per a cada cadena i la política per defecte executant l'ordre següent:

# iptables -L

Les polítiques disponibles són les següents:

  1. ACCEPTA → deixa passar el paquet. Qualsevol paquet que no coincideixi amb cap regla de la cadena es permet a la xarxa.
  2. DROP → deixa anar el paquet en silenci. Qualsevol paquet que no coincideixi amb cap regla de la cadena no pot entrar a la xarxa.
  3. REJECTA → rebutja el paquet i retorna un missatge informatiu. Aquesta en particular no funciona com a política predeterminada. En lloc d'això, està pensat per complementar les regles de filtratge de paquets.

Quan es tracta de decidir quina política implementareu, heu de tenir en compte els avantatges i els contre de cada enfocament, tal com s'ha explicat anteriorment; tingueu en compte que no hi ha cap mida única. -Tota solució.

Per afegir una regla al tallafoc, invoqueu l'ordre iptables de la següent manera:

# iptables -A chain_name criteria -j target

on,

  1. -A significa Afegir (afegiu la regla actual al final de la cadena).
  2. nom_cadena és INPUT, OUTPUT o FORWARD.
  3. objectiu és l'acció o política que s'ha d'aplicar en aquest cas (ACCEPTA, REJECTA o DEIXA).
  4. criteri és el conjunt de condicions amb les quals s'han d'examinar els paquets. Està compost per almenys una (probablement més) de les banderes següents. Les opcions entre parèntesis, separades per una barra vertical, són equivalents entre si. La resta representa interruptors opcionals:

[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Enganxem tot això en 3 exemples clàssics utilitzant l'entorn de prova següent per als dos primers:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

I això per l'últim exemple

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15

Primer definirem una política DROP per als pings d'entrada al nostre tallafoc. És a dir, els paquets icmp es deixaran caure en silenci.

# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Abans de continuar amb la part REBUT, esborrarem totes les regles de la cadena INPUT per assegurar-nos que els nostres paquets seran provats per aquesta nova regla:

# iptables -F INPUT
# iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

Ens ocuparem de la cadena OUTPUT mentre gestionem el trànsit de sortida:

# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

Executeu les ordres següents al servidor/tallafoc NFSv4 per tancar els ports 2049 i 111 per a tot tipus de trànsit:

# iptables -F
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Ara obrim aquests ports i veurem què passa.

# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Com podeu veure, vam poder muntar la compartició NFSv4 després d'obrir el trànsit.

En els exemples anteriors vam mostrar com afegir regles a les cadenes INPUT i OUTPUT. Si volguéssim inserir-los en una posició predefinida, hauríem d'utilitzar l'interruptor -I (i majúscula).

Heu de recordar que les regles s'avaluaran una darrere l'altra i que l'avaluació s'atura (o salta) quan coincideix una política DROP o ACCEPT. Per aquest motiu, és possible que us trobeu en la necessitat de moure les regles cap amunt o cap avall a la llista de la cadena segons sigui necessari.

Utilitzarem un exemple trivial per demostrar-ho:

Posem la següent regla,

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

a la posició 2) a la cadena INPUT (per tant, movent el número 2 anterior com el número 3)

Amb la configuració anterior, es comprovarà el trànsit per veure si s'adreça al port 80 abans de comprovar el port 2049.

Alternativament, podeu suprimir una regla i canviar l'objectiu de les regles restants a REBUT (utilitzant l'interruptor -R):

# iptables -D INPUT 1
# iptables -nL -v --line-numbers
# iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Per últim, però no menys important, haureu de recordar que perquè les regles del tallafoc siguin persistents, haureu de desar-les en un fitxer i restaurar-les automàticament després de l'arrencada (utilitzant el mètode preferit que trieu o el que està disponible per a la vostra distribució).

Desar les regles del tallafoc:

# iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
# iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Regles de restauració:

# iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
# iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Aquí podem veure un procediment similar (desar i restaurar les regles del tallafoc a mà) utilitzant un fitxer fictici anomenat iptables.dump en comptes del predeterminat com es mostra més amunt.

# iptables-save > iptables.dump

Per fer que aquests canvis siguin persistents entre les arrencades:

Ubuntu: instal·leu el paquet iptables-persistent, que carregarà les regles desades al fitxer /etc/iptables/rules.v4.

# apt-get install iptables-persistent

CentOS: afegiu les dues línies següents al fitxer /etc/sysconfig/iptables-config.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: llista els ports, protocols, adreces, etc. permesos (separats per comes) a /etc/sysconfig/SuSEfirewall2.

Per a més informació consulteu el mateix fitxer, que està molt comentat.

Conclusió

Els exemples proporcionats en aquest article, tot i que no cobreixen totes les campanes i xiulets d'iptables, serveixen per il·lustrar com activar i desactivar el trànsit entrant o sortint.

Per a aquells de vosaltres que sou fans del tallafoc, tingueu en compte que revisarem aquest tema amb aplicacions més específiques a la part 10 d'aquesta sèrie LFCE.

No dubteu a fer-me saber si teniu cap pregunta o comentari.