Empezando

A continuación veremos un pequeño tutorial en el que configuraremos un pequeño cortafuegos para que haga uso de un servicio de listas negras en un servidor GNU/Linux. El objetivo de este tutorial es familiarizar al usuario con las herramientas y mostrar una pequeña parte de lo que nos ofrece el software, si desea ver su uso en algún escenario "real" puede ver alguna de las guías disponibles.

Instalando

Usaremos el instalador del paquete, para ello simplemente copiaremos y pegaremos el siguiente contenido en una shell.

DOWNLOAD_URL=$(wget -O - https://api.github.com/repos/luids-io/netfilter/releases/latest| grep download.*installer | grep -v sha256 | cut -d '"' -f4)
wget ${DOWNLOAD_URL} -O installer_netfilter.sh
chmod 755 installer_netfilter.sh
sudo ./installer_netfilter.sh

El instalador instala unos scripts systemd para la inicialización de los servicios, pero no los inicia ni activa, esto debe hacerlo explícitamente el administrador de sistemas. Lo haremos posteriormente cuando tengamos el sistema listo.

Instalando nuestras dependencias

Debido a que nuestro cortafuegos va a hacer uso de un sistema de listas negras, necesitamos un servidor xlistd que de soporte al sistema. Por ello procederemos a instalar dicho servidor.

DOWNLOAD_URL=$(wget -O - https://api.github.com/repos/luids-io/xlist/releases/latest| grep download.*installer | grep -v sha256 | cut -d '"' -f4)
wget ${DOWNLOAD_URL} -O installer_xlist.sh
chmod 755 installer_xlist.sh
sudo ./installer_xlist.sh

Nuestra primera lista negra

En una instalación estándar, la configuración del servicio xlistd tiene configurado un servicio de listas que hace uso de los fichero alojados en /var/lib/luids/xlist/local. Modificaremos el fichero blacklist.xlist de dicho directorio para agregar a nuestra lista

Contenido de /var/lib/luids/xlist/local/blacklist.xlist
ip4,plain,1.2.3.4
ip4,cidr,69.69.69.0/24
ip4,plain,8.8.4.4

Reiniciaremos el servicio…​

sudo systemctl restart luids-xlistd

Probaremos nuestro sistema de listas negras recién configurado…​

$ xlistc
[ip4 ip6] (1.317265ms)
$ xlistc 8.8.8.8
ip4,8.8.8.8: false,"",0 (199.248µs)
$ xlistc 8.8.4.4
ip4,8.8.4.4: true,"found in 'my-blacklist'",0 (191.068µs)

Ya tenemos un sistema de listas negras funcionando. Aunque en la práctica no es de mucha utilidad, nos servirá para mostrar parte de la funcionalidad de nuestro software.

Integrando el sistema de listas negras

Para que nuestro sistema pueda ser usado, debemos "publicarlo" en los servicios del host. Para ello editaremos el fichero /etc/luids/apiservices.json.

Contenido de /etc/luids/apiservices.json
[
    {
        "id": "xlistnfq",
        "api": "luids.xlist.v1.Check",
        "endpoint": "tcp://127.0.0.1:5801"
    }
]

Editaremos el fichero de plugins usados por lunfqueue y configuraremos un procesador IP con una acción que chequee en listas negras.

Contenido de /etc/luids/netfilter/plugins-nfqueue.json
[
  {
    "name": "ip-processor",
    "class": "ipp",
    "actions": [
      {
        "name": "checkip",
        "class": "checkip",
        "services": { "xlist": "xlistnfq" },
        "rules": [
          { "when": "listed", "rule": { "log": true, "verdict": "drop" } }
        ]
      }
    ]
  }
]

Reiniciaremos nuestro servicio recién configurado.

sudo systemctl restart luids-lunfqueue

Integrando con netfilter vía iptables

Para nuestra configuración de prueba agregaremos una regla a la cadena OUTPUT del host que filtre los pings que realice.

sudo iptables -I OUTPUT -p icmp -j NFQUEUE

Ya podemos probar el sistema…​

$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=16.2 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 16.189/16.189/16.189/0.000 ms

$ ping -c 1 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.

--- 8.8.4.4 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Comprobaremos que ha sido nuestro sistema el que ha rechazado el paquete mirando el log del sistema.

# grep lunfqueue /var/log/syslog
.....
Sep 10 07:51:59 luids-router lunfqueue[1304]: level=info msg="starting nfqueue #0"
Sep 10 07:54:33 luids-router lunfqueue[1304]: level=info msg="ip-processor.checkip: 10.0.2.15->8.8.4.4 8.8.4.4 {Result:true Reason:found in 'my-blacklist' TTL:0}"

Podremos eliminar la regla recién creada con el siguiente comando.

sudo iptables -D OUTPUT -p icmp -j NFQUEUE

Siguientes pasos

En este tutorial hemos visto la construcción de una sencilla integración del cortafuegos netfilter con un servicio de luIDS, pero no hemos entrado a entender el detalle de su configuración. Tampoco hemos visto muchas de las funcionalidades que el software netfilter. Todo eso se verá en los siguientes capítulos.

A continuación: Instalación