Configuración del sistema de listas

En esta sección realizaremos el despliegue de nuestro sistema de listas. Para ello instalaremos el software necesario, configuraremos los orígenes de forma que se actualicen automáticamente y definiremos la relación entre dichos orígenes junto a la lógica a nuestro servicio.

Recuerde que tiene a su disposición todos los ficheros de configuración de esta guía en https://github.com/luids-io/docs/blob/master/es/modules/guide-basic-dns-rblzone/examples/.
Este proceso está probado únicamente en un sistema Ubuntu 20.04LTS server. Los binarios están compilados estáticamente y las rutas empleadas son las de una distribución estándar, por lo que el instalador debería funcionar en cualquier distribución.

Instalación del paquete xlist

Instalar xlist es muy sencillo, basta descargar el instalador ya existente y ejecutarlo. Para ello puede dirigirse a https://github.com/luids-io/xlist/releases y descargar la última versión del instalador (fichero installer_linux.sh). También puede simplemente copiar y pegar lo siguiente en una consola de comandos.

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
Si está instalando el software en una arquitectura diferente a la amd64 (como en el caso de una Raspberry) deberá definirla en una variable de entorno al lanzar el instalador. Ejemplo: sudo ARCH=arm64 ./installer.sh. Las arquitecturas disponibles son: amd64, arm, arm64, mips, mips64, mips64le, ppc64 y s390x.

Descarga de la base de datos xlist

Para descargar la base de datos xlist, bastará ejecutar el comando xlist_database como administrador. El script descargará o actualizará dicha base de datos en el directorio /usr/local/share/xlist-database.

$ sudo xlist_database
Clonando en '/usr/local/share/xlist-database'...
remote: Enumerating objects: 973, done.
remote: Counting objects: 100% (973/973), done.
remote: Compressing objects: 100% (244/244), done.
remote: Total 973 (delta 850), reused 851 (delta 728), pack-reused 0
Recibiendo objetos: 100% (973/973), 161.50 KiB | 879.00 KiB/s, listo.
Resolviendo deltas: 100% (850/850), listo.
La base de datos se va actualizando con nuevas fuentes y va corrigiendo posibles cambios que se produzcan en las ya existentes: cambios de url, formato e incluso si la fuente deja de existir. Por ello, es más que recomendable que actualicemos regularmente la base de datos con el comando xlist_database.

Si lo preferimos, podemos hacer que se actualice diariamente de forma automática. Para ello, basta con que habilitemos el timer que crea el instalador para esta tarea.

sudo systemctl enable --now luids-xlist-updatedb.timer
Para que la actualización automática funcione es necesario que hayamos ejecutado el comando xlist_database previamente.

Configuración de xlistd

La configuración de xlistd se divide en dos partes:

  • Definición del servicio.

  • Parámetros de configuración del servidor.

La definición del servicio la realizaremos utilizando múltiples ficheros para que se entienda mejor. Pero antes, deberemos "importar" los servicios remotos que vamos a utilizar usando para ello enlaces simbólicos. Para hacerlo, bastará ejecutar como administrador los siguientes comandos.

mkdir -p /etc/luids/xlist/services.d/dnsxl
cd /etc/luids/xlist/services.d/dnsxl
DBDIR=/usr/local/share/xlist-database
ln -s $DBDIR/services/dnsxl/barracudacentral-org.json .
ln -s $DBDIR/services/dnsxl/gbudb-net.json .
ln -s $DBDIR/services/dnsxl/junkemailfilter-com-black.json .
ln -s $DBDIR/services/dnsxl/mailspike-net-bl.json .
ln -s $DBDIR/services/dnsxl/mcafee-com.json .
ln -s $DBDIR/services/dnsxl/sorbs-net-dul.json .
ln -s $DBDIR/services/dnsxl/sorbs-net-recent.json .
ln -s $DBDIR/services/dnsxl/sorbs-net-new.json .
ln -s $DBDIR/services/dnsxl/spamcop-net.json .
ln -s $DBDIR/services/dnsxl/spamhaus-org-zen.json .
ln -s $DBDIR/services/dnsxl/surriel-com-psbl.json .

Crearemos los siguientes archivos.

