Come funziona il servizio telnet.informaticalibera.net

Il servizio offerto da http://telnet.informaticalibera.net può essere allestito facilmente utilizzando il sistema NLNX, con la dovuta configurazione. In questo capitolo si descrive in che modo è organizzato internamente il servizio http://telnet.informaticalibera.net, proprio per favorirne la «clonazione» in altri contesti.

Elaboratori coinvolti

Per il servizio di http://telnet.informaticalibera.net sono coinvolti due elaboratori, dei quali uno solo è in comunicazione con l'esterno.

Figura u74.1. Due elaboratori servono per la gestione del servizio http://telnet.informaticalibera.net.

servizio telnet.informaticalibera.net

L'elaboratore che a sinistra appare indicato con la lettera «A», è un servente realizzato con NLNX, per vari tipi di servizi, in particolare funziona da firewall e da NAT, separando la rete esterna dalla rete locale. L'elaboratore a destra, indicato con la lettera «B», si trova nella rete locale, come si può vedere dall'indirizzo IPv4, il quale appartiene all'insieme riservato per le reti private. Questo secondo elaboratore è privo di unità di memorizzazione di massa (dischi, memorie solide e simili) e viene avviato dalla rete, attraverso i servizi offerti dall'elaboratore «A».

Il sistema operativo avviato dal secondo elaboratore è sempre NLNX, nella versione in sola lettura avviato dalla rete, come descritto nella sezione u56.

Ridirezione del traffico TCP

L'elaboratore «A» mette in atto tre ridirezioni di traffico TCP, per mettere in contatto l'elaboratore «B» con l'esterno: quando viene richiesta la porta 23 presso l'elaboratore «A» (TELNET), la connessione viene trasferita all'elaboratore «B», presso la stessa porta; quando viene richiesta la porta 2 222 presso l'elaboratore «A», la connessione viene trasferita all'elaboratore «B», presso la porta 22 (SSH); quando viene richiesta la porta 8 080 presso l'elaboratore «A», la connessione viene trasferita all'elaboratore «B», presso la porta 80 (HTTP).

Figura u74.2. Schema della ridirezione del traffico TCP verso l'elaboratore «B».

servizio telnet.informaticalibera.net

Per attuare questa ridirezione, nel file /etc/init.d/nlnx.network dell'elaboratore «A», la variabile di ambiente GENERIC_FILTER riceve la stringa «false», in modo da personalizzarne il funzionamento. In questo caso particolare, si trova il codice seguente:

#!/bin/sh
...
GENERIC_FILTER="false"
...
    elif    [ "$INTERNAL_IPV4" = "$INTERNAL_ROUTER" ]
    then
        echo "[$0] This is the internal router for the local network."
        ...
        #
        # Telnet
        #
        if [ "$GENERIC_FILTER" = "true" ]
        then
            true
        else
            #
            # Telnet is redirected to the «telnet machine» and controlled.
            #
            /sbin/iptables  -t filter -A FORWARD -p tcp --dport 23 -j ACCEPT
            iptables -t nat -A PREROUTING -p tcp -s 0/0   \
                     -d $EXTERNAL_IPV4 --dport 23 -j DNAT \
                     --to-destination 172.21.254.23:23
            #
            # 8080 is redirected to 80 to the «telnet machine».
            #
            /sbin/iptables  -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT
            iptables -t nat -A PREROUTING -p tcp -s 0/0     \
                     -d $EXTERNAL_IPV4 --dport 8080 -j DNAT \
                     --to-destination 172.21.254.23:80
            #
            # SSH
            #
            /sbin/iptables  -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT
            #
            iptables -t nat -A PREROUTING -p tcp -s 0/0     \
                     -d $EXTERNAL_IPV4 --dport 2222 -j DNAT \
                     --to-destination 172.21.254.23:22
        fi
        ...

Avvio dalla rete dell'elaboratore «B»

Come già accennato nel capitolo, l'elaboratore «B» si avvia dalla rete, utilizzando un sistema NLNX. Per questo NLNX prevede che si possa procedere soltanto nell'ambito di una rete locale, condividendo le directory personali e la gestione delle utenze dall'elaboratore che offre già il servizio di avvio del sistema. Pertanto, l'elaboratore «A» deve offrire tutto ciò che serve al funzionamento dell'elaboratore «B», ma deve essere in grado di distinguere tra le utenze privilegiate, le quali possono accedere direttamente all'elaboratore «A», dalla rete locale o dall'esterno tramite SSH, rispetto alle utenze di tutori e pupilli, le quali possono accedere attraverso TELNET, per essere però ridirette all'elaboratore «B».

In questa fase si vuole considerare solo la configurazione del DHCP e del servizio PXE, per l'avvio dalla rete, fornendo i parametri di avvio del kernel necessari alla configurazione corretta dell'elaboratore «B».

Prima di tutto, è necessario che il servizio DHCP offerto dall'elaboratore «A» associ univocamente l'interfaccia di rete dell'elaboratore «B» all'indirizzo IPv4 stabilito, ovvero 172.21.254.23. Pertanto, con il comando nlnxrc dhcp_server config è stato annotato un abbinamento simile a quello successivo:

172.21.254.23  00:30:1B:AB:FB:39

Nel file /etc/dhcp3/dhcpd.conf ciò si traduce nella direttiva seguente:

  host 172.21.254.23 { hardware ethernet 00:30:1B:AB:FB:39;
                       fixed-address 172.21.254.23; }

