Introduzione:
Uso spesso il file system NFS tra i server della stessa rete interna. Ma poiché avere rpcbind aperto a Internet è considerato insicuro, dovevo proteggerlo. Avrei potuto farlo con il firewall, ma poiché l'unico servizio che volevo proteggere dall'accesso a Internet non volevo preoccuparmi del firewall per questo compito e ho deciso di utilizzare invece il buon vecchio sistema TCP Wrapper: host.allow e hosts.deny file.
Metodo:
– Nega l'accesso a rpcbind a tutti (fatto in /etc/hosts.deny )
– Consenti 2 eccezioni:host sulla mia rete locale (fatto in /etc/hosts.allow )
Ipotesi:
Il server NFS è connesso a Internet e alla nostra LAN interna (192.168.100.0/24) e ha l'IP:12.34.56.78 (solo un esempio) e 192.168.100.1.
I 2 host che voglio consentire di connettersi al server NFS sono 192.168.100.2 e 192.168.100.3
Ho un altro server (192.168.100.4) in questa LAN privata a cui non dovrebbe essere consentito connettersi al server NFS.
Passaggi:
Modifica (o crea se non esistente) il file /etc/default/rpcbind e aggiungi la seguente riga:OPTIONS="-w -l -h 192.168.100.1"
Modifica il file /etc/hosts.allow e aggiungi la seguente riga:rpcbind: 192.168.100.2 192.168.100.3
Modifica il file /etc/hosts.deny e aggiungi la seguente riga:rpcbind: ALL
Verifica della configurazione:
Accedi a qualsiasi altro server sulla stessa rete LAN locale (nessuno dei server consentiti sopra) diciamo da 192.168.100.4 ed emetti il seguente comando:rpcinfo -p 192.168.100.1
Risultato: rpcinfo: can't contact portmapper: rpcinfo: RPC: Authentication error; why = Client credential too weak
Quindi accedi a qualsiasi server Internet (ad es. a 45.67.78.89) e prova il comando:rpcinfo -p 12.34.56.78
Risultato: rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
Ora accedi a uno dei 2 server consentiti (es. 192.168.100.3) ed esegui il comando:rpcinfo -p 192.168.100.1
Risultato: rpcinfo -p 192.168.100.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 49123 status
100024 1 tcp 55198 status
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
....... and so on
Good news:
Possiamo vedere che 192.168.100.4 e qualsiasi server Internet non possono connettersi a rpcbind ma è consentito 192.168.100.3.
Informazioni extra:
Solo per divertimento, controlliamo i log:grep rpcbind /var/log/auth.log
Risultato: Oct 7 20:51:30 nfsserver rpcbind: connect from 192.168.100.4 to dump(): request from unauthorized host
Oct 7 20:51:56 nfsserver rpcbind: connect from 45.67.78.89 to dump(): request from unauthorized host
Oct 7 20:53:24 nfsserver rpcbind: connect from 192.168.100.3 to dump()
Ora controlliamo la configurazione dei TCP Wrapper per l'host 192.168.100.2tcpdmatch rpcbind 192.168.100.2
Risultato: client: address 192.168.100.2
server: process rpcbind
access: granted
Risultato:
rpcbind il servizio è ora protetto e accessibile solo dai 2 server collegati alla nostra LAN interna.