Ugly firewall

Table of contents

Ugly Firewall

Estos son mis scripts para configurar linux netfilter iptables, trato de no instalar terceras herramientas que no pueden hacer lo que necesito, son ultra complicadas o necesitan compilar para correr un binario, añadiendo mas capas a netfilter. Es mas fácil leer un simple script para ver que es lo que hace, y solo con pocas lineas de codigo (menos de 200) y un poco de organización podemos administrar nuestro firewall en linux.

Esta no es una herramienta para administrat iptables sin saber como iptables funciona, para crear nuestros rulescripts para iptables es recomendable aprender un poco de iptables.

Como funciona

Creando reglas de usuario en iptables como por ejemplo LOG-ACCEPT-OUTPUT para redirigir los paquetes y filtrar solo las reglas con nuestro prefijo LOG- para mostar el status.

Con un fichero base que podemos customizar con nuestra política para denegar todo, permitir solo paquetes internos, o permitir solo paquetes de salida, etc.

Otros ficheros rulescript como iptables.output.http.https.dns.uf.sh para cargar facilmente las reglas predefinidas.

Y mas.

Empezando

Estas instrucciones descargaran una copia del proyecto.

Instalación

git clone https://github.com/VielLosero/ugly-firewall.git

root@kali:~/data/git-repos/vielLosero# git clone https://github.com/VielLosero/ugly-firewall.git                                                              
Clonando en 'ugly-firewall'...                                                                                                                                
remote: Enumerating objects: 4, done.                                                                                                                         
remote: Counting objects: 100% (4/4), done.                                                                                                                   
remote: Compressing objects: 100% (4/4), done.                                                                                                                
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0                                                                                                  
Desempaquetando objetos: 100% (4/4), listo.                  

Ejecutando ugly-firewall

Después de clonar el repositorio, cambiar al directorio ugly-firewall y ejecutar ./uf

Para ejecutar mas facil crear un link como: ln -s PATH/ugly-firewall/uf /usr/bin/fw

root@kali:~# cd ugly-firewall/                                                                         
root@kali:~/ugly-firewall# ./uf

root@kali:~# fw                                                                                                                              

Salida esperada

ip4 pkts bytes target     prot opt in     out     source               destination
 7002 9017K LOG-RAW-PREROUTING  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
 6784 5298K LOG-RAW-OUTPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 LOG-DROP-INPUT  all  --  !lo    *       0.0.0.0/0            127.0.0.0/8         
 4103 4326K LOG-ACCEPT-INPUT  all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 2899 4692K LOG-ACCEPT-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 LOG-DROP-INPUT  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            state INVALID,NEW
    0     0 LOG-DROP-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
    0     0 LOG-DROP-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 LOG-DROP-FORWARD  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
 2041  661K LOG-ACCEPT-OUTPUT  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0            owner UID match 127
  254 24774 LOG-ACCEPT-OUTPUT  tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            tcp dpt:853
 4103 4326K LOG-ACCEPT-OUTPUT  all  --  *      lo      0.0.0.0/0            127.0.0.1           
    0     0 LOG-ACCEPT-OUTPUT  udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spt:68
    0     0 LOG-ACCEPT-OUTPUT  icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
  386  286K LOG-DROP-OUTPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
ip6 pkts bytes target     prot opt in     out     source               destination
   30  3078 LOG-RAW-PREROUTING  all      *      *       ::/0                 ::/0                
   31  3134 LOG-RAW-OUTPUT  all      *      *       ::/0                 ::/0                
    0     0 LOG-DROP-INPUT  all      !lo    *       ::/0                 ::1                 
   30  3078 LOG-ACCEPT-INPUT  all      lo     *       ::/0                 ::/0                
    0     0 LOG-ACCEPT-INPUT  all      *      *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 LOG-DROP-INPUT  all      eth0   *       ::/0                 ::/0                 state INVALID,NEW
    0     0 LOG-DROP-INPUT  all      *      *       ::/0                 ::/0                 ctstate INVALID
    0     0 LOG-DROP-INPUT  all      *      *       ::/0                 ::/0                
    0     0 LOG-DROP-FORWARD  all      *      *       ::/0                 ::/0                
    0     0 LOG-ACCEPT-OUTPUT  all      *      eth0    ::/0                 ::/0                 owner UID match 127
    0     0 LOG-ACCEPT-OUTPUT  tcp      *      eth0    ::/0                 ::/0                 tcp dpt:853
   30  3078 LOG-ACCEPT-OUTPUT  all      *      *       ::/0                 ::/64               
    0     0 LOG-ACCEPT-OUTPUT  udp      *      *       ::/0                 ::/0                 udp spt:546
    0     0 LOG-ACCEPT-OUTPUT  icmp     *      *       ::/0                 ::/0                
    1    56 LOG-DROP-OUTPUT  all      *      *       ::/0                 ::/0                
UGLY-FIREWALL: [quit] [zero-counters] [flush] [base] [load] [policy] [ip4] [ip6]

Ugly-firewall running Gif

Opciones

UGLY-FIREWALL: [quit] [zero-counters] [flush] [base] [load] [policy] [ip4] [ip6]
  • q salir
  • z resetear contadores
  • f borrar todas las reglas y cadenas
  • b cargar las reglas base predefinidas
  • l cargar otras reglas de usuario adicionales
  • p menu de políticas
  • 4 mostrar/ocultar ip4
  • 6 mostrar/ocultar ip6
  • r no documentada: listar reglas iptables

Como crear rulescripts

  1. Solo hace falta que el fichero sea un bash script que carge la configuración de uglu-firewall:
#!/bin/bash
source $(dirname $0)/uf.config.sh
  1. que contenga las reglas de iptables deseadas por ejemplo:
$iptables -I OUTPUT 1 -o $out_int -j LOG-ACCEPT-OUTPUT
$ip6tables -I OUTPUT 1 -o $out_int -j LOG-ACCEPT-OUTPUT
  1. y guardarlo en el directorio de ugly-firewall con el nombre que queramos y al final del nombre “.uf.sh” para que uglu-firewall lo encuentre y esté disponible en el menu de carga.
iptables.output.accept.all.uf.sh

Configuración

Para ver o cambiar las interfaces de red editar uf.config.sh

Para ver o cambiar las LOG-RULES disponibles editar iptables.log.sh

Contribución y soporte

Por fabor leer Contributor covenant para mas información, y el codigo de conducta antes de enviar solicitudes o problemas.

Si quieres ayudar a este projecto con donaciones, esta es mi dirección Bitcoin:

bc1q6d245chm8t5sdkqjugwg3ce2c92m276ee4ksv4

Todas las donaciones son apreciadas!

Author

back

Referencias:

Netfilter

Bash

Licencia: CC-BY-SA