iptables para novatos, curiosos, interesados

Siempre he pensado que la seguridad nunca está de más, y nunca es suficiente (por eso ya elav me tilda de maniático obsesivo y psicótico de la seguridad…), por eso aún cuando uso GNU/Linux, no descuido la seguridad de mi sistema, mis passwords (generados aleatoriamente con pwgen), etc..

Además, aún cuando los sistemas tipo Unix son sin dudas muy seguros, se recomienda sin dudas usar un Firewall, configurarlo como es debido, para estar lo mejor protegidos posible 🙂

Aquí les explicaré sin muchos líos, enredos o detalles complejos cómo conocer lo básico de iptables.

Pero … ¿qué demonios es iptables?

iptables es la parte del kernel Linux (un módulo) que se ocupa de filtrar paquetes. Esto dicho de otra forma, significa que iptables es la parte del kernel cuyo trabajo es saber qué información/datos/paquete quieres que entre a tu ordenador, y cuáles no (y hace más cosas, pero centrémosnos en esto por el momento jeje).

Explicaré esto de otra forma 🙂

Muchos en sus distros usan firewalls, Firestarter o Firehol, pero estos firewalls en realidad ‘por detrás’ (en el background) usan iptables, entonces … ¿por qué no usar directamente iptables?

Y eso es lo que explicaré de forma breve aquí 🙂

¿Hasta aquí queda alguna duda? 😀

Para trabajar con iptables es necesario tener permisos administrativos, por lo que acá usaré sudo (pero si entras como root, no hay necesidad).

Para que nuestro ordenador sea realmente seguro, tenemos que solo permitir lo que nosotros queramos. Vean su ordenador como si fuera su propia casa, en su casa ustedes por defecto NO dejan que nadie entre, solo pueden entrar determinadas personas específicas que ustedes hayan aprobado antes no? Con los firewalls sucede igual, por defecto nadie puede entrar a nuestro ordenador, solo podrán entrar quienes nosotros deseemos 🙂

Para lograr esto que explico, aquí los pasos:

1. Abran una terminal, en ella pongan lo siguiente y presionen [Enter]:

sudo iptables -P INPUT DROP

Esto bastará para que nadie, absolutamente nadie pueda entrar a su ordenador… y, este «nadie» los incluye a ustedes mismos 😀

Explicación de la línea anterior: Con ella indicamos a iptables, que la política por defecto (-P) para todo lo que desee entrar a nuestro ordenador (INPUT) es obviarlo, no hacerle caso (DROP)

Nadie es bastante general, absoluto de hecho, ni ustedes mismos podrán navegar por internet ni nada, es por eso que debemos en esa terminal poner lo siguiente y presionar [Enter]:

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

… no entiendo una mierda, ¿qué hacen ahora esas dos líneas raritas?

Simple 🙂

La primera línea lo que dice es que el propio ordenador (-i lo … por cierto, lo = localhost) puede hacer lo que le plazca. Algo obvio, que puede parecer hasta absurdo… pero créanme, es tan importante como el aire jaja.

La segunda línea la explicaré usando el ejemplo/comparación/metáfora que usé antes, me refiero a comparar al ordenador con la casa 🙂 Por ejemplo, supongamos que vivimos con más personas en nuestra casa (madre, padre, hermanos, novia, etc). Si alguna de estas personas sale de casa, ¿es obvio/lógico que dejaremos que entre una vez regrese no?

Precisamente eso es lo que hace esa segunda línea. Todas las conexiones que nosotros iniciemos (que salgan desde nuestro ordenador), cuando por esa conexión quiera entrar algún dato, iptables dejará que ese dato entre. Poniendo un ejemplo más para explicarlo, si usando nuestro navegador intentamos navegar por internet, sin estas 2 reglas no podremos, pues sí… el navegador se conectará a internet, pero cuando intente bajar datos (.html, .gif, etc) hacia nuestro ordenador para mostrárnoslo, no podrá pues iptables le negará la entrada de paquetes (datos), mientras que con estas reglas, como nosotros iniciamos la conexión desde dentro (desde nuestro ordenador) y esa misma conexión es la que intenta entrar datos, sí se le permitirá el acceso.

