Come modificare e forzare le impostazioni del DNS su Linux

E per Linux intendo che nelle ultime versioni di Ubuntu, Debian, Raspbian funzionano a grandi linee allo stesso modo.

Se siete disperati e non riuscite a far funzionare il processo di DHCP (e quindi configurate la rete ancora alla vecchia maniera) o comunque non avete i parametri del DNS configurati come si deve, perché appunto vi appaiono dei messaggi tipo:

connect: Network is unreachable

Oppure:

Name or service not known

L’unica è cambiare il parametro che viene autogenerato dal servizio network:

sudo nano /etc/resolv.conf

Dovreste avere un file con qualcosa del genere:

# Generated by resolvconf
nameserver 127.0.0.1

Cambiatelo con l’IP che preferite e provate a pingare ad esempio

google.it

e vedere se vi restituisce l’IP corretto.
Nel caso non funzionasse, riavviate l’interfaccia (cos’è un interfaccia?) con:

sudo ifdown eth0
sudo ifup eth0

Se invece non dovesse ancora funzionarvi, provate a controllare il file:

sudo nano /etc/network/interfaces

Abbia qualcosa di questo genere, con tutti i parametri corretti:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.1
gateway 192.168.1.1

Alla prossima!

Come cancellare una regola dall’Iptables

Ovviamente non poteva mancare: dopo aver visto come aggiungere delle regole al firewall Iptables e dopo aver visto come visualizzarle in elenco… beh mancava solo più questo!

Se avete l’elenco in vista, quindi ad esempio se avete:

1    DROP       udp  --  anywhere             anywhere             udp dpt:domain
2    DROP       tcp  --  anywhere             anywhere             tcp dpt:domain

E volete cancellare la prima regola, vi basterà eseguire:

sudo iptables -D INPUT 1

Per eliminarla dall’elenco delle regole. Se utilizzate iptables-persistent per salvare permanentemente tutte le rules, vi basterà eseguire:

sudo su
iptables-save > /etc/iptables/rules.v4

Per salvarle al prossimo riavvio!

Come visualizzare l’elenco dell’Iptables

Se avete impostato delle regole nel vostro firewall, come fate a capire quali sono attive e quali no?

Beh di solito bisogna leggere la documentazione, però si sa, siamo tutti un po’ pigri… vediamo subito qual è il comando da eseguire:

sudo iptables -L --line-numbers

E dovrebbe visualizzarvi qualcosa del tipo:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       udp  --  anywhere             anywhere             udp dpt:domain
2    DROP       tcp  --  anywhere             anywhere             tcp dpt:domain

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Come salvare permanentemente l’Iptables

Abbiamo visto che l’Iptables è il firewall di Linux e che funziona molto bene, si gestisce facilmente da linea di comando… ma ora andiamo diretti alle regole (se vuoi sapere come impostarle, leggi questo).

Prima di tutto installate questo pacchetto:

sudo apt install iptables-persistent

Poi spostatevi sull’account amministratore con sudo su ed eseguite:

iptables-save > /etc/iptables/rules.v4

Per salvare l’attuale configurazione. Mentre per ripristinarlo (nel caso abbiate apportato delle modifiche) con:

iptables-restore < /etc/iptables/rules.v4

Ora provate a riavviare e vedete se è ancora tutto uguale!

Come impostare il DNS e nel caso forzarlo

Alzi la mano chi ha avuto problemi ad impostare i DNS sul proprio computer/server Linux. Ci sono almeno 3-4 impostazioni intercambiabili e dipendenti tra loro (il DHCP può darvi un’IP ma voi ne volete un altro).

Nel caso questa mini-descrizione faccia per voi, ecco come forzarli nel file di configurazione delle interfacce:

sudo nano /etc/network/interfaces

E incollate al fondo gli IP del vostro DNS preferito:

dns-nameservers 8.8.8.8 8.8.4.4

Ora riavviate con un sudo reboot now e dovrebbe essere cambiato (salvo altre impostazioni strane con dnsmasq, qui un esempio con un Raspberry Pi).

Controllate l’effettiva risposta con:

nslookup google.com

E dovrebbe comparirvi qualcosa del tipo:

