Praktičan vodič za bezbedno postavljanje i zaštitu DNS servera na Linuxu

Article Image

Praktičan vodič za bezbedno postavljanje i zaštitu DNS servera na Linuxu

Zašto je bezbednost DNS servera bitna i šta ovaj vodič pokriva

DNS server je kritična mrežna usluga koja prevodi čitljive domene u IP adrese. Kompromitovan DNS može prouzrokovati preusmeravanja saobraćaja, gubitak dostupnosti i krađu podataka. Ovaj vodič objašnjava i vodi kroz implementaciju ključnih bezbednosnih funkcionalnosti: DNSSEC (potpisivanje zona), TSIG (sigurna sinhronizacija između servera), rate limiting i response-policy-zones (RPZ) za mitigaciju napada, kao i omogućavanje šifrovanih upita preko DNS over TLS (DoT) i DNS over HTTPS (DoH).

Sadržaj je praktičan: pokriva pripremu okruženja, instalaciju BIND9 i Unbound na Ubuntu/Debian i CentOS/AlmaLinux, osnovne komande za verifikaciju, preporuke za logovanje i monitoring, kao i smernice za rešavanje uobičajenih problema.

Cilj i očekivani rezultat

Nakon ovog i narednih delova čitaoci će moći da bezbedno podignu i zaštite DNS server:

  • Razumeće uloge DNSSEC, TSIG, rate limiting, RPZ, DoT i DoH.
  • Instaliraće i proveriće BIND9 ili Unbound na podržanoj distribuciji.
  • Primeniće osnovne sigurnosne postavke i testirati vezu i potpisivanje.

Zahtevi i priprema okruženja

Pre početka pripremiti sledeće:

  • Server sa sudo pristupom (korisnik sa sudo privilegijama ili root).
  • Stabilna internet konekcija i sinhronizovano vreme (chrony ili systemd-timesyncd).
  • Otvoreni portovi: 53/UDP, 53/TCP (DNS); 853/TCP (DoT); 443/TCP (DoH preko proxy-ja).
  • Plan za logovanje i monitoring (rsyslog/journald, fail2ban, Prometheus/ELK po potrebi).

Instalacija osnovnih paketa (Ubuntu/Debian i CentOS/AlmaLinux)

Primeri instalacije zahteve sudo privilegije. Naredbe ne menjaju konfiguraciju ili brišu fajlove.

Ubuntu / Debian:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc unbound dnsutils -y

Šta rade komande: apt update osvežava liste paketa; apt install instalira BIND9, Unbound i korisne alate (potrebno sudo).

CentOS / AlmaLinux (8/9):

sudo dnf install bind bind-utils unbound -y

Šta radi: dnf instalira pakete iz sistemskog repozitorijuma; zahteva sudo.

Provera instalacije i verzija

Nakon instalacije proveriti verzije i da li su servisi aktivni. Primeri komandi:

# Provera verzije BIND (named)
named -v

# Provera verzije Unbound
unbound -h | head -n 1

# Provera statusa servisa (systemd)
sudo systemctl status named     # CentOS/AlmaLinux
sudo systemctl status bind9     # Debian/Ubuntu
sudo systemctl status unbound

Objašnjenje: prve komande prikazuju verziju; systemctl status pokazuje da li servis radi i eventualne greške pri startu (zahteva sudo za čitanje detaljnih logova).

Pre-install sigurnosne preporuke

  • Omogućiti samo neophodne portove u firewall-u i testirati promene pažljivo (napomena: promene firewall pravila mogu prekinuti vezu).
  • Sinhronizovati vreme: sudo timedatectl set-ntp true.
  • Direktno na serveru kreirati posebne korisnike i ograničiti pristup konfiguracionim direktorijumima.
  • Planirati backup zona i privatnih ključeva pre aktiviranja DNSSEC.

Sledeći deo će ući u detaljnu konfiguraciju DNSSEC (kreiranje KSK/ZSK ključeva i potpisivanje zona) i konkretne primere za BIND9 i Unbound, kao i komande za verifikaciju potpisa.