Quindi si passa alla definizione del file /var/lib/tftpboot/pxelinux/pxelinux.cfg/AC15FE17. il nome AC15FE17 rappresenta in esadecimale l'indirizzo IPv4 172.21.254.23, pertanto questo file diventa la configurazione personalizzata dell'elaboratore con tale indirizzo:

DISPLAY pxelinux.msg
TIMEOUT 100
PROMPT 1
DEFAULT telnet

label telnet
  kernel vmlinuz
  append n_boot=net root=/dev/ram0 ro init=/linuxrc \
  \initrd=nlnxrd.img ramdisk_size=30720 n_no_way_out=1 \
  \n_xorg_conf=0 n_reboot=05:30+13:30 n_max_pages=30 \
  \n_lpr_directory=/home/guestrooms/print

Si possono vedere delle opzioni di avvio insolite, specifiche di NLNX, il cui significato viene descritto nell'elenco seguente:

Dati personali delle utenze privilegiate

Il servizio in questione serve a offrire a un gran numero di persone, anche minorenni, accesso a un elaboratore. Una cosa che si deve cercare di evitare è di permettere l'accesso, anche erroneamente, ai dati personali di utenti che utilizzano i servizi dell'elaboratore «A» al di fuori del conteso didattico di studio che riguarda invece gli utenti tutori e pupilli. Per cercare di ovviare a questo problema, le utenze di tutori e pupilli hanno una directory personale che discende dal percorso /home/guestrooms/, mentre le utenze si trovano in percorsi diversi, anche se discendenti da /home/.

L'elaboratore «A», oltre alla gestione delle utenze, gestisce la condivisione delle directory personali che si articolano tutte da /home/. Nel file /etc/exports dell'elaboratore «A» si fa in modo che l'elaboratore «B» possa innestare solo il percorso /home/guestrooms/, rimanendo così all'oscuro di tutto il resto del contenuto della directory /home/:

/home/guestrooms 172.21.0.0/16(async,rw,root_squash,nohide,no_subtree_check)
/home            172.21.11.0/24(async,rw,root_squash,nohide,no_subtree_check)
/opt/nlnx        172.21.0.0/16(ro,no_root_squash,sync,nohide,subtree_check)

Come si vede dalla porzione mostrata del file /etc/exports, tutti gli elaboratori con indirizzi del tipo 172.21.*.*, possono innestare la directory /home/guestrooms/, mentre la directory /home/ può essere innestata direttamente solo da una parte che ha indirizzi del tipo 172.21.*.*.

In pratica, il sistema NLNX avviato dalla rete, prima tenta di innestare la directory /home/, poi, non riuscendoci, prova con /home/guestrooms/.

Servizi via HTTP presso l'elaboratore «A»

Presso l'elaboratore «A» si accede attraverso il protocollo HTTP, per la gestione delle utenze e per funzioni simili. Per questo scopo sono previsti alcuni script e programmi nella distribuzione di NLNX, collocati nella directory /etc/script.cgi/, ma il servente HTTP (Mathopd) va configurato di conseguenza. L'estratto seguente del file di configurazione /etc/mathopd.conf mostra le porzioni significative al riguardo:

...
Server {
    Port 80
    Address 0.0.0.0
    ...
    Virtual {
        Host telnet.informaticalibera.net
        #
        Control {
            Alias /nlnxrc
            Location /etc/script.cgi/nlnxrc.cgi
            Realm nlnxrc.cgi
            UserFile /etc/nlnx/CGI_PASSWD
            Specials {
                CGI { nlnxrc.cgi }
            }
        }
        Control {
            Alias /home_guestrooms_log
            Location /etc/script.cgi/home_guestrooms_log
            Specials {
                CGI { home_guestrooms_log }
            }
        }
        Control {
            Alias /tutors_and_pupils
            Location /etc/script.cgi/tutors_and_pupils.cgi
            Specials {
                CGI { tutors_and_pupils.cgi }
            }
        }
        Control {
            Alias /print
            Location /home/guestrooms/print
            AutoIndexCommand /etc/script/index.cgi
            Specials {
                CGI { index.cgi }
            }
        }
        Control {
            Alias /home/guestrooms/print
            Location /home/guestrooms/print
            AutoIndexCommand /etc/script/index.cgi
            Specials {
                CGI { index.cgi }
            }
        }
    }
}

Il programma nlnxrc.cgi acquisisce i privilegi dell'utente root (è configurato come SUID-root) e quindi avvia lo script nlnxrc.su.cgi. Questo script è responsabile della gestione delle utenze e ci si avvale del file /etc/nlnx/CGI_PASSWD per riconoscere gli utenti tutori.

Lo script home_guestrooms_log non richiede privilegi particolari e si occupa di visualizzare il contenuto della directory /home/guestrooms/log/, assieme ai suoi file.

Il programma tutors_and_pupils.cgi acquisisce i privilegi dell'utente root per avviare lo script tutors_and_pupils.su.cgi, il quale produce l'elenco dei tutori e dei pupilli, assieme a tutti i riferimenti ai documenti pubblicati dagli utenti rispettivi. Lo script richiede i privilegi dell'utenza amministrativa, per poter leggere alcuni file contenuti nelle directory personali degli utenti.

Riferimenti

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net