iptables para novatos, curiosos, interesados (2da Parte)

Cuando DesdeLinux solo tenรญa pocos meses de vida escribรญ un tutorial extremadamente simple de entender sobre iptables: iptables para novatos, curiosos, interesados (1ra parte) . Haciendo uso de metรกforas como comparar nuestro ordenador con nuestra casa, nuestro firewall con la puerta de la casa, asรญ como otros ejemplos expliquรฉ de forma amena, sin tantos tecnicismos ni conceptos complicados quรฉ es un firewall, quรฉ es iptables y cรณmo empezar a usarlo y configurarlo. Esta es la continuaciรณn, la 2da parte del anterior tutorial de iptables ๏™‚

Sucede que hace pocos dรญas usando un AP (Access Point) Linksys puse una Wifi en casa de mi novia, aunque la localidad no es de las mรกs conocedoras en cuanto a tecnologรญa, o sea, no es que haya muchos peligros de cracking, siempre es buena idea tener una excelente seguridad tanto en la Wifi como en los ordenadores.

La seguridad de la Wifi no la comentarรฉ acรก, pues no es el objetivo del post, me centrarรฉ en la configuraciรณn de iptables que actualmente uso en mi laptop.

Lo siguientes comandos son ejecutados en una terminal, necesitan ser ejecutados con privilegios de administrador, yo antepondrรฉ sudo a cada comando, ustedes pueden hacerlo igual o evitar usar sudo ejecutando los comandos directamente como root

En el anterior post habรญa explicado que es necesario en un firewall primero denegar todo trรกfico entrante, para ello:

sudo iptables -P INPUT DROP

Luego debemos permitir que nuestro propio ordenador tenga permiso para entrar datos:

sudo iptables -A INPUT -i lo -j ACCEPT

Asรญ como tambiรฉn aceptar paquetes de peticiones que se originen en nuestro ordenador:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Para una mejor comprensiรณn de estas lรญneas, recomiendo leer la primera mitad del anterior artรญculo: iptables para novatos, curiosos, interesados (1ra parte)

Hasta aquรญ nuestro ordenador puede navegar sin problemas a internet, pero nadie de ningรบn otro entorno (LAN, internet, Wifi, etc) podrรก acceder de ninguna forma a nuestro ordenador. Vamos a empezar ya a configurar iptables segรบn nuestras necesidades.

Usando ulogd para sacar los logs de iptables a otro archivo:

Por defecto los logs de iptables van en el log del kernel, del sistema, o algo asรญ โ€ฆ en Arch por defecto, ahora mismo ni siquiera recuerdo dรณnde van, es por ello que yo uso ulogd para que los logs de iptables estรฉn en otro archivo.

sudo iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG

Dando acceso a mi servidor privado:

Yo no uso VirtualBox ni nada similar para virtualizar, yo tengo mi servidor privado virtualizado con Qemu+KVM el cual debe poder conectarse a mi laptop como tal, con las reglas de iptables que acabo de especificar arriba no podrรก, es por eso que tengo obligatoriamente que darle permiso a la IP de mi servidor virtual para que pueda acceder a mi laptop:

sudo iptables -A INPUT -i virbr0 -p tcp -s 192.168.122.88 -j ACCEPT

Vamos a detallar esta lรญnea, es importante que ustedes entiendan quรฉ significa cada parรกmetro, pues se van a repetir mucho de ahora en adelante:

-A INPUT : Estoy diciendo que voy a declarar una regla para trรกfico entrante

-i virbr0 : Declaro que la interfaz por la cual aceptarรฉ el trรกfico no es etho (LAN) ni wlan0 (Wifi), digo especรญficamente que es mi interfaz virbr0, o sea, la interfaz de red virtual (interna) mediante la cual se comunica mi laptop con mi servidor virtual (y viceversa)

-p tcp : Especifico el protocolo, los mรกs usados son UDP y TCP, aquรญ en realidad bastaba con no poner esto peroโ€ฆ es una costumbre especificar el tipo de protocolo a aceptar

-s 192.168.122.88 : La source, fuente de los paquetes. O sea, la regla se refiere a paquetes que provengan especรญficamente desde la IP 192.168.122.88