Detaljna konfiguracija DNSSEC (koraci, primeri i najbolja praksa)

DNSSEC dodaje digitalne potpise u zone i omogućava klijentima da verifikuju integritet i autentičnost odgovora. Sledeći koraci prikazuju osnovni proces za BIND9; isti princip važi i za druge servere uz odgovarajuće alate.

Kreiranje ključeva (KSK i ZSK)

Preporuka je koristiti odvojene tipove ključeva: KSK (Key Signing Key) za potpisivanje katelog (delegacija) i ZSK (Zone Signing Key) za potpisivanje samih zapisa. Tipične komande (BIND) izgledaju ovako:

# Kreiranje ZSK (brže rotiranje)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com

# Kreiranje KSK (duža ključna dužina, ređe rotiranje)
dnssec-keygen -a RSASHA256 -b 4096 -n ZONE -f KSK example.com

Nakon kreiranja dobićete fajlove K.key i K.private. Sačuvajte privatne ključeve na sigurnom mestu i napravite backup pre bilo kakve izmene.

Potpisivanje zone i automatsko potpisivanje

Ručno potpisivanje zone (jednokratno ili tokom testiranja):

dnssec-signzone -o example.com -k Kexample.com.+008+12345.key 
  example.com.zone Kexample.com.+008+67890.key

Za produkciju se preporučuje automatsko potpisivanje (auto-dnssec) u BIND konfiguraciji:

zone "example.com" {
  type master;
  file "/etc/bind/zones/example.com.db";
  auto-dnssec maintain;
  inline-signing yes;
};

Inline-signing omogućava BIND-u da upravlja potpisima u procesu ZONE izmene. Pre uključivanja inline-signing obavezno napravite backup.

Verifikacija podpisa

Koristite dig ili drill za proveru DNSSEC atributa:

dig +dnssec @127.0.0.1 example.com SOA
# ili
drill -S example.com @127.0.0.1

Tražite polja AD/DO u odgovoru i RRSIG zapise uz zone; algoritamski i vremenski podaci su vidljivi u RRSIG zapisu.

TSIG: sigurno sinhronizovanje zona i AXFR/IXFR

TSIG se koristi za autentifikaciju zone transfera između master i slave servera. Praktičan primer kreiranja i korišćenja TSIG ključa:

# Kreirajte HMAC ključ koristeći dnssec-keygen (može se koristiti i tsig-keygen)
dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST transfer-key

# Primer konfiguracije u named.conf na masteru
key "transfer-key" {
  algorithm hmac-sha256;
  secret "BASE64-SECRET-GENERATED";
};

zone "example.com" {
  type master;
  file "/etc/bind/zones/example.com.db";
  allow-transfer { key transfer-key; };
};

# Na slave (u named.conf)
server x.x.x.x {
  keys { transfer-key; };
}
zone "example.com" {
  type slave;
  masters { x.x.x.x key transfer-key; };
};

Testiranje AXFR sa klijentom:

dig @master.example.com example.com AXFR -y hmac:transfer-key:BASE64-SECRET-GENERATED

Rate limiting i zaštita od DDoS

Ograničavanje broja odgovora i kontrola brzine zahteva pomaže u smanjenju uticaja napada.

BIND rate-limit primer

options {
  rate-limit {
    responses-per-second 10;
    window 5;
    slip 2;
  };
};

Ove vrednosti prilagodite opterećenju vaše mreže i kapacitetima. Testirajte opterećenje pre i posle promene.

Unbound zaštita

  • Unbound poseduje ugrađene mehanizme za zaštitu od flood-a i cache poisoning; podesite parametre poput ratelimit: i harden-referral-path:.

Response-Policy-Zones (RPZ) za filtriranje i blokiranje malicioznih domena

RPZ omogućava aktivno filtriranje neželjenih domena odgovaranjem sa NXDOMAIN ili preusmeravanjem. BIND primer:

zone "rpz.local" {
  type master;
  file "/etc/bind/rpz.local.db";
};

