UCI (Unified Configuration Interface)#

UCI (Unified Configuration Interface) è un sistema centralizzato di gestione della configurazione utilizzato in NethSecurity. Fornisce un approccio unificato alla configurazione del sistema tramite un’interfaccia a riga di comando e file di configurazione standardizzati.

Caratteristiche principali#

  • Configurazione centralizzata: Tutte le configurazioni di sistema sono memorizzate in un’unica posizione (/etc/config/)

  • Basato su database: Le configurazioni sono memorizzate in file di database strutturati

  • Nessuna validazione integrata: UCI esegue i comandi senza controlli di sicurezza - è richiesta conoscenza del sistema

  • Flusso di lavoro in tre fasi: Modifica → Commit → Riavvia/Ricarica

  • Supporto per eventi multipli: Le interfacce utente possono attivare più eventi di configurazione simultaneamente

Archiviazione della configurazione#

Tutte le configurazioni UCI sono memorizzate come file di database in /etc/config/. Ogni file rappresenta un diverso componente o servizio di sistema; di seguito è fornito un elenco esemplificativo non esaustivo.

Struttura dei file di configurazione#

/etc/config/
├── acme          # SSL certificate management
├── adblock       # Advertisement blocking
├── banip         # IP banning service
├── chilli        # Captive portal
├── dedalo        # Network access control
├── dhcp          # DHCP server configuration
├── dpi           # Deep packet inspection
├── dropbear      # SSH server
├── firewall      # Firewall rules and zones
├── flashstart    # Web filtering
├── fstab         # Filesystem table
├── ipsec         # IPsec VPN
├── luci          # luci Web interface
├── mwan3         # Multi-WAN configuration
├── network       # Network interfaces and routing
├── nginx         # Web server
├── ns-ui         # NethSecurity user interface
├── objects       # Object definitions
├── openssl       # SSL/TLS configuration
├── openvpn       # OpenVPN configuration
├── qosify        # Quality of Service
├── rpcd          # RPC daemon
├── rsyslog       # System logging
├── socat         # Socket utilities
├── system        # System-wide settings
├── templates     # Configuration templates
├── ucitrack      # UCI change tracking
├── uhttpd        # HTTP server
└── users         # User management

Visualizzazione della configurazione#

Mostra tutta la configurazione per un servizio specifico#

uci show <service>

Esempio:

uci show network

Output:

network.loopback=interface
network.loopback.device='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.@device[0]=device
network.@device[0].name='br-lan'
network.@device[0].type='bridge'
network.@device[0].ports='eth0'
network.lan=interface
network.lan.device='br-lan'
network.lan.proto='static'
network.lan.ipaddr='192.168.100.101'
network.lan.netmask='255.255.255.0'
network.wan=interface
network.wan.device='eth1'
network.wan.proto='dhcp'

Mostra opzione di configurazione specifica#

uci show <service>.<section>.<option>

Esempio:

uci show network.lan.ipaddr

Flusso di lavoro completo di configurazione#

Processo standard in tre fasi#

  1. MODIFICA - Apportare modifiche alla configurazione

  2. COMMIT - Salva le modifiche nel database di configurazione

  3. RELOAD - Applica le modifiche al sistema in esecuzione

Esempio pratico: modifica dell’indirizzo IP LAN#

# Step 1: Modify the configuration
uci set network.lan.ipaddr='192.168.100.151'

# Step 2: Commit the changes
uci commit network

# Step 3: Restart the network service
/etc/init.d/network restart

SET - Modifica della configurazione#

Il comando uci set viene utilizzato per modificare i valori di configurazione. Le modifiche vengono memorizzate temporaneamente e devono essere confermate per diventare permanenti.

Impostare un valore di configurazione#

uci set <service>.<section>.<option>='<value>'

Esempi:

# Change IP address
uci set network.lan.ipaddr='192.168.100.151'

