
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:iharden-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;uoptionsili 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.
