Firehol: iptables for human beings (Arch)

Primero que nada, todos los créditos van para @YukiteruAmano, pues este post está basado en el tutorial que publicó en el foro. La diferencia es que lo voy a enfocar a Arch, aunque probablemente funcione para otras distros basadas en systemd.

¿Qué es Firehol?

Firehol, es una pequeña aplicación que nos sirve para manejar el firewall integrado al kernel y su herramienta iptables. Firehol, carece de una interfaz gráfica, toda configuración debe hacerse por medio de archivos de texto, pero pese a esto, la configuración no deja de ser sencilla para usuarios noveles, o poderosa para quienes buscan opciones avanzadas. Todo lo que hace Firehol, es simplificar lo más posible la creación de reglas iptables y habilitar un buen firewall para nuestro sistema.

Instalación y configuración

Firehol no se encuentra en los repositorios oficiales de Arch, así que recurriremos al AUR.

yaourt -S firehol
Luego vamos al archivo de configuración.

sudo nano /etc/firehol/firehol.conf

Y agregamos ahí las reglas, pueden usar estas.

Sigue el activar Firehol para cada inicio. Bastante simple con systemd.

sudo systemctl enable firehol

Iniciamos Firehol.

sudo systemctl start firehol

Por último verificamos que las reglas de iptables se hayan creado y cargado correctamente.

sudo iptables -L

Desactivar IPv6

Como Firehol no maneja ip6tables y como la mayoría de nuestras conexiones no tienen soporte para IPv6, mi recomendación es desactivarlo.

En Arch agregamos ipv6.disable=1 a la línea del kernel en el archivo /etc/default/grub


...
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="rw ipv6.disable=1"
GRUB_CMDLINE_LINUX=""
...

Ahora regeneramos el grub.cfg:

sudo grub-mkconfig -o /boot/grub/grub.cfg

En Debian basta con:

sudo echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf



Mexicano. Aparte de GNU/Linux y el FLOSS gusto de la física, las matemáticas y el anime (todo un nerd). Me encantan las galletas, aunque esa no es precisamente la fuente de mi nick.

