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]
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
- 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
- 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
- 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
- Viel Losero - Initial work - Viel Losero
back
Referencias:
Licencia: CC-BY-SA