Cómo iniciar reglas de iptables automáticamente en systemd (ArchLinux)

Soy considerado por algunos como un paranoico cuando de seguridad se trata, es por ello que el uso de un firewall me es imprescindible. En mi laptop tengo información sensible, de alta importancia para mí; y debido a que el firewall es para la PC como un cerradura o caja fuerte para nosotros, además recordando que en el ordenador guardamos passwords de acceso a emails, datos de cuentas bancarias (quien las tenga), información de servidores, y demás información virtual que nos influye directamente en nuestra vida física … bueno, sin lugar a dudas andar por la red sin un firewall configurado, sin la debida seguridad en nuestro ordenador no es algo que se recomiende.

Tiempo atrás les mostré cómo iniciar reglas de iptables automáticamente en distros como Debian, Ubuntu u otras que contengan el archivo /etc/rc.local, no obstante en ArchLinux como usa systemd este archivo no existe.

Entonces, la forma que encontré para que mi iptables se configure como yo deseo  es crear un script en bash que configure iptables, y luego modificar el archivo /usr/lib/systemd/system/iptables.service … pero, vamos por partes 🙂

1. Debemos crear un script bash que contenga nuestras reglas de iptables, algo así como esto: Ejemplo de script bash + iptables

2. Luego de haber creado el script, escrito nuestras reglas en él y darle permisos de ejecución pasamos a editar el servicio de iptables de systemd:

El siguiente comando debe ser ejecutado con permisos de administración, bien usando sudo como yo o directamente con el usuario root

sudo nano /usr/lib/systemd/system/iptables.service

Nos encontraremos con algo como esto:

[Unit]
Description=Packet Filtering Framework

[Service]
Type=oneshot
ExecStart=/usr/bin/iptables-restore /etc/iptables/iptables.rules
ExecReload=/usr/bin/iptables-restore /etc/iptables/iptables.rules
ExecStop=/usr/lib/systemd/scripts/iptables-flush
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

3. Suponiendo que el script que creamos previamente esté ubicado en /home/miusuario/script-iptables.sh entonces dejaremos el archivo iptables.service que tenemos abierto de la siguiente forma:

[Unit]
Description=Packet Filtering Framework

[Service]
Type=oneshot
ExecStart=/home/miusuario/script-iptables.sh
ExecReload=/home/miusuario/script-iptables.sh
ExecStop=/usr/lib/systemd/scripts/iptables-flush
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

4. Luego debemos asegurarnos de que iptables se inicie automáticamente:

sudo systemctl enable iptables

5. Lo iniciamos:

sudo systemctl start iptables

6. Y podemos verificar las reglas:

sudo iptables -nL

Esto es solo la forma más simple que encontré de (1) tener mi propio script en bash que me configure iptables, también (2) que las reglas se inicien automáticamente y por último (3) que el script mismo fuese algo independiente, o sea, que si mañana deseo usarlo en un Debian que me instale (por ejemplo) no tener que reconfigurar mucho.

En fin, espero les resulte de utilidad 🙂

Saludos


8 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.   eliotime3000 dijo

    Interesante….

  2.   Saul dijo

    No hubiera sido mas fácil editar el archivo iptables.rules, si ya se tiene acceso de root con sudo valdría la pena modificarlo, no?

  3.   xphnx dijo

    Yo lo hago de una manera un poco diferente, aunque aprovechando también el script que has subido para lanzar las reglas.

    1- Lanzamos el servicio (si aun no lo hemos hecho):
    # systemctl enable iptables.service
    # systemctl start iptables.service

    2- Vemos qué reglas tenemos activas (suponemos que esta todo abierto si no hemos tocado nada) sudo iptables -nvL

    3- Cambiamos a las reglas que queremos, lanzando el script de configuración:
    # sh /home/miusuario/script-iptables.sh

    4- Vemos cómo han cambiado las reglas activas:
    # iptables -nvL

    5- Guardamos la nueva configuración de iptables para futuros reinicios:
    # iptables-save > /etc/iptables/iptables.rules

    5b- Si editamos a mano el fichero /etc/iptables/iptables.rules para cambiar las reglas, debemos recargar la configuración:
    # systemctl reload iptables

    Al menos para mi así resulta más facil. Estoy intentando aprender algo de bash y kdialog para gestionar las configuraciones de una forma mas grafica. Posteriormente intentaré hacer algo más completo con qtcreator por ejemplo, para poder tener varios scripts de configuracion en funcion del equipo que estemos configurando (router, PC, etc…) a ver si me sale.

  4.   dhunter dijo

    Este captcha para los comentarios es un colador de bugs, por favor cambien a otro o actualizen este porque se vuelve molesto a los varios intentos.

    1.    elav dijo

      Es el mismo usado por humanOS, Firefoxmanía.. a lo mejor es algo con la caché.

      1.    dhunter dijo

        Pues yo ya ni comento en esos dos.

  5.   mj dijo

    Saludos,
    Este es un tema de extrema utilidad.
    Sin duda para quienes interesa la seguridad de la información almacenada en nuestra PC; «iptables» es una de las herramientas que debe aprenderse a usar; aunque, por su propia importancia sea un poco complicado de aprender.
    Encontré este vídeo sobre el tema del cual espero me permitan compartir su dirección electrónica «http://www.youtube.com/watch?v=Z6a-K_8FT_Y» ; mi sorpresa fue, que es algo diferente de lo que aquí se trata. Pero en fin, supongo que será por la diversidad de distribuciones que posee GNU/Linux (ARCH, DEBIAN, SUSE, etc), habrá que aprender de todos modos.