<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Iptables - Filter
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Introducció
La taula __filter__ en iptables és una de les tres taules de filtratge de paquets disponibles en el sistema,
juntament amb __nat__ i __mangle__.
La taula __filter__ és la taula per defecte utilitzada per a la majoria de les regles de filtratge de paquets i
permet establir regles per a controlar el tràfic d'entrada i d'eixida d'un sistema utilitzant el firewall iptables.
Aquesta taula té les següents __cadenes o chains__ disponibles:
- `INPUT`: Establir regles en els paquets d'entrada al dispositiu local.
- `OUTPUT`: Establir regles en els paquets d'eixida del dispositiu local.
- `FORWARD`: Establir regles en els paquets d'entrada al dispositiu, que seran reenviades a altres dispositius.
En totes les comandes, es pots establir la taula sobre la que s'aplicarà la regla amb l'opció `-t`. Si no s'especifica
cap taula, s'utilitza per defecte la taula __filter__.
## Política per defecte
Quan els paquets arriben al tallafocs, s'evaluaran totes les regles disponibles
seqüencialment. Si cap regla és avaluada correctament per a un paquet, s'aplicarà
la política per defecte (__target__):
- `DROP`: No deixa passar el paquet.
- `ACCEPT`: Deixa passar el paquet.
Es pot definir una política diferent per cada __chain__ (`INPUT`, `OUTPUT` i `FORWARD`).
```bash
iptables -P chain target
iptables -P INPUT DROP
```
## Llistar regles
```bash
iptables -L -nv --line-numbers
```
## Comprovar ports oberts
```bash
ss -ltuna
```
## Afegir regles
### Afegir al final (APPEND)
S'utilitza lópció `-A`:
```bash
iptables -A [CHAIN] [-p PROTOCOL] [-s IP ORIGEN] [-d IP DESTI] [-i INTERFICIE ENTRADA] [-o INTERFICIE EXIDA] [-j ACCEPT|DROP]
# Accepta tots els paquets d'eixida
iptables -A OUTPUT -j ACCEPT
```
### Afegir al principi (INSERT)
S'utilitza lópció `-I`:
```bash
iptables -I [CHAIN] [-p PROTOCOL] [-s IP ORIGEN] [-d IP DESTI] [-i INTERFICIE ENTRADA] [-o INTERFICIE EXIDA] [-j ACCEPT|DROP]
```
## Eliminar regles
### Eliminar una regla en concret
S'utilitza l'opció `-D`:
```bash
iptables -D [CHAIN] [NOMBRE REGLA]
# Elimina la regla 1 en OUTPUT
iptables -D OUTPUT 1
```
### Eliminar totes les regles
S'utlitza l'opció `-F`:
```bash
# Borrem totes les regles de la taula FILTER
iptables -t filter F
# Borrem totes les regles de la taula NAT
iptables -t nat -F
```
### Reiniciar el comptador de regles
Per reiniciar els contadors s'utilitza l'opció `-Z`.
```bash
# Borrem totes les regles de la taula FILTER (per defecte)
iptables -Z
# Borrem totes les regles de la taula NAT
iptables -t nat -Z
```
## Exemple: PING
- Establim la política per defecte d'entrada i eixida perquè no accepte cap paquet:
```bash
iptables -P INPUT DROP
iptables -P OUTPUT DROP
```
- L'ordinador no es pot comunicar amb ningú. Si realitzem un `ping`, no funcionarà:
```bash
ping -c4 8.8.8.8
```
> En la xarxa de l'institut, el protocol ICMP no funciona cap a IPs externes
- Habilitem les peticions i respostes de `ping`:
```bash
# Comprovem les interfícies
ip a
# Habilitem l'enviament de peticions del protocol ICMP
iptables -A OUTPUT -o [INTERFICIE D'EIXIDA] -p icmp -j ACCEPT
# Habilitem el recibiment de respostes del protocol ICMP
iptables -A INPUT -i [INTERFICIE D'ENTRADA] -p icmp -j ACCEPT
```
- Si es necessita sols acceptar un tipus de paquets d'un protocol, es pot utilitzar l'opció `-m`:
```bash
# Habilitem l'enviament de peticions del protocol ICMP
iptables -A OUTPUT -o [INTERFICIE D'EIXIDA] -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
# Habilitem el recibiment de respostes del protocol ICMP
iptables -A INPUT -i [INTERFICIE D'ENTRADA] -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
```
## Bibliografia
- https://elbinario.net/2019/03/18/iptables-para-torpes/
Aquest lloc web utilitza galetes per millorar l'experiència de l'usuari