Praktičan vodič: instalacija i početna konfiguracija DNS servera (BIND9) na Ubuntu/Debian

Article Image

Postavljanje DNS servera (BIND9) na Ubuntu/Debian — šta očekivati

Ovaj deo vodiča objašnjava zašto postaviti sopstveni DNS server i šta je cilj: stabilan, siguran i testiran DNS server koji može služiti kao autoritativni nameserver za domene i/ili kao rekursivni resolver za interne mreže. “DNS server” prevodi imena u IP adrese i kritičan je infrastrukturni servis — zato konfiguracija, sigurnost i testiranje moraju biti pažljivo izvedeni.

Zašto sopstveni DNS server i kada koristiti BIND9

Pre nego što počnete, razmotrite sledeće scenarije gde sopstveni DNS server ima smisla:

  • Hosting domena (autoritativni server za domain.com).
  • Interni resolver za privatnu mrežu (skeptičan javni pristup).
  • Testiranje DNSSEC, zapisa i delegacija u kontrolisanoj okolini.

Prednosti BIND9: široka podrška, fleksibilna konfiguracija, DNSSEC mogućnosti i bogata dokumentacija. Mana: može biti kompleksniji od lakših servera (Unbound, PowerDNS) — ali za autoritativne zone i DNSSEC je često izbor stručnjaka.

Zahtevi, priprema sistema i sigurnosne mere pre instalacije

Ovaj odeljak postavlja očekivanja i preduzima osnovne bezbednosne korake pre instalacije.

  • Distribucija: Ubuntu Server 20.04/22.04 ili Debian 10/11 (naredbe su kompatibilne za obe grane; razlikuju se samo u paketima kod veoma starih verzija).
  • Prava: sudo pristup ili root nalog potreban za instalaciju i uređivanje konfiguracionih fajlova.
  • Portovi: DNS koristi TCP/53 i UDP/53 — planirajte firewall pravila.
  • Backup: napraviti backup postojećih /etc/bind fajlova ako su već prisutni.

Osnovna provera sistema

Pre instalacije proveriti ažuriranje sistema i slobodnu veličinu diska:

# Ažuriranje paketa (Ubuntu/Debian) - zahteva sudo
sudo apt update && sudo apt upgrade -y

# Provera diska i slobodnog prostora
df -h / /var

Prva komanda preuzima ažuriranja paketa; druga prikazuje zauzeće diska. Obe zahtevaju sudo privilegije.

Instalacija BIND9 i osnovna konfiguracija fajlova

Instalacija je jednostavna, ali nakon instalacije konfiguracija fajlova zahteva pažnju. Sledeći koraci podižu BIND9 servis i pokrivaju gde se nalaze ključni fajlovi.

  1. Instalirati paket BIND9:
# Instalacija BIND9 (Ubuntu/Debian) - zahteva sudo
sudo apt install bind9 bind9utils bind9-doc -y

Ovaj paket instalira glavnu BIND9 uslugu, alate za testiranje (dig, rndc) i lokalnu dokumentaciju.

  1. Ključne lokacije konfiguracionih fajlova:
    • /etc/bind/named.conf — glavna datoteka koju uključuje ostale fajlove
    • /etc/bind/named.conf.options — globalne opcije (forwarders, recursion)
    • /etc/bind/named.conf.local — lokalne zone (autoritativne)
    • /var/cache/bind — keširane zone

Pre nego što menjate fajlove, napraviti rezervne kopije:

# Napraviti backup konfiguracije - zahteva sudo
sudo cp -a /etc/bind /etc/bind.bak.$(date +%F)

Ovaj korak štiti postojeću konfiguraciju i olakšava vraćanje ukoliko nešto pođe po zlu.

U narednom delu vodiča biće detaljno objašnjeno kako napisati i registrovati autoritativne zone, kreirati zone fajlove za domain.com, konfigurisati rekursivni resolver i testirati osnovne DNS odgovore.

Konfigurisanje autoritativnih zona i pisanje zone fajlova

Sada ćemo dodati autoritativne zone u /etc/bind/named.conf.local i napisati odgovarajuće zone fajlove. Pretpostavimo domen domain.com i mrežu 192.0.2.0/24 (dokumentacioni test-net). Prvo deklaracija zone u named.conf.local:

// /etc/bind/named.conf.local - primer
zone "domain.com" {
    type master;
    file "/etc/bind/db.domain.com";
    allow-transfer { 198.51.100.2; };  // sekundarni NS (ako postoji)
};

zone "2.0.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.0.2";
};

Primer osnovnog zone fajla za domain.com (/etc/bind/db.domain.com). Vodite računa o pravilnom serial formatu YYYYMMDDNN:

$TTL 3600
@   IN  SOA ns1.domain.com. admin.domain.com. (
        2026080901 ; serial (YYYYMMDDnn)
        3600       ; refresh
        1800       ; retry
        604800     ; expire
        86400      ; minimum TTL
)
; nameservers
    IN  NS  ns1.domain.com.
    IN  NS  ns2.domain.com.

; A/AAAA zapisi
ns1 IN  A   192.0.2.10
ns2 IN  A   198.51.100.2

www IN  A   192.0.2.20
ftp IN  CNAME www

; MX
@   IN  MX  10 mail.domain.com.
mail IN A   192.0.2.30

Primer reverse zone (/etc/bind/db.192.0.2):

$TTL 3600
@   IN SOA ns1.domain.com. admin.domain.com. (
        2026080901 ; serial
        3600
        1800
        604800
        86400
)
    IN NS ns1.domain.com.
10  IN PTR ns1.domain.com.
20  IN PTR www.domain.com.
30  IN PTR mail.domain.com.