Server:		8.8.8.8
Address:	8.8.8.8#53

Come impostare delle regole nell’Iptables

Abbiamo visto cos’è l’Iptables ma non abbiamo ancora visto come impostare delle regole. Beh, come ho specificato nell’articolo precedente, è molto semplice! Aprite il terminale ed eseguite:

sudo iptables -A INPUT -i eth1 -p udp -m udp --dport 53 -j DROP
sudo iptables -A INPUT -i eth1 -p tcp -m tcp --dport 53 -j DROP

Questi due comandi imposteranno delle regole che bloccheranno tutte le richieste di DNS sull’interfaccia eth1 (se non sai cos’è una network interface, leggi qua).

Ovviamente queste regole al prossimo riavvio saranno resettate, nel prossimo articolo vedremo come salvarle permanentemente.

Cos’è l’Iptables

L’Iptables è un firewall installato in quasi tutti i sistemi Linux, molto semplice e intuitivo.

È facilmente gestibile da linea di comando e per ora non sono state trovate falle conclamate. Gestisce in modo semplice le regole di input, output e forward.

Potete leggere la documentazione in italiano sul sito di Ubuntu https://wiki.ubuntu-it.org/Sicurezza/Iptables

Come cercare all’interno dei file ricorsivamente con una grep

Per gli addetti ai lavori e a chi ha un minimo di manualità con gli ambienti Unix direi che è abbastanza banale e tutti quanti sanno utilizzarlo al meglio.

Però come al solito non tutti “nascono imparati” quindi ecco a voi come cercare all’interno dei file (che siano ovviamente leggibili da terminale, quindi file testuali e non eseguibili) con un semplice comando: la grep.

grep -Ril "parole da cercare" cartella/

La velocità con cui vi verranno visualizzati i risultati dipende principalmente da due fattori: se avete o meno un SSD e dalla potenza di calcolo del vostro computer.

Come installare Arch Linux

Prima di tutto scaricate l’iso e create una pendrive bootabile o nel caso di una macchina virtuale, semplicemente trascinate il file durante la creazione (nel caso non ci sia Arch selezionate Linux Kernel 4 a 64bit).

Appena l’iso fa il boot, selezionate Boot Arch Linux (x86_64) dall’elenco per selezionare la versione a 64 bit.

Una volta dentro, provate a vedere se internet funziona facendo un semplice:

ping 1.1.1.1

Iniziamo con i primi check, eseguite:

fsdisk -l

E controllate d’avere il /dev/sda disponibile con almeno 20 GB.
Ora formattiamo con:

cfdisk

Selezionate dos dall’elenco e poi selezionate il Free space che vedete. Scrivete 10G e poi cliccate su [primary].

Successivamente su [bootable] e poi su [write]. Scrivete a parole yes per confermare.

Effettuate la stessa operazione per altre 2 volte ma con 2G e il restante (quindi teoricamente 8G se ne avete dedicati almeno 20) per la seconda.

Ora formattiamo le tre partizioni con:

mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda3
mkswap /dev/sda2

Attiviamo lo swap per la seconda:

swapon /dev/sda2

Montiamo la prima partizione:

mount /dev/sda1 /mnt
mkdir /mnt/home
mount /dev/sda3 /mnt/home

E iniziamo con l’installazione:

pacstrap /mnt base base-devel

Appena ha finito, eseguite questo (serve per il mounting automatico):

genfstab /mnt>> /mnt/etc/fstab

Ora configuriamo il locale (spostandoci nel percorso di installazione):

arch-chroot /mnt /bin/bash
nano /etc/locale.gen

E togliete il commento alla riga:

en_US.UTF-8 UTF-8

Salvate con il classico CTRL+X, Y. Ed eseguite:

locale-gen

Poi modifichiamo la lingua con:

nano /etc/locale.conf

Ed incollate:

LANG=en_US.UTF-8

Sincronizziamo le modifiche con:

ls /usr/share/zoneinfo

E selezionate la vostra zona, ad esempio:

ln –s /usr/share/zoneinfo/Europe/Rome /etc/localtime

Modifichiamo l’ora con:

