Bind9 – Configurazione
Bind9 è il sistema di riferimento per i dns mondiali, in questa guida non parlerò del funzionamento del servizio dns ma della sola funzione dinamica con una richiesta RFC 2136.
Questa parte di configurazione necessita di un dominio dns gestibile, partirò dall’assunto che abbiate un vostro server Bind9 primario per la zona in questione.
Per questa configurazione sto usando un sotto dominio di oneos.it; sites.oneos.it. Ho creato il record NS per delegare questa zona al server bind9 che andremo a configurare. Installiamo bind9 su Ubuntu.
$ sudo apt-get install bind9
Troviamo tutti i file necessaria bind9 in /etc/bind.
Iniziamo con il modificare le opzioni di bind; aggiungere la voce “recursion no;”. Questo dice a bind di non rispondere alle query ricorsive, e cioè risponderà solo per i record che conosce, e cioè quelli che scriveremo noi all’interno del file di zona; statici o dinamici. Questa è la minima misura di sicurezza che si DEVE inserire sui dns, la maggior parte degli attacchi DDOS usano proprio questa configurazione errata dei dns.
options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; recursion no; auth-nxdomain no; # conform to RFC1035 # listen-on-v6 { any; }; };
Per prima cosa generiamo la coppia di chiavi dnssec che garantiranno la scrittura dei record solo ai client autorizzati. Ci vorrà un pò! Verranno generate due chiavi, Kpfsense.sites.oneos.it.+157+xxx.key e Kpfsense.sites.oneos.it.+157+xxx.private, mettetele al sicuro.
$ sudo dnssec-keygen -a HMAC-MD5 -b 512 -n HOST pfsense.sites.oneos.it
Inserire l’hash della la chiave privata nel file named.conf.
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; key "sites.oneos.it." { algorithm hmac-md5; secret "QhPTfqa4HfJt6N9KNcsSwA=="; };
Ora scriviamo la configurazione della nostra zona.
// prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; // Dynamic Zone sites.oneos.it zone "sites.oneos.it" { allow-update { key "sites.oneos.it."; }; allow-transfer {"none";}; type master; file "/var/lib/bind/sites.oneos.it"; notify yes; };
A questo punto creiamo il file di zona. Ubuntu utilizza apparmor come sistema di sicurezza, infatti le zone dinamiche devono stare nella directory /var/lib/bind altrimenti bind non potrà scrivere, oppure se avete dimestichezza con apparmor potete decidere voi dove mettere le vostre zone dinamiche.
$ORIGIN . $TTL 604800 ; 1 week sites.oneos.it IN SOA dns.oneos.it. admin.dns.oneos.it. ( 1 ; serial 604800 ; refresh (1 week) 86400 ; retry (1 day) 2419200 ; expire (4 weeks) 604800 ; minimum (1 week) ) NS dns.oneos.it.
Siamo pronti per avviare bind.
$ sudo service bind9 start
Se tutto è andato a buon fine, avremo il nostro bind9 configurato e funzionante, possiamo testare il tutto utilizzando il comando dig.
$ dig @dns.oneos.it sites.oneos.it any ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> @dns.oneos.it sites.oneos.it any ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2253 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sites.oneos.it. IN ANY ;; ANSWER SECTION: sites.oneos.it. 604800 IN SOA dns.oneos.it. admin.dns.oneos.it. 1 604800 86400 2419200 604800 sites.oneos.it. 604800 IN NS dns.oneos.it. ;; Query time: 109 msec ;; SERVER: 51.254.34.130#53(51.254.34.130) ;; WHEN: Sun Jun 12 10:15:56 CEST 2016 ;; MSG SIZE rcvd: 103
Questo è l’output corretto.
pfSense – RFC 2136 Clients
Ora configureremo pfSense per inviare le modifiche.
Andiamo su Services -> Dynamic DNS -> RFC 2136 Clients e clicchiamo su +Add.
Analizziamo le voci:
- Interface – l nostro Balancer, nel caso di interruzione di una WAN il clients invierà l’altro ip.
- Hostname – il nome del vostro pfSense, che deve coincidere con il nome di sistema.
- TTL – i secondi di refresh per il nome, l’ho impostato a 10 per fare i test, ma se i vostri ip sono statici potete anche impostarlo con una scadenza più alta.
- Key name – il nome della nostra chiave, deve coincidere con quello scritto nel file named.conf.
- Key Type – il tipo di chiave generata.
- Key – la nostra chiave.
- Server – l’indirizzo ip del server dns.
- Record Type – il tipo di record che andremo a ascrivere, nel mio caso ho scelto di non scrivere il record per IPv6 in quanto il mio pfSense non ne ha.
Prima di salvare e fare l’update consiglio di aprire il syslog in tailf e vedere cosa succede; questo il mio output.
Jun 12 10:24:58 vps named[7414]: client 1.1.1.2#46064/key sites.oneos.it: signer "sites.oneos.it" approved Jun 12 10:24:58 vps named[7414]: client 1.1.1.2#46064/key sites.oneos.it: updating zone 'sites.oneos.it/IN': deleting rrset at 'pfsense.sites.oneos.it' A Jun 12 10:24:58 vps named[7414]: client 1.1.1.2#46064/key sites.oneos.it: updating zone 'sites.oneos.it/IN': adding an RR at 'pfsense.sites.oneos.it' A
Jun 12 10:24:58 vps named[7414]: client 2.2.2.2#46064/key sites.oneos.it: signer "sites.oneos.it" approved Jun 12 10:24:58 vps named[7414]: client 2.2.2.2#46064/key sites.oneos.it: updating zone 'sites.oneos.it/IN': deleting rrset at 'pfsense.sites.oneos.it' A Jun 12 10:24:58 vps named[7414]: client 2.2.2.2#46064/key sites.oneos.it: updating zone 'sites.oneos.it/IN': adding an RR at 'pfsense.sites.oneos.it' A
Come potete vedere, ho inserito entrambi gli output; WANGW riguarda il primo aggiornamento, staccando la WAN il client ha inviato la modifica di ip al dns WAN2GW.
Dalla versione 2.3 di pfSense c’è un baco(#6357) che impedisce il corretto funzionamento, sarà risolto con la versione 2.3.2.
pfSense – Routing
Nela precedente articolo ho impostato altri due Gateway Group, WAN_DOWN e WAN2_DOWN.
Utilizzando uno o l’altro possiamo creare delle rotte personalizzate. Ipotizziamo di avere al nostro interno almeno due VLAN (802.1q), possiamo utilizzare i nostri Gateway Gropus per forzare l’uscita delle VLAN, in questo modo non avremo più un bilanciamento ma un semplice failover. Come per la LAN andremo a modificare il Gateway nelle regole di ogni VLAN impostando il Gateway Group più consono al nostro utilizzo, in caso di guasto del Gateway primario per la nostra VLAN il sistema dirotterà i pacchetti sul Gateway secondario.
Enjoy!
- Coppia di chiavi RSA per ssh, come generarle - 18 Ago,2019
- Let’s Encrypt su pfSense – webConfigurator - 04 Apr,2017
- Isc Dhcpd Openldap su Ubuntu 16.04 - 03 Ott,2016
Leave a Comment