Posle izmena, obavezno proverite zone pre učitavanja:

sudo named-checkconf
sudo named-checkzone domain.com /etc/bind/db.domain.com
sudo named-checkzone 2.0.192.in-addr.arpa /etc/bind/db.192.0.2

Ako su izlazi OK, reload-ujte konfiguraciju:

sudo rndc reload
# ili
sudo systemctl reload bind9

Napomena: za javno dostupne domene ne zaboravite na delegaciju kod registra/registrara — ažurirati NS zapise i, gde je potrebno, kreirati glue zapise (host records) ako su NS u okviru istog domena.

Podešavanje rekursivnog resolvera, pristup i bezbednosna ograničenja

Ako želite i rekursivni resolver za internu mrežu, konfigurišite globalne opcije u /etc/bind/named.conf.options. Ključne stavke: allow-recursion/allow-query, listen-on, forwarders i kontrola pristupa. Primer sigurnog pristupa samo za lokalnu mrežu:

options {
    directory "/var/cache/bind";
    recursion yes;                   // omogućiti rekursiju
    allow-recursion { 127.0.0.1; 192.168.1.0/24; };
    allow-query { localhost; 192.168.1.0/24; };
    listen-on { 127.0.0.1; 192.168.1.10; };   // IP servera u mreži
    forwarders { 1.1.1.1; 8.8.8.8; };
    dnssec-validation auto;
};

Ako domen treba da bude javno autoritativan, a server će biti izložen internetu, isključite rekursiju za sve (recursion no;) ili koristite BIND-ove “views” da razdvojite javnu autoritativnu i internu rekursivnu ulogu. Ograničavanje transfera zona (allow-transfer) i AXFR liste je obavezno za autoritativne servere.

Takođe podesite firewall (primer sa UFW):

sudo ufw allow proto udp to any port 53
sudo ufw allow proto tcp to any port 53

Osnovno testiranje i verifikacija DNS odgovora

Nakon reload-a, koristite alate dig/host/nslookup za verifikaciju:

– Provera A zapisa lokalno:

dig @127.0.0.1 domain.com A +short

– Provera SOA:

dig @127.0.0.1 domain.com SOA

– Provera reverse zapisa:

dig @127.0.0.1 -x 192.0.2.20 +short

– Test rekurzije iz klijenta:

dig @192.168.1.10 example.org A +short

Ako dobijate NXDOMAIN, SERVFAIL ili timeout, proverite zapise u /var/log/syslog ili systemd journal:

sudo journalctl -u bind9 -e
sudo tail -n 200 /var/log/syslog | grep named

Za proveru zone syntax i serial promena ponovo koristite named-checkzone. Ako imate sekundarni NS, proverite AXFR sa secondary-a i osigurajte da su allow-transfer/notify korektno podešeni. U sledećem delu ćemo detaljno pokriti DNSSEC potpisivanje i automatizaciju potpisivanja zona.

DNSSEC — osnovni koraci i preporuke

DNSSEC dodaje kriptografski potpis na zone kako bi se klijentima omogućila verifikacija autentičnosti odgovora. Osnovni elementi su KSK (Key Signing Key) i ZSK (Zone Signing Key). Pre postavljanja DNSSEC-a, razmotrite sledeće korake i zahteve: rezervisanje prostora za smeštaj ključeva (sa odgovarajućim permisijama), plan za rollover ključeva i testiranje potpisanih zona u kontrolisanom okruženju.

Osnovni koraci za potpisivanje zone

  • Generisati ZSK i KSK pomoću dnssec-keygen ili koristiti automatsko potpisivanje BIND-a (inline-signing).
  • Potpisati zonu lokalno sa dnssec-signzone ili omogućiti inline-signing u konfiguraciji zone ako želite da BIND automatski održava potpise.
  • Ažurirati DS zapis kod registra (registrar) za javne domene nakon što dobijete DS vrednosti iz KSK.
  • Testirati potpisanu zonu sa alatima kao što su dig +dnssec i online DNSSEC validatori.
  • Planirati redovan rollover ključeva i pratiti validacione logove radi otkrivanja problema sa potpisima.

Napomena: za javne, autoritativne domene obavezno sinhronizovati promene DS zapisa kod registra pre i posle rollovera KSK-a, kako bi se izbegli prekidi u validaciji.

Održavanje, monitoring i backup

Stalno održavanje je ključno za stabilnost i sigurnost DNS servisa. Uvedite procedure za nadzor performansi, logovanje i bekap ključeva i zona. Osnovne preporuke:

  • Logovanje: konfigurišite named logging (categories) i rotaciju log fajlova. Pratite syslog/journal za greške i SERVFAIL događaje.
  • Monitoring: integrisati sa sistemom za nadzor (Prometheus exporter, Nagios, Zabbix) za proveru dostupnosti UDP/TCP 53, latency i SOA serial promene.
  • Backup: automatski bekapovati /etc/bind, ključeve (privatne) i zone (uključujući .signed kopije). Čuvati bekape van servera i testirati restore proceduru redovno.
  • Bezbednost: koristiti TSIG za AXFR/IXFR između master/secondary servera, ograničiti allow-transfer i koristiti AppArmor/SELinux profile ako su dostupni.
  • Ažuriranje: redovno primenjivati sigurnosne zakrpe za BIND i OS; pratiti CVE izveštaje za ozbiljne ranjivosti.

Dobro planiran proces za backup, alerting i automatizovano testiranje nakon promena drastično smanjuje rizik od zastoja i sigurnosnih incidenata. U narednom delu (ako nastavite) možemo dodati detaljne korake za automatizaciju DNSSEC rollovera i primer TSIG konfiguracije za sigurne zone transfer-e.