Con esto listo, ya tenemos declarado que nadie puede acceder a ningún servicio de nuestro ordenador, nadie excepto el propio ordenador (127.0.0.1) y además, excepto conexiones que se inicien en el propio ordenador.

Ahora, explicaré un detalle más de forma rápida, pues la 2da parte de este tutorial explicará y abarcará más sobre esto jeje, no quiero adelantar mucho 😀

Sucede que por ejemplo, tienen un sitio web publicado en su ordenador, y desean que ese sitio web todos lo puedan ver, como antes declaramos que todo por defecto es NO permitido, excepto no se indique lo contrario, nadie podrá ver nuestro sitio web. Ahora haremos que cualquiera pueda ver el o los sitios webs que tengamos en nuestro ordenador, para ello ponemos:

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

Esto es muy simple de explicar 😀

Con esa línea estamos declarando que acepte o permita (-j ACCEPT) todo tráfico al puerto 80 (–dport 80) que sea TCP (-p tcp), y que además sea tráfico entrante (-A INPUT). Puse puerto 80, porque ese es el puerto del host web, o sea … cuando un navegador intenta abrir un sitio de X ordenador, siempre mira por defecto en ese puerto.

Ahora … qué hacer cuando se sabe qué reglas poner, pero cuando reiniciamos el ordenador vemos que los cambios no se guardaron? … bueno, para eso ya hice otro tutorial hoy mismo:

Como iniciar reglas de iptables automaticamente

Ahí lo explico detalladamente 😀

Y aquí termina el 1er tutorial sobre iptables para novatos, curiosos e interesados 😉 … no se preocupen, no será el último jeje, el próximo tratará de esto mismo, pero reglas más específicas, detallando todo un poco más y aumentando en la seguridad. No deseo extender este mucho más, pues en realidad es necesario que las bases (esto que leyeron acá al inicio) lo entiendan a la perfección 🙂

Saludos y… venga, las dudas las aclaro, siempre que sepa la respuesta LOL!! (no soy ni de lejos un experto en esto jajaja)