26 comentarios

  1.   Felipe dijo

    No entiendo. ¿Seguís el tutorial y ya Tenes el Firewall Andando y bloqueado todas las conexiones? Otra cosa Un tutorial para Arch es complejo por ejemplo yo nunca he usado Firewall sudo o yaourt. Sin embargo se Entiende. O a lo mejor algún nuevo escribe yaourt y le saldra error. Para Manjaro es mas correcto.

    1.    Yukiteru dijo

      Como dices @felipe, siguiendo el tutorial y poniendo en el archivo /etc/firehol/firehol.conf las reglas dadas por @cookie en el paste, ya tendrás un firewall sencillo para proteger el sistema a nivel básico. Esta configuración funciona para toda distro donde puedas poner Firehol, con la peculariedad de cada distro maneja sus servicios de formas distintas (Debian atraves de sysvinit, Arch con systemd) y en cuanto a la instalación, cada quien conoce lo que tiene, en Arch debes usar los repos AUR y yaourt, en Debian te bastan los oficiales, y asi en muchas otras, solo toca buscar un poco en los repositorios y adaptar el comando de instalación.

  2.   ci dijo

    gracias, tomo nota.

  3.   Config dijo

    Todo eso esta muy bien… pero falta lo mas importante; hay que explicar como se crean las reglas !!, que significan, como crear nuevas… Si no se explica eso, lo que pones sirve de poco :-/

    1.    Yukiteru dijo

      Crear reglas nuevas es sencillo, la documentación de firehol es clara y muy precisa en cuanto a la creación de reglas personalizadas así que leyendo un poco te será fácil personalizarlo y adaptarlo a tus necesidades.

      Creo que la razón inicial del post de @cookie como la mía en el foro, era la de darle una herramienta a los usuarios y lectores que les permita darle un poco más de seguridad a sus computadoras, todo ello a nivel básico. El resto se deja a la deriva para que lo adaptes a tus necesidades.

    2.    cookie dijo

      Si leíste el link al tutorial de Yukiteru te darás cuenta de que la intención es dar a conocer la aplicación y la configuración de un firewall básico. Aclaré que mi post sólo era una copia enfocada a Arch.

  4.   Maacub dijo

    ¿Y esto es ‘para humanos’? o_O
    Prueba Gufw en Arch: https://aur.archlinux.org/packages/gufw/ >> Click en Status. O ufw si prefieres la terminal: sudo ufw enable

    Ya estás protegido si eres un usuario normal. Eso sí es ‘para humanos’ 🙂

    1.    elav dijo

      Firehol realmente es un Front-End para IPTables y si lo comparamos con este último, es bastante humano 😀

    2.    Yukiteru dijo

      Considero a ufw (Gufw es solo una interfaz del mismo) como una mala opción en cuanto a seguridad. Razón: por más reglas de seguridad que escribía en ufw no podía evitar que en las pruebas de mi firewall tanto vía Web como las que realizaba usando nmap, me aparecieran servicios como avahi-daemon y exim4 abiertos, y solo bastaba un ataque “stealth” para conocer la más mínima características de mi sistema, núcleo y servicios que corría, cosa que no me ha pasado usando firehol o arno’s firewall.

      1.    Giskard dijo

        Pues no sé tú, pero como escribí arriba, yo uso Xubuntu y mi firewall va con GUFW y pasé TODAS las pruebas del link que el autor puso sin problemas. Todo stealth. Nada abierto. Así que, según mi experiencia ufw (y por ende gufw) me van de maravilla. No critico el empleo de otros modos de control de firewalls pero gufw funciona sin problemas y se obtienen resultados de seguridad estupendos.

        Si tienes algunas pruebas que pienses que pueden arrojar vulnerabilidades en mi sistema dime cuáles son y con gusto las ejecutaré por acá y te haré saber los resultados.

        1.    Yukiteru dijo

          Más abajo comente algo sobre el tema de ufw, donde digo que el error lo vi en 2008, usando Ubuntu 8.04 Hardy Heron. ¿Qué lo han corregido ya? Lo más seguro es que así sea, asi que no hay porque preocuparte, pero aún así, eso no quita que el bug estuvo allí y pude evidenciarlo, aunque no era un mal de morir, solo detuve los demonios avahi-daemon y exim4, y ya problema solucionado. Lo más raro de todo, es que solo esos dos procesos tenian el problema.

          Hice mención del hecho como anecdota personal, y opine de la misma forma cuando dije: “Considero…”

          Saludos 🙂

    3.    Giskard dijo

      +1

  5.   costales dijo

    @Yukiteru: ¿Probaste desde tu propio ordenador? Si estas mirando desde tu PC, es normal que puedas acceder al puerto del servicio X, pues el tráfico que se bloquea es el de la red, no localhost:
    http://www.ubuntu-es.org/node/140650#.UgJZ3cUyYZg
    https://answers.launchpad.net/gui-ufw/+question/194272

    En caso contrario, por favor, reporta un bug 🙂
    Un saludo 🙂

    1.    Yukiteru dijo

      Desde otra computadora usando una red Lan en el caso de nmap, y el vía Web usando esta pagina https://www.grc.com/x/ne.dll?bh0bkyd2, usando la opción de puertos personalizados, ambos coincidian en que avahi y exim4 estaban escuchando desde la net aunque ufw tenia configurado su bloqueo.

      Ese detallito de avahi-daemon y exim4 lo solucione simplemente desactivando los servicios y ya…no reporte bug en ese entonces, y creo que no tiene sentido hacerlo ya, porque eso fue por allá en 2008, usando Hardy.

      1.    Giskard dijo

        2008 fue hace 5 años; de Hardy Heron a Raring Ringtail hay 10 *buntus. Esa misma prueba en mi Xubuntu, hecha ayer y repetida hoy (Agosto 2013) da perfecto en todo. Y yo sólo uso UFW.

        Repito: Tienes alguna prueba adicional para realizar? Con gusto la hago y reporto lo que salga de este lado.

        1.    Yukiteru dijo

          Has un escaneo SYN e IDLE a tu PC usando nmap, eso te dara una idea de que tan seguro es tu sistema.

          1.    Giskard dijo

            El man de nmap tiene mas de 3000 líneas. Si me pasas los comandos a ejecutar con gusto lo hago y te reporto el resultado.

          2.    Yukiteru dijo

            Mmm no sabia de las 3000 páginas del man de nmap. pero zenmap es una ayuda para hacer lo que te digo, es un front-end gráfico para nmap, pero aún así la opción para SYN scan con nmap es -sS, mientras que la opción para idle scan es -sI, pero el comando exacto es tarea.

            Has el escaneo desde otra maquina apuntando a la ip de tu maquina con ubuntu, no lo hagas desde tu propia pc, porque así no funciona la cosa.

          3.    Yukiteru dijo

            LOL!! Error mio lo de 3000 páginas, cuando eran líneas 😛

  6. no se pero creo que una GUI para eso en GNU/Linux para manejar el firewall seria algo prudente y no dejar todo destapado como en ubuntu o todo tapado como en fedora , deberas estaria bueno xD, o algo para condigurar las malditas alternativas asesinas xD hjahjahjaja tiene poco que me pelie con ellas y el open jdk pero en fin tambien hay que mantener el principio de kiss

  7.   Mauricio dijo

    Gracias a todos los tropiezos que pase en el pasado con iptables, hoy puedo entenderlo a niverl raw o sea, hablarle directamente como viene de fabrica.

    Y no es algo tan complicado, es muy sencillo de aprender.

    Si el autor del post me lo permite, publicare un extracto del script firewall que uso actualmente.

    ## Limpieza de reglas
    iptables -F
    iptables -X
    iptables -Z
    iptables -t nat -F

    ## Establecer politica por defecto: DROP
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # Operar en localhost sin limitaciones
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    # Permitir que la maquina pueda salir a la web
    iptables -A INPUT -p tcp -m tcp –sport 80 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT

    # Ya tambien a webs seguras
    iptables -A INPUT -p tcp -m tcp –sport 443 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -p tcp -m tcp –dport 443 -j ACCEPT

    # Permitir ping desde adentro hacia afuera
    iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
    iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT

    # Proteccion para SSH

    #iptables -I INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m limit –limit 30/minute –limit-burst 5 -m comment –comment “SSH-kick” -j ACCEPT
    #iptables -A INPUT -p tcp -m tcp –dport 22 -j LOG –log-prefix “INTENTO DE ACCESO A SSH:” –log-level 4
    #iptables -A INPUT -p tcp -m tcp –dport 22 -j DROP

    # Reglas para amule para permitir conexiones salientes y entrantes en el puerto
    iptables -A INPUT -p tcp -m tcp –dport 16420 -m conntrack –ctstate NEW -m comment –comment “aMule ” -j ACCEPT
    iptables -A OUTPUT -p tcp -m tcp –sport 16420 -m conntrack –ctstate RELATED,ESTABLISHED -m comment –comment “aMule” -j ACCEPT
    iptables -A INPUT -p udp –dport 9995 -m comment –comment “aMule” -j ACCEPT
    iptables -A OUTPUT -p udp –sport 9995 -j ACCEPT
    iptables -A INPUT -p udp –dport 16423 -j ACCEPT
    iptables -A OUTPUT -p udp –sport 16423 -j ACCEPT

    Ahora un poco de explicacion. Como podran fijarse, ahi estan las reglas con politica DROP por defecto, nada sale y entra al equipo sin que tu le digas.

    Entonces, se deja pasar lo basico, el localhost y la navegacion a la red de redes.

    Se puede ver, que tambien, hay reglas para el ssh y amule. Si se fijan bien como estan hecho, podran hacer las demas reglas que quieran.

    El truco esta, en ver la estructura de las reglas y aplicar a un tipo de puerto o protocolo en especifico, sea este udp o tcp.

    Espero que puedan entender esto que acabo de colocar aqui.

    1.    cookie dijo

      Deberías de hacer un post explicandolo 😉 estaría genial.

  8.   @Jlcmux dijo

    Tengo una pregunta. En caso tal que quiera reachazar conexiones http y https pongo:

    server “http https” drop ?

    Y así sucesivamente con cualquier servicio?

    Gracias

Deja un 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.