-j ACCEPT : Ya aquรญ digo lo que quiero hacer con los paquetes que coincidan con lo antes dicho, en este caso aceptar.

O sea y a modo de resumen, voy a aceptar paquetes que provengan desde la IP 192.168.122.88, pero en caso de que deseen entrar paquetes que vengan desde esa IP PERO! entran desde una interfaz que no sea virbr0, o sea, digamos que intentan entrar paquetes desde la IP 192.168.122.88 pero son de un ordenador en nuestra red Wifi, si ese es el caso, los paquetes serรกn rechazados. ยฟpor quรฉ? Porque claramente especificamos que sรญ, aceptamos paquetes desde 192.168.122.88 sรญ, pero y solo pero, tambiรฉn tienen que entrar desde la interfaz virbr0 (interfaz de red interna, virtual), si los paquetes provienen desde otra interfaz (LAN, RAS, Wifi, etc) entonces no serรกn aceptados. Especificando la interfaz como pueden apreciar podemos restringir aรบn mรกs, podemos tener un mejor control sobre lo que entra (o no entra) en nuestro ordenador.

Aceptando ping desde cualquier IP de la Wifi de casa:

Desde algรบn otro ordenador que se conecte a la Wifi, si intenta hacer ping a mi laptop deseo permitirlo. ยฟmotivo? La idea tambiรฉn es que en prรณximas semanas enlazar la PC de la casa de al lado a la red, asรญ compartir informaciรณn serรญa menos compleja, mรกs fluida, cuando yo empiece a hacer pruebas para enlazar la desktop a la Wifi, necesitarรฉ hacer ping a mi laptop para comprobar la conectividad, si mi laptop no me devuelve el ping puedo pensar que el AP estรก fallando, o que hubo algรบn error al acceder a la Wifi, es por ello que deseo permitir el ping.

sudo iptables -A INPUT -i wlo1 -p icmp -s 192.168.1.0/24 -d 192.168.1.51 -j ACCEPT

-A INPUT : Lo mismo que antes, hago referencia a trรกfico entrante

-i wlo1 : Similar a antes. En el caso anterior especifiquรฉ la interfaz virtual, en este caso especifico otra interfaz, la de mi wifi: wlo1

-p icmp : Protocolo icmp, icmp = ping. O sea, no estoy permitiendo SSH ni nada similar, permito solamente ping (icmp)

-s 192.168.1.0/24 : La fuente de los paquetes, o sea, siempre que los paquetes vengan desde una IP 192.168.1.? serรกn aceptados

-d 192.168.1.51 : IP de destino, o sea, mi IP.

-j ACCEPT : Indico quรฉ hacer con los paquetes que coincidan con lo anterior, aceptar.

O sea y para explicar esto de forma corrida, acepto que me hagan ping (protocolo icmp) cuyo destino sea especรญficamente mi IP, siempre y cuando vengan desde alguna IP como 192.168.1.__ pero ademรกs, no pueden provenir desde cualquier interfaz de red, tienen que entrar especรญficamente desde mi interfaz de red de Wifi (wlo1)

Aceptar SSH solo para una IP:

A veces necesito conectarme por SSH desde mi smartphone para controlar la laptop, es por ello que debo permitir el acceso SSH a mi laptop desde las IPs de mi Wifi, para ello:

sudo iptables -A INPUT -i wlo1 -p tcp -s 192.168.1.0/24 -d 192.168.1.51 --dport 22 -j ACCEPT

De esta lรญnea lo รบnico diferente o que merece destacarse es: โ€“dport 22 (puerto de SSH que uso)

O sea, acepto intentos de conexiรณn a mi laptop por el puerto 22, siempre que estos vengan desde alguna IP de mi wifi, tienen tambiรฉn que tener como destino especรญfico mi IP y ademรกs venir por la interfaz wlo1, o sea, la de mi wifi (no la de la lan, etc)

Permitiendo que vean un sitio web suyo:

No es mi caso, pero si alguno de ustedes tiene un sitio web hosteado y no desean denegarle el acceso a nadie, o sea, que todos desde cualquier parte puedan acceder a ese sitio web, es mucho mรกs simple de lo que pueden pensar:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

