10.3. ACL & TLS

10.3.1. Introduzione

I processi/servizi di Sanet (sanetd/poller/entables/ecc.) utilizzano REDIS come:

  • servizio Broker IPC (InterProcess Communication)

  • servizio di caching

Il servizio di Broker viene usato per far comunicare sia servizi locali (sul server centrale di Sanet) sia agenti remoti (sulla porta 6379)

E' possibile configurare Redis per limitare l'accesso al servizio IPC attraverso ACL (username/password).

E' anche possibile rendere la comunicazione sicura usanto TLS.

Quando si usano ACL/TLS bisogna intervenire sul Redis "centrale" e configuare Sanet e agenti remoti per collegarsi.

                                                    |
 SERVER CENTRALE                                    | SERVER REMOTO
                                                    |
             +----------+                           |                                 --- IPC
             |  REDIS   |                           |                                 *** cache
[ACL] >>>>>> | (broker) |                           |
             | (cache ) |                           |
             +----------+                           |
                 ^    ^ :6379                       |
                 *    |                             |
                 *    |                             |
          +------*----+--------+--------------------|------------------------+
          |      *             |                    |                        |
       **********************  |                    |                        |
       *  |                 *  |                    |                        |
       *  |                 *  |                    |                        |
     [ sanetd ]           [ poller ]                |                [ remote poller ]
                                                    |                        *
                                                    |                        *
                                                    |                        v :6379
                                                    |                   +---------+
                                                    |                   |  REDIS  |
                                                    |                   | (cache) |
                                                    |                   +---------+
                                                    |

Note

Gli agenti remoti usano il Redis centrale come IPC, ma un redis "locale" come sistema di cache. Il server redis degli agenti remoti e' locale e non richiede di essere configurato con ACL e/o TLS.

10.3.2. Configurazione BROKER (server centrale)

10.3.2.1. Configurazione ACL utenti

Modificare il file:

/usr/local/redis/user.acl

Definire le ACL per almeno due utenti

  • default

  • sanet

La configurazione piu' semplice per una utenza prevede di:

  • dare accesso a tutti i comandi

  • dare accesso a tutti i dati (chiavi)

  • resettare qualunque password gia' esistente

  • impostare una password

Per ottenere questa configurazione bisogna che il file contenga queste due righe:

user  default  on  allcommands  allkeys  resetpass  >...password...

user  sanet    on  allcommands  allkeys  resetpass  >...password...

Esempio:

user  default  on  allcommands  allkeys  resetpass  >9T58GsKD01
user  sanet    on  allcommands  allkeys  resetpass  >sanet

Warning

Questo esempio usa password in chiaro. Si possono specificare password anche in formato HASH.

Per i dettagli su come specificare le ACL si rimanda alla documentazione ufficiale di REDIS

10.3.2.2. Configurazione accesso SSL

Bisogna intervenire nel file:

/etc/redis/redis.conf

Se si vuole configuarre l'uso di TLS bisogna specificare la seguente configurazione:

# Impedire connessioni non TLS su qualunque porta e riutilizzare la porta 6379 per TLS
port 0
tls-port 6379

# Specificare i certificati/chiavi del server
tls-cert-file /etc/redis/ssl/ssl-cert-snakeoil.pem
tls-key-file  /etc/redis/ssl/ssl-cert-snakeoil.key

# Non e' richiesto il certificato a client
tls-auth-clients no

10.3.3. Configurazione Sanet

10.3.3.1. Configurazione Broker (redis)

La configurazione avviene nel file settings.py di Sanet:

{{SANET_INSTALL_DIR}}/conf/settings.py

Bisogna specifare indirizzo/porta e credenziali di accesso

BROKER_ADDRESS = ('localhost', 6379)
BROKER_AUTH = ( 'sanet', 'sanet')

10.3.3.1.1. Accesso con TLS

BROKER_ADDRESS = ('localhost', 6379)
BROKER_AUTH    = ('sanet', 'sanet')
BROKER_SETTINGS.update({
        "ssl": 1
})

10.3.3.2. Configurazione Cache (redis)

CACHE_HANDLER_PARAMS.update({
        "host"    : "localhost",
        "port"    : 6379
        "username": "sanet",
        "password": "sanet",
})

10.3.3.2.1. Accesso con TLS

CACHE_HANDLER_PARAMS.update({
        "host"    : "localhost",
        "port"    : 6379
        "username": "sanet",
        "password": "sanet",
})

10.3.3.3. Configurazione Entables (redis)

Di default i paremetri di configurazione di entables vengono allineati alla configurazione del broker IPC (settings.BROKER_*).

10.3.3.3.1. Configurazione puntuale

Se si vuole configurare puntualmente la configurazione di entables bisogna intervenire sui seguenti parametri:

ENTABLESD_SETTINGS["broker"].update({
        "address"        : ('127.0.0.1', 3679),
        "username"       : 'sanet',
        "password"       : 'sanet',
        "ssl"            : False
})
ENTABLESD_SETTINGS["listeners"] = [
        ('entables.listeners.qpid', {
                "qpid_queue_name": "entables-alarms",
                "brokerip"       : '127.0.0.1',
                "port"            : 3679,
                "username"       : 'sanet',
                "password"       : 'sanet',
                "ssl"            : True
        })
]

10.3.4. Configurazione Agenti remoti

Bisogna modificare il file di configurazione di ogni singolo agente remoto che deve collegarsi al server centrale.

10.3.4.1. Connessione al server centrale (broker)

server_host     = <hostname o ip del server di Sanet>
server_port     = 6379
server_user     = sanet
server_password = sanet

10.3.4.1.1. Uso di TLS

server_host     = <hostname o ip del server di Sanet>
server_port     = 6379
server_user     = sanet
server_password = sanet
use_ssl         = 1

10.3.4.2. Configurazioni particolari: agenti remoti sul server centrale

Se fosse necessario usare agenti remoti sul server centrale bisogna ricordarsi di configurarli per accedere correttamente al REDIS anche come servizio di cache, intervenendo sul aprametro "cache_config":

cache_config = { "host": "127.0.0.1", "port": 6379, "username": "sanet", "password": "sanet", "ssl": 0 }

Se si vuole usare TLS:

cache_config = { "host": "127.0.0.1", "port": 6379, "username": "sanet", "password": "sanet", "ssl": 1 }