hwclock --systohc --utc

Ora modifichiamo la password con il classico:

passwd

Se volete, modificate l’hostname con:

nano /etc/hostname

Apportate le modifiche salvando. Ora abilitiamo il DHCP con:

systemctl enable dhcpcd

Adesso installiamo il grub (ci permetterà di scegliere il sistema operativo all’avvio):

pacman –S grub os-prober

Premete yes ed eseguite:

grub-install /dev/sda

Poi configuratelo con:

grub-mkconfig –o /boot/grub/grub.cfg

Ora uscite e riavviate:

exit
reboot

Non è stato difficile, veeero? BTW I don’t use Arch.

Come mandare una mail se un host è irraggiungibile

E per raggiungibile si intende che non risponde al ping. Quindi vediamo subito come fare:

touch script.sh
sudo chmod 755 script.sh
sudo nano script.sh

Incollate dentro qualcosa di simile:

#!/bin/sh

ip='192.168.1.1'

if ! ping -c1 -w3 $ip; then
	echo "Non pinga" | mail -s "Non pinga" destinatario@hostname.com
fi

Questo invierà una mail nel caso l’host in questione (che ha come IP 192.168.1.1) non risponda al ping.

Se volete farlo eseguire ogni 5 minuti, quindi nel caso vi serva che vi avvisi non appena l’host non risponde, vi basterà configurarlo con crontab:

sudo crontab -e

E incollate:

*/5 * * * * sudo /home/script.sh > /dev/null

Ah ovviamente date i permessi di esecuzione con sudo chmod 777 script.sh.

Come creare e firmare il proprio certificato SSL

Non sto a raccontarvi cos’è SSL o HTTPS perché se siete qua probabilmente già sapete di cosa sto parlando.

Andiamo dritti al sodo. Se volete autocertificarvi e quindi generare un certificato SSL per uso locale o di sperimentazione (dico questo perché ogni volta da browser dovrete confermare e accettare che volete installare il certificato, cliccando qualcosa come 3 volte conferma) aprite subito il terminale ed eseguite (vi chiederà una password, segnatevela ovviamente):

openssl genrsa -des3 -out myCA.key 2048

Ora generate un root certificate eseguendo:

openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem

Inserite tutti i dettagli e… voilà, già fatto!

Come verificare che un file scaricato sia veramente quello

Ci sono diversi modi per farlo e quello più comune è quello di calcolare il checksum con shasum (cos’è shasum).

Come potete vedere, ad esempio su VLC (ma gli esempi sono infiniti nel campo della sicurezza informatica), quando andrete a scaricare il loro software vi indicherà la stinga di checksum 256.

Come scaricare VLC

Voi cosa dovete fare per verificare che state realmente scaricando quel file e non avete un man-in-the-middle che vi modifica il flusso dei dati o vi manda un altro file? Potete calcolare il checksum così:

Verifica checksum VLC da terminale

Aprite il terminale e spostatevi nella cartella giusta con il classico comando cd ed eseguite:

shasum -a 256 nomefile.estensione

Aspettate qualche secondo (o minuto, dipende dalla capacità di calcolo del vostro computer) e vedrete il risultato. Se la stringa combacia, siete in una botte di ferro.

Ovviamente la stessa procedura la potete fare anche e sopratutto quando andrete a scaricare software o applicativi importanti in cui avete bisogno che la sicurezza sia elevata, come ad esempio con MEW. Prendete quante più precauzioni possibili, non fanno mai male.

Come cancellare tutti i file con estensione con uno script Bash

Ad esempio se volete cancellare tutti i file con estensione .tar.gz vi basterà creare un file Bash facendo:

sudo nano script.sh

E incollate dentro:

#!/bin/bash

find /path/ -name '*.tar.gz' -delete

Poi dategli i permessi di esecuzione con sudo chmod 777 script.sh, eseguitelo con ./script.sh e il gioco è fatto!

Fate attenzione (ovviamente) perché vi cancellerà tutti i file con quell’estensione in pochi istanti.

Come fare il backup a un database MySQL con uno script Bash