options {
  response-policy { zone "rpz.local"; };
}

Primer unosa u rpz.local.db:

$TTL 2H
@ IN SOA localhost. root.localhost. 2023080101 1H 15M 1W 1H
  IN NS localhost.
bad.example.com IN CNAME .
ads.example.net    IN CNAME 127.0.0.1

Unbound ne podržava RPZ na isti način kao BIND; za sličnu funkcionalnost razmotrite upotrebu recursor-a koji podržava RPZ (npr. PowerDNS Recursor) ili koristiti lokalne forward zone i skripting.

DoT i DoH: šifrovani upiti — kako ih omogućiti

BIND kao autoritativni server nema ugrađenu podršku za DoT/DoH. Za šifrovane klijentske upite obično se koriste:

  • Unbound kao lokalni resolver uz TLS (ako verzija podržava server TLS opcije).
  • Proxy rešenja: stunnel za DoT ili NGINX/Caddy/Cloudflared za DoH koji prosleđuju zahteve lokalnom resolveru.

Jednostavan primer korišćenja stunnel-a za DoT preusmeravanje na BIND/Unbound:

# stunnel.conf (primer)
[dnstls]
accept = 853
connect = 127.0.0.1:53
cert = /etc/ssl/certs/dns.example.com.pem
key = /etc/ssl/private/dns.example.com.key

Za DoH možete koristiti Caddy ili NGINX koji proxy-uje HTTPS zahteve do lokalnog resolvera (localhost:53 ili do Unbound-a preko doT). Uvek koristite validan TLS sertifikat i pratite preporuke za performance za HTTPS.

Logovanje, monitoring i alarmiranje

Dobro logovanje omogućava rano otkrivanje problema i forenzičku analizu. Preporuke:

  • Uključite query logging samo ako je neophodno (može brzo rasti). BIND: querylog yes; u options ili posebna log sekcija.
  • Koristite sistemski journal ili rsyslog za rotaciju logova; podesi logrotate za /var/log/named/ ili /var/log/unbound/.
  • Integracija sa Prometheus (exporteri), ELK stack ili Grafana za vizualizaciju metrike i trendova.
  • Konfigurišite upozorenja za neuobičajeni porast upita, greške pri potpisivanju i neuspešne AXFR sinhronizacije.

Backup i politika upravljanja ključevima

Ključne smernice:

  • Privatne ključeve čuvajte van mreže i sa pristupom ograničenim samo na administratore (chmod 600).
  • Automatizujte rotaciju ZSK češće (npr. 30–90 dana) a KSK ređe (npr. 1+ godina), i testirajte rollover proces u staging okruženju.
  • Redovno bekapujte zone, konfiguracione fajlove i privatne ključeve; šifrujte backup kopije.

Testiranje i rešavanje uobičajenih problema

Korisne komande za dijagnostiku:

# Test konfiguracije
named-checkconf
named-checkzone example.com /etc/bind/zones/example.com.db

# Provera portova i povezanosti
sudo ss -ltnp | grep :53
sudo tcpdump -n -i any port 53

# Provera logova
sudo journalctl -u bind9 -f
sudo tail -F /var/log/unbound/unbound.log

Najčešći problemi i rešenja:

  • Neuspešna verifikacija DNSSEC: proveriti vreme na serveru i prisustvo potpisanih RRSIG zapisa.
  • AXFR/TSIG greške: proveriti da li je ključ identičan na obe strane i da li IP adrese odgovaraju pravilima u named.conf.
  • Firewall blokira promet: testirati lokalno i na nivou mreže (iptables/nftables/Cloud firewall).
  • SELinux/APPARMOR pravila: prilagoditi kontekst ili privremeno isključiti za testiranje.

Ovaj dodatni sadržaj daje praktične korake za bezbednu implementaciju DNSSEC, TSIG, rate limiting-a, RPZ, DoT/DoH i preporuke za upravljanje i praćenje. Uvek testirajte promene u kontrolisanom okruženju pre primene u produkciji i vodite evidenciju o rotaciji ključeva i izmenama konfiguracije.