Hagamos un firewall casero con Iptables (II)
Seguimos con la creación de nuestro firewall casero con iptables. Habíamos quedado en deshabilitar todo tráfico entrante para luego habilitar solamente los paquetes de respuesta de una petición Eco, seguimos a partir de ahí las indicaciones.
Obs: Realicen las modificaciones de los filtros con cautela y no ejecuten comandos si no saben lo que están haciendo, recuerden que iptables es un software que nos ayuda a filtrar nuestras transferencias en la red y puede dejarnos sin transferencia alguna, cualquier comando que utilicemos en este artículo puede ser revertido introduciendo: iptables -P INPUT ACCEPT en la consola. El staff de akashablog no se hace responsable de lo que pueda pasar si ejecutan comandos indebidos :D.
Bueno lo que actualmente podemos hacer con nuestro firewall sería por ejemplo un ping a un host por medio de su dirección IP y NO por su nombre de dominio, podemos probar que esto no se realiza ejecutando: “ping google.com“, esto ocurre debido a que nuestros sistemas utilizan otro método para las resoluciones de nombres de dominios, para resolver un nombre de dominio, se envía por medio de UDP una consulta a nuestro DNS (Domain Name System), este nos responde con la dirección IP del host a donde apunta el dominio, la respuesta es recibida por los sistemas en el puerto 53 UDP y como este puerto aún se encuentra bloqueado por el firewall, pues, no le estamos dejando pasar a la respuesta, dejémosla pasar entonces:
iptables -A INPUT -p udp --sport domain -j ACCEPT
Con esto permitimos que la consulta a la DNS vuelva a nuestras máquinas y así poder hacer ping con las resoluciones de nombres.
Analicemos un poco, como ya había dicho –p es para especificar el protocolo de transporte sobre el cual actuará la regla, –sport (source port) nos permite especificar el puerto al cual queremos permitir la entrada, en este caso “domain”, que sería lo mismo que introducir “53” como puerto. Pues que esperamos, hagamos de vuelta un “ping google.com” y veremos cómo los bytes empiezan a fluir dentro de nuestra máquina.
Que sucede ahora, hemos dejado el puerto 53 abierto, alguien puede enviar algún que otro paquetito que no queremos, así que porqué no aseguramos aún más la situación aceptando solamente el tráfico entrante de nuestro DNS.
iptables -A INPUT -p udp –s 10.128.40.1 --sport domain -j ACCEPT
Hemos agregado un argumento nuevo “-s” nos permite especificar la fuente (source) que podrá pasar a través del puerto, donde 10.128.40.1 deberías sustituirlo por la ip de tu DNS.
Si no sabes la IP de tu DNS prueba en una nueva línea de comandos:
nslookup google.com
Imprimirá algo como esto:
Server: ******
Address: Direccion IP de tu DNS.
Agregando esta regla solamente los paquetes que vengan desde nuestro DNS podrán pasar por el puerto 53 UDP sin ser filtrado por nuestro firewall, en verdad, nos faltaría eliminar la regla anterior que aceptaba todos los paquetes por el puerto 53, para esto, realizamos:
iptables --list –line-numbers
Se nos listará las políticas de filtro que hayamos ingresado junto con un número de línea que nos servirá para poder eliminarlos con el comando:
iptables -D INPUT 2
El cual eliminará la línea dos de las políticas de tráfico entrante(INPUT) referente a la política que aceptaba todos los paquetes por el puerto 53 UDP.
Excelente, de esta forma tenemos nuestro firewall, por ahora, hemos aprendido como agregar políticas de filtro para puertos específicos de capas de transportes específicas (UDP, TCP), como también vimos como agregar un filtro que solo deje pasar a host son confiables y eliminar políticas de filtro. Cuando agregues tus propias políticas de filtro solo tienes que sustituir los argumentos aprendidos por los tuyos, ejemplo, en vez de abrir el puerto 53 UDP podrías abrir el puerto 53 TCP si hace falta, solamente cambiando “-p udp” por “-p tcp” del primer comando que hicimos hoy, así que recuerda iptables es una herramienta poderosa que se adaptará a tus necesidades.
Esperen al próximo artículo donde veremos cómo podríamos filtrar paquetes que provienen de programas que rastrean puertos y así hacernos invisibles a estos, además activaremos otras funciones como la de aplicaciones HTTP y poder navegar así en nuestras máquinas.
Recuerden, mientras para volver a navegar y a las funciones normales.
iptables -P INPUT ACCEPT
Pingback: Hagamos un firewall casero con Iptables (III) – Anime, Manga, Tecnología, Videojuegos y más