Ok anche in questo caso, se volete fare il backup intero a un vostro database in MySQL, vi basterà usare questo semplice script (che in automatico vi zippa anche il file .sql creato):

sudo nano database.sh

Incollate dentro (cambiando ovviamente i vostri parametri):

#!/bin/bash

user="root"
password="pass123"
host="localhost"
db_name="mydb"
backup_path="/home"
date=`date '+%Y%m%d%H%M%S'`

mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql
tar -zcvf $db_name-$date.tar.gz $db_name-$date.sql

Dategli i permessi con:

sudo chmod 777 database.sh

E fatevi un bel cron job ogni mattina alle 8.00 con:

sudo crontab -e

Incollando dentro:

0 8 * * * /path/database.sh

Come zippare una cartella in automatico con uno script Bash

Se volete fare uno script che vi zippi un’intera cartella, magari per un backup continuativo e giornaliero, vi basterà creare uno script con:

sudo nano backup.sh

Incollarci dentro:

#!/bin/bash

date=`date '+%Y%m%d%H%M%S'`

tar -zcvf $date.tar.gz /pathToBackup/

Dargli i permessi di esecuzione con:

sudo chmod 777 backup.sh

E mettere un crontab:

sudo crontab -e

Incollate al fondo (modificando il percorso dello script e l’ora in questo caso):

0 1 * * * /path/backup.sh

Come configurare Monit con Domoticz

sudo nano /etc/monit/conf.d/domoticz

Copiate e incollate:

check process domoticz with pidfile /var/run/domoticz.pid
start program = "/etc/init.d/domoticz.sh start"
stop  program = "/etc/init.d/domoticz.sh stop"
if failed
url http://127.0.0.1:8080/json.htm?type=command&param=getversion
and content = '"status" : "OK"'
for 2 cycles
then restart
if 5 restarts within 5 cycles then exec "/sbin/reboot"

E poi riavviate Monit con:

sudo monit reload

Come configurare Monit con Plex

sudo nano /etc/monit/conf.d/plex

Incollate questo (modificando le porte nel caso vi servissero, ma la 32400 dovrebbe andar bene):

check process Plex with pidfile "/var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/plexmediaserver.pid"
    start program = "/usr/sbin/service plexmediaserver start" with timeout 60 seconds
    stop program  = "/usr/sbin/service plexmediaserver stop"
    if failed host 127.0.0.1 port 32400 with timeout 30 seconds for 5 cycles then restart
    #if failed port 32401 with timeout 30 seconds for 5 cycles then restart
    #if failed port 32469 with timeout 30 seconds for 5 cycles then restart
    #if failed port 1909 with timeout 30 seconds for 5 cycles then restart
    #if failed url http://127.0.0.1:32400/web/index.html with timeout 30 seconds for 5 cycles then restart

E poi riavviate Monit con:

sudo monit reload

Come configurare Monit con Transmission

sudo /etc/monit/conf.d/transmission

Copiate e incollate:

check process Transmission matching "transmission-daemon"
    start program = "/etc/init.d/transmission-daemon start"
    stop program  = "/etc/init.d/transmission-daemon stop"
    if failed host 127.0.0.1 port 9091 type TCP for 2 cycles then restart
    if 2 restarts within 3 cycles then unmonitor

E poi riavviate Monit con:

sudo monit reload

Come configurare Monit con CouchPotato

sudo nano /etc/monit/conf.d/couchpotato

Incollate dentro:

check process CouchPotato matching "couchpotato"
start program = "/etc/init.d/couchpotato start"
stop program  = "/etc/init.d/couchpotato stop"
if failed host 127.0.0.1 port 5050 type TCP for 2 cycles then restart
if 2 restarts within 3 cycles then unmonitor

E poi riavviate Monit con:

sudo monit reload

Come configurare Monit con SickRage

sudo nano /etc/monit/conf.d/sickrage

Incollate:

check process SickRage matching "sickrage"
start program = "/etc/init.d/sickrage start"
stop program = "/etc/init.d/sickrage stop"
if failed host 127.0.0.1 port 8081 type TCP for 2 cycles then restart
if 2 restarts within 3 cycles then unmonitor

E poi riavviate Monit con:

sudo monit reload