<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/