O sea, aquรญ estรกn permitiendo todo trรกfico entrante (tcp) por el puerto 80. Como ven, no especifico desde quรฉ IPs o red sรญ permito el acceso, al no especificar un rango de IP a permitir, iptables asume que deseo permitirle el acceso a todos los rangos de IPs existentes, o sea, a todo el mundo ๏™‚

Otras combinaciones:

Tengo otras muchas reglas como son por ejemplo, aceptar ping para IPs de la LAN de mi casa (para esta es bรกsicamente la misma lรญnea anterior, cambiando los rangos de IPs), que es mรกs de lo mismo que reciรฉn les expliquรฉ arribaโ€ฆ en mi laptop como tal no uso cosas realmente complejas, eso de limitar las conexiones, anti DDoS, eso lo dejo para los servidores, en mi laptop no lo necesito ๏™‚

En fin, hasta aquรญ el artรญculo.

Como pueden ver, trabajar con iptables no es tan complejo ni mucho menos, una vez te armas un script en el cual escribes tus reglas es muy simple luego modificarlo, agregar o quitar reglas a tu firewall.

No me considero un experto en el tema ni mucho menos, no obstante cualquier duda que puedan tener la comentan acรก, intentarรฉ ayudarles en todo cuanto pueda.

Saludos


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      risketo dijo

    Buenisimo, muy bien explicado, genial.
    Me encantan este tipo de post.

         KZKG^Gaara dijo

      Muchas gracias a tรญ por comentar ๐Ÿ™‚

      Este post era una deuda que tenรญa desde hace mucho, es placentero y agradable al final poder saldarla ^_^

      Saludos

           FIXOCONN dijo

        una pregunta estas en Cuba?
        … sucede que hace pocos dรญas usando un AP (Access Point) Linksys puse una Wifi en casa de mi novia

             KZKG^Gaara dijo

          Sรญ claro, nacรญ y vivo en Cuba. ยฟpor quรฉ la pregunta?

             Sam Burgos dijo

          @FIXOCONN: Hola amigo y perdona el offtopic de la pregunta, pero como defines que aparezca Cinnamon como entorno de escritorio en el user-agent? Yo uso Mint 13 con Cinnamon, pero de ninguna manera logro que me aparezca el logo de Cinnamon en mi user-agent cada vez que comento en este sitio

          Serรญas tan amable de pasarme tus datos de user agent si no es mucha molestia? Me gustarรญa saber ese dato para colocarlo yo tambiรฉn =)

          Te dejo una pรกgina para que puedas revisarlo y darme la informaciรณn. Gracias y admins, perdonen el ยซtrolleoยป (si se le puede llamar asi) de mi parte con esta informaciรณn -> http://user-agent-string.info/

               KZKG^Gaara dijo

            Agrega ยซCinnamonยป (sin las comillas) a cualquier parte del UserAgent, te debe salir entonces el logo en prรณximos comentarios ๐Ÿ™‚

      Bruno Cascio dijo

    Muy bueno el post! muy claro ๐Ÿ˜€

         KZKG^Gaara dijo

      Gracias por leernos y gracias por tu comentario ๐Ÿ™‚

      vale dijo

    Gracias!, de verdad me sirve de mucho!

      Oscar Granada dijo

    Hola, primero que todo muchas felicitaciones por el blog, me parece genial.
    Algo que tal vez sea bueno mencionar es que la opciรณn de log con ULOG no funciona en los sistemas operativos que tengan ulogd2, para este caso la regla deberรญa ser:
    sudo iptables -A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -j NFLOG

         KZKG^Gaara dijo

      Antes que todo, muchas gracias por lo que dices del blog ๐Ÿ™‚

      Yo en Arch tengo ulogd v2.0.2-2 instalado, y me funciona sin problemas la lรญnea que puse (tuve que ponerle un loglevel=1 en /etc/ulogd.conf, pero me saca los logs hacia otro archivo sin problemas.

      ยฟTรบ usando ulogd v2 o superior la lรญnea que dejรฉ te funciona mal?

      Saludos y gracias por comentar.

      Citux dijo

    Siempre estuve esperando la segunda parte, recuerdo cuando leรญ la primera (fue mi iniciaciรณn en los cortafuegos). Gracias @KZKG^Gaara, saludos ๐Ÿ™‚

         KZKG^Gaara dijo

      Gracias por leerme ๐Ÿ˜€
      Y jeje sรญ, lo dicho… esta post era una deuda que tenรญa hace tiempo ^_^

      Jose Luis Gonzalez dijo

    Saludos. Muy bueno el post. Estoy tratando de configurar las reglas de iptables para redireccionar el trafico de squid a dansguardian y aun no logro el objetivo. Agradecerรญa algo de ayuda al respecto.

         KZKG^Gaara dijo

      iptables para eso? No que se hace directamente con ACLs en Squid?

      nameless dijo

    ยซTengo otras muchas reglas como..ยป
    A esto llamo yo paranoia,chico
    Un poco mรกs y colocas un a jaurรญa de Rotwailer’s en cada puerto abierto en tu modem/router ๐Ÿ™‚

         KZKG^Gaara dijo

      HAHAHAHAHAHAHAHAHA me muero de la risa con lo de los rottwailers jajajaja

      Ivan dijo

    Saludos amigo, sucede que necesito ayuda para configurar IPTables de manera que deniegue el acceso solo para el puerto 80 cuando yo tipee la direcciรณn en el navegador de mis nameservers personalizados, es decir cuando por ejemplo escriba ns1.midominio.com y ns2.midominio.com (los cuales son mis nameservers) IPtables deniegue el acceso al puerto 80 de manera que el navegador intente cargar la pรกgina pero luego de un tiempo expire y nunca cargue, sucede que ya he intentado con comandos como este:

    iptables -A INPUT -d ns1.midomini.com -p tcp –dport 80 -j DROP
    iptables -A INPUT -d ns2.midomini.com -p tcp –dport 80 -j DROP

    Pero lo unico que hace es denegar la entrada al puerto 80 en todos mis dominios (ya que estรกn compartiendo la misma IP al ser Virtual Host), yo quiero que solo sea en la url de mis nameservers y la IP a la que apuntan mis nameservers, es decir que IP tables deniegue el acceso al puerto 80 en:

    ns1.midomini.com (Apuntando A) —> 102.887.23.33
    ns2.midomini.com (Apuntando A) —> 102.887.23.34

    y las IPs a las que apuntan los nameservers

    102.887.23.33
    102.887.23.34

    Un ejemplo de una empresa que tiene este sistema es: Dreamhost
    Sus nameservers: ns1.dreamhost.com y ns2.dreamhost.com y las IPs a las que apuntan no responden al ser tipeadas en la barra de direcciones del navegador

    Muchas gracias de antemano por la atenciรณn prestada, me gustaria mucho que me echaras una mano con esto de verdad que la necesito y urgente !!

    Buen Dia !!

         KZKG^Gaara dijo

      Hola Ivรกn,

      Contรกctame por email (kzkggaara[at]desdelinux[dot]net) para hablarlo con mรกs calma y explicarte mejor, maรฑana sin falta te respondo (hoy estoy de pasada)

      Lo que deseas hacer es simple, no sรฉ por quรฉ las lรญneas que me comentas no te funcionan, deberรญan, pero hay que revisar logs y otras cosas que por aquรญ serรญan demasiado extensas.

      Saludos y espero tu email

      neysonv dijo

    teoricamente con iptables podria evitar que me envien peticiones de desconexion desde programas como aircrack. estoy en lo correcto??? bueno ya hare pruebas pero si me dices que si me harias muy feliz XDDD

         KZKG^Gaara dijo

      En teorรญa me parece que sรญ, ahora, no sรฉ cรณmo se podrรญa hacer, nunca lo he hecho … pero repito, en teorรญa, creo que sรญ se podrรญa.

      Alex dijo

    Luego de aplicar las reglas de iptables me es imposible acceder a carpetas compartidas de windows en la red local. ยฟQuรฉ regla deberรญa aplicar para solucionarlo?
    Gracias.

         KZKG^Gaara dijo

      ยฟQuรฉ reglas de iptables aplicaste?
      Esta es la 2da parte de ยซiptables para novatosยป, ยฟleรญste la primera? Pregunto esto para saber si aplicaste las reglas que estaban en el post anterior

           Alex dijo

        Sรญ, he leรญdo ambas partes. Para el script me base en otra entrada que publicaste acerca de iniciar reglas con systemd.

        #!/bin/bash
        # — UTF 8 —

        # Binario de iptables
        iptables=ยป/usr/bin/iptablesยป

        echo ยซยป

        ## Limpiar tablas ##
        $iptables -F
        $iptables -X
        $iptables -Z
        #echo ยป – Hecho FLUS a iptablesยป && echoยปยป

        ## Estableciendo logs con ULOGD ##
        $iptables -A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -j ULOG

        ## Definir polรญtica DROP por defecto ##
        $iptables -P INPUT DROP
        $iptables -P FORWARD DROP
        #echo ยป – Definida polรญtica DROP por defaultยป && echoยปยป

        ## Permitir todo a localhost ##
        $iptables -A INPUT -i lo -j ACCEPT
        $iptables -A OUTPUT -o lo -j ACCEPT
        #echo ยป – Permitido todo para localhostยป && echoยปยป

        ## Permitir entrar paquetes de conexiones que yo inicie ##
        $iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
        #echo ยป – Permitidos paquetes de conexiones iniciadas por miยป && echoยปยป

        echo ยป ##############################ยป
        echo ยป ## IPTABLES CONFIGURADO OK! ##ยป
        echo ยป ##############################ยป

        He leรญdo en internet que para samba deberรญa tener las siguientes reglas en el script :

        $iptables -A INPUT -p tcp –dport 139 -j ACCEPT
        $iptables -A INPUT -p tcp –dport 445 -j ACCEPT
        $iptables -A INPUT -p udp –sport 137 -j ACCEPT
        $iptables -A INPUT -p udp –dport 137 -j ACCEPT
        $iptables -A INPUT -p udp –dport 138 -j ACCEPT

        Sin embargo ni con ellas puedo ver grupos de trabajo windows. :S

           Alex dijo

        Problema solucionado. Modifique los parรกmetros workgroup y hosts allow del archivo de configuraciรณn de samba.

      otkmanz dijo

    Excelente artรญculo, simplemente genial!!!!
    Acabo de leerlo y me encanta tanto de la forma en que lo explicas como el realmente รบtil uso que tiene iptables, me gustarรญa aprender realmente a usarlo con mayor profundidad.
    Un saludo y excelente artรญculo, espero que publiques mรกs sobre Iptables! ^^

      LEO dijo

    estimados;

    tengo un proxy con iptables y unas de mis redes no puede hacer ping a http://www.google.cl por tal motivo tengo los puertos blokeados y e intentando mil formas de habrir los puertos y no pasa nada. Si no puedo hacer ping no puedo conectar el outlook

      Borja dijo

    Enhorabuena por el post! Muy bueno. Per tengo una duda. En ocasiones la direcciรณn ip que se te asigna en la red puede cambiar (si es cierto que podrรญamos asignar una IP a nuestra MAC Addres), pero hay posibilidad con Iptables de permitir accesos a nuestro servidor vรญa SSH por MAC Address?

    Espero haberme explicado bien.

    Un saludo y muchas gracias!

      Fernando Martin Gan dijo

    Hola sabes que tenia un servidor linux configurado y despues de poner estos comandos me bloqueo todo y perdi acceso, pude recuperar casi todo pero me faltan 2 cosas . * ya no puedo acceder desde un navegador de la red por el cname ยซserverยป si por ip, 10.10.10.5 y por otro lado no veo los recursos compartidos desde el explorer de windows en la red , antes ponia \\server y veia todos los recursos compartidos. espero me puedas ayudar, se que es una bobada pero no lo estoy pudiendo resolver , gracias

      tau dijo

    Cito textualmente :

    Protocolo icmp, icmp = ping. O sea, no estoy permitiendo SSH ni nada similar, permito solamente ping (icmp)

    ICMP y PING no son lo mismo. El ping es una parte del protocolo ICMP, pero no lo es todo. El protocolo ICMP ( Internet Control Message Protocol ), tiene muchas mรกs utilidades algunas de ellas con ciertos peligros. Y tu estรกs aceptando todo el trรกfico ICMP. Tendrรญas que restringir solo a ping.

    Saludos !

      ozkr dijo

    tengo qe hacer una practica pero no comprendo mucho sobre iptables me podrian ayudar por favor….
    gracias!!!!!!!