# Change netmask
uci set network.lan.netmask='255.255.255.0'

# Change DHCP protocol to static
uci set network.wan.proto='static'

Aggiungere una nuova sezione#

uci add <service> <section_type>

Operazioni di eliminazione#

# Delete a configuration option
uci delete <service>.<section>.<option>

# Delete an entire section
uci delete <service>.<section>

LISTS - Editing List Options#

Lists are a special type of option that can contain multiple values.

Add a value to a list#

Use the uci add_list command to add values to a list, the command creates the list if it does not already exist.

uci add_list <service>.<section>.<list_option>='<value>'

Remove a value from a list#

To remove the last value from a list, use the uci del_list, you must specify the value to be removed.

uci del_list <service>.<section>.<list_option>='<value>'

To remove all values from a list, use the uci delete command as explained in the previous section.

COMMIT - Salvataggio delle modifiche#

Le modifiche apportate con uci set non vengono applicate immediatamente al sistema. Devono essere prima confermate per renderle persistenti.

Servizio specifico del commit#

uci commit <service>

Esempio:

uci commit network

Confermare tutte le modifiche in sospeso#

uci commit

Controllare le modifiche in sospeso#

Prima di eseguire il commit, è possibile esaminare quali modifiche verranno applicate:

uci changes

Annullare le modifiche non confermate#

Se si desidera scartare le modifiche non confermate:

uci revert <service>

RELOAD - Applicazione delle modifiche#

Dopo aver effettuato il commit, è possibile applicare la nuova configurazione al sistema in esecuzione con un unico comando. Questo ricaricherà automaticamente i servizi interessati senza la necessità di riavviarli manualmente uno per uno.

Ricarica configurazione#

reload_config

Formato del file di configurazione#

I file di configurazione UCI utilizzano un formato strutturato con sezioni e opzioni:

config <section_type> '<section_name>'
    option <option_name> '<value>'
    list <list_name> '<value1>'
    list <list_name> '<value2>'

Esempio: File di configurazione di rete#

File di configurazione di rete (/etc/config/network):

config interface 'loopback'
    option device 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config device
    option name 'br-lan'
    option type 'bridge'
    list ports 'eth0'

config interface 'lan'
    option device 'br-lan'
    option proto 'static'
    option ipaddr '192.168.100.101'
    option netmask '255.255.255.0'

config interface 'wan'
    option device 'eth1'
    option proto 'dhcp'

Migliori pratiche#

Considerazioni sulla sicurezza#

  1. Eseguire sempre il backup delle configurazioni prima di apportare modifiche

  2. Testare le modifiche in modo incrementale invece di apportare più modifiche contemporaneamente

  3. Comprendere le dipendenze dei servizi prima di riavviare i servizi

  4. Utilizzare uci changes per esaminare le modifiche in sospeso

  5. Avere accesso alla console disponibile durante la modifica delle impostazioni di rete

Problemi comuni#

  • Dimenticare di eseguire il commit: le modifiche non sono persistenti fino a quando non viene effettuato il commit

  • Nessun riavvio dei servizi: le modifiche confermate potrebbero non essere attive fino al riavvio del servizio

  • Interruzione della connettività di rete: Assicurarsi sempre di disporre di metodi di accesso alternativi

  • Errori di sintassi: Una sintassi UCI non valida può causare la corruzione della configurazione

Risoluzione dei problemi#

Comandi comuni per il debug#

Visualizza modifiche in sospeso#

uci changes

Ripristina allo stato dell’ultimo commit#

uci revert <service>

Controllare la sintassi UCI#

uci show | head -1

Nota

Assicurarsi sempre di disporre di un accesso alternativo al sistema quando si apportano modifiche critiche alla configurazione, in particolare per quanto riguarda le modifiche relative alla rete.

Avvertimento

I comandi UCI vengono eseguiti senza validazione. Configurazioni errate possono rendere il sistema inaccessibile.