Linux Tutorial – Puntata 30
di jolek78
Care/i fruitrici e fruitori del blog, in questi post – ogni domenica mattina – si parlerà del sistema operativo GNU/Linux e degli strumenti per utilizzarlo al massimo delle potenzialità. Cercheremo di spiegare come funziona, cosa è il kernel, come costruirsi una vpn, come settare un firewall e giocare col terminale, usare adb e altro. Se il capitalismo della sorveglianza ci vuole passivi consumatori-consumatrici di servizi noi si risponde con un po’ di “cultura informatica” e un MARAMEO (quasi affettuoso). Buona lettura!
Devo dire che questa settimana non ho avuto molto tempo a disposizione, ma nonostante tutto, di tanto in tanto, riguardavo a che punto siamo arrivati col tutorial. Questa è soltanto la puntata 30 e obiettivamente mi sembra di non aver parlato di nulla d’importante ancora. Una delle cose che proprio vanno trattate è l’utilizzo del firewall su Linux. L’abbiamo usato varie volte nelle scorse puntate, in particolare quando abbiamo settato le connessioni, e quando abbiamo modificato la porta di default per ssh. Un firewall è molto banalmente una sorta di dogana che controlla gli ingressi e le uscite da una macchina all’altra. Semplice e noioso nel concetto, più interessante nella sua esecuzione. Quando si parla di firewall in informatica normalmente si intende roba fisica, macchine, hardware, che al loro interno hanno dei settaggi tali da poter controllare tutto, magari dividendo il network in più settori, con diverse regole per ogni vlan. Cisco, giusto per citarne una, è l’azienda leader per la produzione di questo genere di dispositivi. Ma ogni dispositivo ha la possibilità di avere un firewall, o detto in italiano “muro di fuoco”, che impone l’alt a chi o cosa non ha il permesso di entrare o uscire.
Iptables – Nftables – Ufw
Su Linux il firewall più popolare è iptables e, nel tempo, sarà completamente sostituito da un altro chiamato nftables. La scelta dunque è ardua: parlare di iptables che è ancora il firewall “de facto” per Linux, ma che verrà completamente dismesso nei prossimi anni, o di nftables che è il presente/futuro dei firewall su Linux? Ho preso una tazza di caffè, il mio ukulele, ed ho pensato “qual’e’ il firewall di default installato sulla distribuzione che stiamo utilizzando per il tutorial?” La risposta è stata semplice: iptables. La sua interfaccia di controllo sulla nostra Ubuntu LTS si chiama UFW, ovvero “uncomplicated firewall”. E allora cosa c’e’ di meglio di una cosa “uncomplicated” per partire a settare le porte e il traffico su Linux per un tutorial? Parleremo di nftables il prossimo anno, quando passeremo alla nuova LTS, nftables verrà introdotto finalmente come firewall di default e magari, chissà, UFW sarà modificato per gestire non più le regole di iptables ma quelle di nftables. Accedete la vostra macchina virtuale dunque: si ricomincia.
Netfilter
Il manuale prima di tutto:
bottega@bottegadelbarbieri ~ man ufw |head -n 20 UFW:(8) February 2016 UFW:(8) NAME ufw - program for managing a netfilter firewall DESCRIPTION This program is for managing a Linux firewall and aims to provide an easy to use interface for the user.
Dunque, netfilter e’ un framework all’interno del kernel Linux che permette letteralmente il filtraggio dei pacchetti da un punto A ad un punto B. Davvero, fatevi un giro sul loro sito perché c’e’ tanto da imparare. UFW è invece un tentativo, ben riuscito a dir la verità, di rendere semplice qualcosa che è strutturalmente molto complesso. Vediamo prima di tutto quali sono sono le regole gia’ attivate
ufw status
Verifichiamo ora lo stato di ufw:
bottega@bottegadelbarbieri ~ sudo ufw status verbose Status: active Logging: on (low) Default: allow (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2121/tcp ALLOW IN Anywhere
Come possiamo vedere, l’unica regola che abbiamo aggiunto a quelle di default è quella della porta 2121 per ssh. Ma quali sono le regole di default?
rules
– allow (incoming),
– allow (outgoing),
– disabled (routed)
il che banalmente vuol dire che la macchina virtuale della bottega può accettare tutte le connessioni in ingresso e in uscita. Ma
– 2121/tcp ALLOW IN Anywhere
per quanto riguarda le connessioni ssh, che abbiamo settato nel nostro config_file giusto due settimane fa, accetta connessioni sulla porta 2121. Semplice.
webmin – test
Ora pero’ facciamo una cosa, e come esperimento proviamo a giocare sulla porta 10000. Proviamo a installare un pacchetto interessante, webmin, che permette di gestire molte operazioni di sistema da una semplice pagina web.
bottega@bottegadelbarbieri ~ sudo apt install software-properties-common apt-transport-https wget Reading package lists... Done Building dependency tree Reading state information... Done wget is already the newest version (1.20.3-1ubuntu1). software-properties-common is already the newest version (0.98.9.5). software-properties-common set to manually installed. The following NEW packages will be installed apt-transport-https [...] bottega@bottegadelbarbieri ~ wget -q -O- http://www.webmin.com/jcameron-key.asc | sudo apt-key add ; sudo add-apt-repository "deb [arch=amd64] http://download.webmin.com/download/repository sarge contrib" [...] bottega@bottegadelbarbieri ~ sudo apt install webmin Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libauthen-pam-perl libio-pty-perl The following NEW packages will be installed libauthen-pam-perl libio-pty-perl webmin [...] Unpacking webmin (1.981) ... Setting up libio-pty-perl (1:1.12-1) ... Setting up libauthen-pam-perl (0.16-3build7) ... Setting up webmin (1.981) ... Webmin install complete. You can now login to https://bottegadelbarbieri:10000/
Verifichiamo prima di tutto l’ip della macchina virtuale
bottega@bottegadelbarbieri ~ ip a s enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:aa:f0:a5 brd ff:ff:ff:ff:ff:ff inet 192.168.0.27/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3 valid_lft 82410sec preferred_lft 82410sec inet6 fe80::b1b3:b800:e909:56e5/64 scope link noprefixroute valid_lft forever preferred_lft forever
e apriamo il nostro browser all’indirizzo: http://192.168.0.27:10000/
Perfetto, funziona tutto. Bella la bottega vista cosi’ vero?
ufw deny
Ora proviamo a bloccare le connessioni sulla porta 10000
bottega@bottegadelbarbieri ~ sudo ufw deny 10000 Rule added
e poi ricontrolliamo che le rules siano state effettivamente cambiate:
bottega@bottegadelbarbieri ~ sudo ufw status verbose Status: active Logging: on (low) Default: allow (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2121/tcp ALLOW IN Anywhere 10000 DENY IN Anywhere <<<<<<<<
et voilà, connessione bloccata. Semplice.
status numbered
Ora elenchiamo le regole in maniera numerata. Il perché di questa scelta ci sarà evidente fra un attimo:
bottega@bottegadelbarbieri ~ sudo ufw status numbered [sudo] password for bottega: Status: active To Action From -- ------ ---- [ 1] 2121/tcp ALLOW IN Anywhere [ 2] 10000 DENY IN Anywhere
ufw delete
Ora rimuoviamo la regola numero 2, ovvero quella che blocca le connessioni in ingresso sulla porta 10000:
bottega@bottegadelbarbieri ~ sudo ufw delete 2 Deleting: deny 10000 Proceed with operation (y|n)? y Rule deleted
bottega@bottegadelbarbieri ~ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] 2121/tcp ALLOW IN Anywhere
proviamo a riconnetterci
et voilà, connessione attiva.
ufw allow
Ora pero’ una buona idea sarebbe quella di dichiarare, all’interno delle regole, che la porta 10000 sia sempre aperta per connessioni in ingresso.
bottega@bottegadelbarbieri ~ sudo ufw allow 10000 Rule added bottega@bottegadelbarbieri ~ sudo ufw status verbose Status: active Logging: on (low) Default: allow (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2121/tcp ALLOW IN Anywhere 10000 ALLOW IN Anywhere
e infatti, giusto per capire meglio anche il funzionamento di questo tool, possiamo vedere che anche all’interno di webmin la regola viene dichiarata ed esplicitata:
ufw allow from
Ora facciamo in modo che la connessione a bottega sia attivata solo per la mia subnet, cioè la rete interna all’interno della quale ho deciso d’installare la macchina virtuale della bottega:
bottega@bottegadelbarbieri ~ sudo ufw allow from 192.168.0.0/24 Rule added bottega@bottegadelbarbieri ~ sudo ufw status verbose Status: active Logging: on (low) Default: allow (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2121/tcp ALLOW IN Anywhere 10000 ALLOW IN Anywhere Anywhere ALLOW IN 192.168.0.0/24 <<<<<<<<<<<<<<<<<
perché sapete, la sicurezza non è mai abbastanza.
ufw deny from
E poi facciamo in modo, per esempio, che le connessioni sulla porta 10000 vengano bloccate per l’ip del mio cellulare, che come avreste dovuto capire dal luuungo tutorial per i 30 anni di Linux, è un Nexus5 che monta una Ubuntu Touch:
phablet@ubuntu-phablet:~$ ip a wlan0 Command "wlan0" is unknown, try "ip address help". phablet@ubuntu-phablet:~$ ip a s wlan0 21: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 8c:3a:e3:72:38:09 brd ff:ff:ff:ff:ff:ff inet 192.168.0.26/24 brd 192.168.0.255 scope global wlan0 inet6 fe80::8e3a:e3ff:fe72:3809/64 scope link valid_lft forever preferred_lft forever
Quindi:
bottega@bottegadelbarbieri ~ sudo ufw deny from 192.168.0.26 to any port 10000 Rule added bottega@bottegadelbarbieri ~ sudo ufw status verbose Status: active Logging: on (low) Default: allow (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2121/tcp ALLOW IN Anywhere 10000 ALLOW IN Anywhere Anywhere ALLOW IN 192.168.0.0/24 10000 DENY IN 192.168.0.26 <<<<<<<<<<<<<<<<<<<
Piccolo test:
Connessione bloccata come da programma.
as a service
Trattiamo ora ufw come un servizio gestito da systemd. In questo modo creeremo un link simbolico e ci assicureremo che il servizio parta all’avvio della nostra macchina virtuale, senza bisogno di preoccuparsene più in seguito. Disabilitiamo ufw:
bottega@bottegadelbarbieri ~ sudo ufw disable Firewall stopped and disabled on system startup
Ed ora abilitiamolo da systemd:
bottega@bottegadelbarbieri ~ sudo systemctl enable ufw Synchronizing state of ufw.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable ufw bottega@bottegadelbarbieri ~ sudo systemctl start ufw bottega@bottegadelbarbieri ~ sudo systemctl status ufw ● ufw.service - Uncomplicated firewall Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled) Active: active since Sat 2021-10-16 10:38:53 BST; 7s ago Docs: man:ufw(8) Process: 48560 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=0/SUCCESS) Main PID: 48560 (code=exited, status=0/SUCCESS) Oct 16 10:38:53 bottegadelbarbieri systemd[1]: Starting Uncomplicated firewall... Oct 16 10:38:53 bottegadelbarbieri systemd[1]: Finished Uncomplicated firewall.
Di cose da dire ancora ce ne sarebbero tante, e due test in croce come questi servono soltanto a darvi il gusto delle innumerevoli configurazioni possibili. Ergo: a me lo sforzo d’invogliarvi, a voi il piacere d’interessarvi. A proposito: c’e’ una sorpresa in ballo. Aspettate qualche settimana e vedrete…
Alla prossima settimana!
jolek78
>> | Indice | << |
Puntata 29 | < > | Puntata 31 |
Il logo “Tux Linux” e’ stato realizzato e distribuito dall’artista deiby-ybied su Deviantart in licenza Creative Commons BY-NC-SA 3.0