Contenido de /etc/luids/xlist/services.d/remote.json
[
  {
    "id": "remote-blacklists",
    "class": "parallel",
    "resources": [ "ip4" ],
    "contains": [
      {
        "id": "barracudacentral.org",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
     {
       "id": "any-sorbs",
       "class": "parallel",
       "resources": [ "ip4" ],
       "opts": {
         "first": true,
         "skiperrors": true
       },
       "contains": [
         { "id": "sorbs.net-dul"    },
         { "id": "sorbs.net-recent" },
         { "id": "sorbs.net-new"    }
       ],
       "wrappers": [
         { "class": "score", "opts": { "value": 10 } }
       ]
      },
      {
        "id": "spamcop.net",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
      {
        "id": "spamhaus.org-zen",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
      {
        "id": "gbudb.net",
        "wrappers": [
          { "class": "score", "opts": { "value": 30 } }
        ]
      },
      {
        "id": "junkemailfilter.com-black",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
      {
        "id": "mailspike.net-bl",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
      {
        "id": "mcafee.com",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      },
      {
        "id": "surriel.com-psbl",
        "wrappers": [
          { "class": "score", "opts": { "value": 10 } }
        ]
      }
    ],
    "wrappers": [
      { "class": "response", "opts": { "clean": true, "threshold": 20 } }
    ]
  }
]
Contenido de /etc/luids/xlist/services.d/custom-local.json
[
  {
    "id": "my-blacklist",
    "class": "file",
    "name": "My custom blacklist",
    "resources": [ "ip4" ],
    "source": "local/blacklist.xlist",
    "opts": {
      "autoreload": true,
      "reloadseconds": 5,
      "reason": "found in 'my-blacklist'"
    }
  },
  {
    "id": "my-whitelist",
    "class": "file",
    "name": "My custom whitelist",
    "resources": [ "ip4" ],
    "source": "local/whitelist.xlist",
    "opts": {
      "autoreload": true,
      "reloadseconds": 5,
      "reason": "found in 'my-whitelist'"
    }
  }
]
Contenido de /etc/luids/xlist/service.json
[
  {
    "id": "root",
    "class": "wbefore",
    "resources": [ "ip4" ],
    "contains": [
      {
        "id": "my-whitelist"
      },
      {
        "id": "blacklist",
        "class": "sequence",
        "resources": [ "ip4" ],
        "opts": { "first": true },
        "contains": [
          {
            "id": "my-blacklist"
	  },
          {
            "id": "remote-blacklists",
            "wrappers": [
              { "class": "cache", "opts": { "ttl": 300, "negativettl": 60 } }
            ]
          }
        ]
      }
    ],
    "wrappers": [
      { "class": "logger" }
    ]
  }
]

Ahora creamos el fichero de configuración del servidor.

Contenido de /etc/luids/xlist/xlistd.toml
[xlistd]
datadir = "/var/lib/luids/xlist"

[xlistd.service]
dirs  = [ "/etc/luids/xlist/services.d/dnsxl",
            "/etc/luids/xlist/services.d" ]
files = [ "/etc/luids/xlist/service.json" ]

[xlistd.plugin.dnsxl]
timeout = 4000

Comprobaremos que la configuración es correcta, como se muestra a continuación.

# xlistd --config /etc/luids/xlist/xlistd.toml --dry-run
INFO[0000] xlistd (version: 341fe0e build: 2020-08-17T07:25:30+0200)
configuration seems ok

Inicializaremos y habilitaremos el servicio xlistd.

Inicializa servicio xlistd y habilita al inicio
sudo systemctl start luids-xlistd
sudo systemctl enable luids-xlistd

Podremos probar el correcto funcionamiento del servidor utilizando el comando xlistc para hacerle consultas.

$ xlistc
[ip4] (609.687µs)
$ xlistc 8.8.8.8
ip4,8.8.8.8: false,"",0 (1.429557ms)

Publicación del servicio de listas

Para que el resto de componentes del ecosistema luIDS puedan utilizar nuestro servicio de listas, debemos "publicarlo" en el registro de servicios de la API. Esto lo haremos editando el fichero /etc/luids/apiservices.json

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