En este tutorial vamos a hablar sobre iptables, el firewall o cortafuegos con el que contamos en Linux. Esta herramienta nos va a permitir filtrar paquetes (de lo que va a tratar el tutorial), generar un registro de logs, realizar traducciones NAT.
Gracias a iptables podremos generar reglas para filtrar los paquetes de manera bastante sencilla, aunque la primera vez que lo uses pueda parecerte algo confuso, verás que cuando lo utilices unos días no tiene ninguna complicación.
El uso de esta herramienta requiere de altos privilegios, es decir necesitaremos ser superusuarios para hacerla correr. Disponemos de muchas características dentro de iptables, el objetivo del tutorial es ver una aproximación de su uso mediante ejemplos. Es importante que una vez termines el tutorial sigas profundizando, ya que es muy útil.
A continuación dejamos la página web oficial por si es de interés:
Si queremos ver información sobre iptables ejecutaremos en una terminal lo siguiente:
man iptablesVeremos la siguiente información:
En la imagen se ve parte de la información que nos facilita el comando, para ir viendo toda, desplázate hacía abajo en la terminal. Como vimos al principio del tutorial una de las tareas que iptables nos permitirá es crear reglas o filtros para saber qué hacer con los paquetes que tienen como origen/destino nuestra máquina. Para esta tarea nos interesará saber para que utilizamos los siguientes conceptos:
Iptables dispone de varias tablas pero para nuestro tutorial nos centramos solo en filter table, que es la encargada del filtrado, es utilizada por defecto en iptables.
Las cadenas que voy a poner aquí son las que pertenecen a la tabla comentada antes.
- Input: Paquetes que tienen como destino nuestra máquina.
- Output: Los paquetes que tienen como origen nuestro sistema.
- Forward: Paquetes que pasan por nuestra máquina para ser encaminados a otra.
Vamos a indicar las 2 que se usaran en el tutorial, pero existen más.
- Accept: Se aceptan los paquetes.
- Drop: Se descartan los paquetes.
Algunos de los parámetros que podemos utilizar son los que vienen a continuación.
- -A regla: Para agregar una regla
- -D regla: Para borrar la regla que indiquemos.
- -L: Nos permite listar las reglas.
- -F: Borra todas las reglas existentes.
- -j objetivo: Establecer tipo de regla (Accept, Drop).
- -t tabla: Indicara la tabla que se usa (por defecto filter table).
- -p protocolo: Sirve para indicar el protocolo.
- -i interface: Establecemos la interface para la regla.
- -s: Para indicar el origen.
- -d: Para indicar el destino.
- -h: Muestra ayuda.
Existen bastantes más, como pueden ser --destination-port o --source-port. Para ver todas puedes ejecutar el comando que comentamos arriba:
man iptablesO también puedes ejecutar:
iptables -h
Vamos a comenzar con los ejemplos, en total se pondrán 10, así se entenderá mejor y podremos ver cómo funciona iptables en modo cortafuegos. En los ejemplos no verás sudo, no será necesario en caso de que estés como root, si no deberás añadir al principio de cada ejemplo la palabra sudo.
iptables -A OUTPUT -j DROPEste es muy fácil, como se ha podido apreciar, el siguiente lo es aún más.
iptables -FBueno vamos a complicarlo un poco más en el siguiente.
iptables -A OUTPUT -p tcp --destination-port 80 -j DROP
Pasamos al cuarto ejemplo.
Y ahora ejecutaremos:
iptables -A OUTPUT -d 178.33.118.246 -j DROPCómo vemos basta con indicar su IP después del parámetro -d.
iptables -A INPUT -p ICMP -j DROPA continuación dejo una imagen de hacer ping antes de ejecutar el comando anterior y después:
Podemos ver que nuestra máquina no contesta, porque rechaza los paquetes de tipo ICMP. Si bloqueamos la salida en vez de la entrada ejecutaríamos:
iptables -A OUTPUT -p ICMP -j DROPVolvería a pasar lo mismo que en la imagen anterior. Para probar he realizado 3 veces ping, si ejecutamos podemos ver el número de paquetes:
iptables -L -v
Vemos que efectivamente pone 3 en la imagen anterior.
iptables -A INPUT -s 192.168.66.1 -j DROPVeamos un ejemplo algo más largo.
Iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT Iptables -A OUTPUT -j DROP
Pasemos a ver el décimo y último ejemplo.
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPTEn este ejemplo se ha querido usar --dport, para que veas que podemos usar esto o --destination-port, también podríamos usar --sport en vez de --source-port.
Hasta aquí llega el tutorial, ahora prueba tu a aplicar otras reglas, cuanto más practiques, más rapidez tendrás a la hora de aplicar reglas, y menos te costará. Para terminar dejamos un tutorial que puede ser de tu interés, abrir y cerrar puertos en Windows 10.