41 comentarios, deja el tuyo

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.

  1.   ezitoc dijo

    Muy bueno! Una pregunta nomás? Tenés idea de cuáles son las configuraciones por defecto que trae? La pregunta es de paranoico que soy nomás :D.

    Muchas gracias.

    1.    KZKG^Gaara dijo

      Por defecto, bueno por defecto acepta todo. O sea, servicio que pongas en tu ordenador… servicio que será público para el resto 😀
      ¿entiendes?

      Entonces… cuando no quieres que X sitio web lo vea Y amigo tuyo, o una determinada IP, ahí entra el firewall, htaccess, o algún método para denegar el acceso.

  2.   faustod dijo

    Saludos,

    Hermano, Excelente!!!! Ahora voy a leer el primero…

    Gracias por tu ayuda…
    Disla

  3.   rockandroleo dijo

    Gracias por el tutorial, me viene muy bien.
    Lo único que quisiera saber o asegurarme es si con estas instrucciones no tendré problemas alguno para realizar transferencias p2p, descargar archivos o realizar videollamadas, por ejemplo. Por lo que leí no, no debería haber problemas, pero prefiero asegurarme antes de introducir las líneas.
    Gracias desde ya.
    Saludos.

    1.    KZKG^Gaara dijo

      No deberías tener problemas, no obstante esta es una configuración bastante básica, en el próximo tutorial explicaré de forma más amplia cómo agregar reglas propias, dependiendo de la necesidad de cada cual, etc 🙂

      Pero repito, no deberías tener problemas, si los tienes solo reinicia el ordenador y listo, como si nunca hubieras configurado iptables 😀

      1.    tau dijo

        ¿ Reiniciar ? Suena muy windowsero. En el peor de los casos basta con que hagas un flush a las reglas iptables y establezcas las politicas por defecto a ACCEPT y asunto arreglado, asi que rockandroleo, no vas a tener problemas.

        Saludos !

  4.   rockandroleo dijo

    Y, perdón por hacer otra petición, pero ya que estamos en el tema de firewall, es posible que expliques cómo aplicar estas mismas órdenes en interfaces gráficas de cortafuegos como gufw o firestarter.
    De antemano, gracias.
    Saludos.

    1.    KZKG^Gaara dijo

      Explicaré Firestarter, gufw solo lo he visto y no lo he usado como tal, tal vez lo explique brevemente o tal vez elav mismo lo haga 🙂

  5.   Asuarto dijo

    Luego cuando me den ganas de sentirme hacker lo leeré, siempre quise aprender sobre seguridad

  6.   Daniel dijo

    Excelente tutorial, me parece bien explicado y mientras sea paso a paso mejor, como dirian por ahi, for dummies.

    Saludos.

    1.    KZKG^Gaara dijo

      hahahaha gracias 😀

  7.   Litos523 dijo

    Estupendo.
    Clarisimamente esplicado.
    Habra que leerlo y releerlo hasta que los conocimientos esten asentaditos y luego seguir con los siguientes tutos.
    Gracias por el articulo.

    1.    KZKG^Gaara dijo

      Gracias 😀
      Lo he intentado explicar como hubiera deseado que me lo explicaran a mí por primera vez, LOL!!

      Saludos 🙂

  8.   Oscar dijo

    Muy bueno, estoy probando y funciona correctamente,lo que corresponde a iniciar las reglas automáticamente al inicio lo voy a dejar para cuando publiques la segunda parte, hasta ese momento tendré un poco mas de trabajo digitando los comandos cada vez que reinicie la PC, gracias amigo por el tuto y por lo rápido que lo publicaste.

  9.   Xosé M. dijo

    gracias por la recomendación y las explicaciones.

    Pueden ver lo que se aplica con iptables con:

    sudo iptables -L

    1.    KZKG^Gaara dijo

      Exacto 😉
      Yo le agrego la n en realidad:
      iptables -nL

  10.   Alex dijo

    Gracias por el tutorial, quedo en espera de la segunda parte saludos.

  11.   guillermo dijo

    cuando saldra la segunda parte

  12.   jonisar dijo

    Tengo un proxy con squid en la Máquina1, ésta dará navegación a internet a otras máquinas de esa la lan 192.168.137.0/24, y está escuchando por 192.168.137.22:3128 (abro el puerto 3128 para cualquiera con firestarter), desde la Máquina1 si pongo en firefox que use el proxy 192.168.137.22:3128 funciona. Si desde otra pc con ip 192.168.137.10 por ejemplo, la Máquina2, coloco que use el proxy 192.168.137.22:3128 no funciona, salvo si en la Máquina1 coloco en firestarter compratir internet con la lan, ahi si funciona el proxy, el flujo de datos es atraves del proxy, pero si en la Máquina2 sacan el uso de proxy y apuntan bien la puerta de enlace podran navegar libremente.
    A qué se debe ésto?
    Con iptables cuáles serían las reglas?

  13.   geronimo dijo

    «Intento mantenerme en el lado oscuro de la fuerza, pues es donde está lo divertido de la vida.» y con delirio de jedi jajajajaja

  14.   Carlos dijo

    Muy bueno! llego un poco tarde no? jaja el post tiene como 2 años pero me fui mas que util.. te agradezco por explicarlo tan sencillo que yo lo pude entender jaja sigo con las otras partes..

    1.    KZKG^Gaara dijo

      Gracias por leernos 🙂

      Sí, el post no es del todo nuevo pero aún es muy útil, no ha cambiado casi nada del funcionamiento de los firewalls en la última década creo yo 😀

      Saludos y gracias a tí por comentar

  15.   lion dijo

    Menuda explicacion con florecitas y todo. Soy usuario «novato» pero con muchas ganas de aprender Linux, hace poco estuve leyendo un post sobre un script de nmap para ver quienes se conectaban a mi red y para no hacerte largo el cuento, en un comentario de ese post decia un usuario que aplicaramos la famosa primer linea que pusiste de iptables y que con eso bastaba, y como soy tremendo noobster, lo aplique pero como bien lo has escrito aqui, no entraba a Internet 🙁
    Gracias por este post expicando el uso de iptables, ojalá y lo extiendas y me expliques a fondo su funcionamiento total. Saludos!

    1.    KZKG^Gaara dijo

      Gracias a tí por leernos y comentar 🙂
      iptables es fenomenal, hace tan pero tan bien su trabajo de cerrar que… ni nosotros mismos podemos salir, eso es claro, a menos de que sepamos cómo configurarlo. Es por eso que he intentado explicar iptables tan simple como me fue posible, pues a veces no todos son capaces de entender algo a la primera.

      Gracias por el comentario, saludos ^_^

      PD: Sobre lo de extender el post, acá está la 2da parte: https://blog.desdelinux.net/iptables-para-novatos-curiosos-interesados-2da-parte/

      1.    lion dijo

        Bien, muchas gracias, si leí la segunda parte y me puse a jugar de inmediato en la consola con tu tremenda guía. Muchas gracias, oye por cierto espero puedas ayudarme ya que tengo una pequeña duda y como bien sabrás soy un novato intentando aprender de este maravilloso software libre, al punto, hace poco tenía instalada una distro diferente a la cual le modifiqué al archivo dhcp.config una linea y dejandolo asi:
        #send host-name «»; pues me funcionó en aquella distro y todo bien, mi nombre de pc no aparece en el server dhcp de mi router, solo el iconito de la pc, pero en esta nueva distro Le modifique la misma linea dejandola igual pero no funcionó. ¿Podrias orientarme un poco? 🙁 Porfavor…

        1.    KZKG^Gaara dijo

          Ya esto puede ser algo más complejo o extenso, crea un tema en nuestro foro (foro.desdelinux.net) y ahí entre todos te ayudamos 🙂

          Gracias por leernos y comentar

          1.    lion dijo

            Listo, gracias por la respuesta. Mañana por la mañana hago el tema y espero que puedas colaborarme, saludos y desde luego un abrazo.

  16.   Diego dijo

    Excelente articulo.
    crees que con esto pueda implementar un firewall utilizando iptables en mi casa o necesito saber algo mas? tienes algun tutorial de configuracion o con estos articulos queda?
    saludos

    1.    KZKG^Gaara dijo

      En realidad esto viene siendo lo básico y medio, si quieres algo más avanzado (como límite de conexiones, etc) puedes revisar todos los posts que hablen de iptables acá -» https://blog.desdelinux.net/tag/iptables

      No obstante, yo con esto tengo casi todo mi firewall local 🙂

  17.   Crow dijo

    No me parecen para nada mal, como para empezar.
    Pero modificaria algo.

    Dejaria drop a input y forward y accept a output
    -P INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    Con eso bastaria para que un newbi en iptables este «medianamente seguro»
    Luego, abrir los puertos que necesitemos.
    Me gusta mucho la pagina, tienen muy buenas cosas. Gracias por compartirlas!
    Saludos!

  18.   FGZ dijo

    Buenas noches a todos los que han comentado pero a ver si me aclaran porque estoy mas perdido que un lobo en alcantarilla, soy cubano y creo que siempre vamos mas alla en todo tema posible y bueno: Disculpen de ante manos si no tiene que ver con el tema!!!

    Tengo un servidor UBUNTU Server 15 y resulta que tengo un servicio alojado dentro que lo brinda otro programa que es stream TV pero trato de hacer el control del mismo a travez de MAC Address para que el control del puerto por ejemplo 6500 que lo seleccione al azar, nadie pueda entrar a travez de ese puerto al no ser con el MAC Address indicado en el iptables. Hice la configuraciones de este articulo numero uno y funciona muyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy bien, mejor de lo que queria pero he buscado info en todooooooooooooo y no encentro la dichosa configuracion para permitir un mac address use un puerto determinado solamente y nada mas.

    de antemanos mil gracias !

  19.   Nicolas Gonzalez dijo

    Hola, como estas, lei el articulo iptables para novatos, es muy bueno, los felicito, yo mucho de linux no se, por eso les quiero hacer una consulta, tengo un inconveniente, si me pueden ayudar se los agradezco, tengo un servidor con varias ip y cada unos dias, cuando el servidor esta enviando emails por las ip que estan en el servidor, deja de enviar emails, por lo que para que vuelva a enviar emails tengo que poner:

    /etc/init.d/iptables stop

    cuando pongo eso empieza nuevamente a enviar emails, pero luego de unos dias se vuelve a bloquear, me pueden decir que comandos tengo que poner para que el servidor no bloquee las ip?, estuve leyendo y por lo que ustedes dicen en la pagina, con estas 2 lineas se tendria que solucionar:

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

    pero como no se bien si es eso, antes de poner esos comando les queria consultar si con eso ya no se van a volver a bloquear las ip del servidor, espero su pronta respuesta. Saludos. Nicolas.

  20.   Tux MH dijo

    Hola buen día, leí tu pequeño tuto y me pareció muy bueno y por tal motivo quisiera hacerte una consulta:

    Cómo puedo redireccionar las peticiones que entran por la interfaz lo (localhost) hacia otro equipo (otra IP) con el mismo puerto, estoy usando algo como esto

    iptables -t nat -A PREROUTING -p tcp –dport 3306 -j DNAT –to 148.204.38.105:3306

    pero no me redirecciona, estoy monitoreando con tcpdump el puerto 3306 y si recibe paquetes pero no los envía a la nueva IP, pero si hago peticiones desde otro equipo si las redirecciona. En pocas palabras, me redirecciona lo que entra por -i eth0, pero no lo que entra por -i lo.

    De antemano agradezco la mucha o poca ayuda que me puedas brindar. salu2.

  21.   Nicolas dijo

    Hola, como estas, muy buena la pagina, tiene bastante informacion.

    Tengo un problema y queria ver si me podes ayudar, tengo instalado el PowerMta en Centos 6 con Cpanel, el problema es que despues de unos dias el PowerMta deja de enviar emails hacia el exterior, es como que se bloquean las ip, y cada unos dias tengo que estar colocando el comando /etc/init.d/iptables stop, con eso el PowerMta empieza a enviar emails denuevo al exterior, con eso se soluciona el problema por unos dias, pero luego vuelve a pasar.

    Sabes como puedo hacer para solucionar el problema?, hay algo que pueda configurar en el servidor o en el firewall para que no vuelva a suceder eso?, ya que no se porque esta pasando eso, si me podes ayudar te agradezco, espero tu pronta respuesta.

    Saludos.

    Nicolas.

  22.   Luis Delgado dijo

    Excelente explicación y muy clara, he buscado libros pero son muy extensos y mi ingles no es muy bueno.
    ¿ Conoces algún libro que recomiendes en español ?

  23.   fbec dijo

    que tal buenos dias, muy bien explicado , pero sigo sin tener entrada desde internet, te explico , tengo un server con ubuntu , el cual tiene dos tarjetas de red , una con esta configuracion Link encap:Ethernet HWaddr a0:f3:c1:10:05:93 inet addr:192.168.3.64 Bcast:192.168.3.255 Mask:255.255.255.0 y la segunda con esta otra Link encap:Ethernet HWaddr a0:f3:c1:03:73:7b inet addr:192.168.1.64 Bcast:192.168.1.255 Mask:255.255.255.0 , donde la segunda es la que tiene mi gateway que es 192.168.1.64 , pero la primer tarjeta es la que controla mis camaras y quiero verlas desde internet desde mi ip fija ,,,puedo verlas desde la lan pero no desde internet,, me podrias auxiliar en eso ? , o si mi router es el que esta mal configurado es un tp-link archer c2,,,gracias

  24.   Luis Castro dijo

    Hola acabo de hacer esto en mi servidor y ya sabras, como podria recuperarlo?
    iptables -P INPUT DROP
    Te dejo mi Email ing.lcr.21@gmail.com

  25.   instalaciones eléctricas dijo

    He estado buscando un poco por posts de alta calidad o entradas en blogs sobre estos contenidos. Explorando en Google por fin encontré este sitio web. Con lectura de esta articulo, estoy convencido que he encontrado lo que estaba buscando o al menos tengo esa extraña sensacion, he descubierto exactamente lo que necesitaba. ¡Por supuesto voy hacer que no se olvide este sitio web y recomendarlo, os pienso visitar regularmente.

    Saludos

  26.   na dijo

    la verdad te felicito! he leido muchas páginas de iptables pero ninguna tan sencillamente explicada como la tuya; excelente explicacion!!
    gracias por hacerme con estas explicaciones la vida mas fácil!!

  27.   Anonimous dijo

    Por un momento me siento Árabe xD

  28.   Victor Andres Embriones.lan dijo

    Mi profe usa esto para dar classe, gracias y un saludo. Gang