Serverele DNS (Domain Name System) joacă un rol esențial în funcționarea internetului. Totuși, dacă nu sunt securizate, acestea pot deveni o țintă pentru atacuri precum spoofing DNS, amplificare sau otrăvire a cache-ului. Acest ghid descrie pașii esențiali pentru a securiza serverul tău DNS utilizând BIND (Berkeley Internet Name Domain) pe sistemele Debian și RHEL Linux.

1. Actualizează sistemul și pachetele

Menținerea serverului actualizat este prima linie de apărare împotriva vulnerabilităților. Rulează următoarele comenzi pentru a te asigura că sistemul și BIND sunt la zi:

Pe sistemele Debian:

sudo apt update && sudo apt upgrade

Pe sistemele RHEL:

sudo yum update

2. Configurează controlul accesului

Restricționează cine poate face interogări către serverul tău DNS editând fișierul de configurație named.conf. Definește intervalele de IP-uri de încredere utilizând allow-query.

Exemplu:

acl "trusted" {
    192.168.1.0/24;
    10.0.0.0/8;
};

options {
    allow-query { trusted; };
};

3. Dezactivează recursivitatea (dacă nu este necesară)

Dacă serverul tău DNS este doar autoritar (nu rezolvă domenii externe), dezactivează recursivitatea pentru a preveni abuzurile.

options {
    recursion no;
};

4. Implementează DNSSEC

DNSSEC (Domain Name System Security Extensions) adaugă autentificare criptografică interogărilor DNS, prevenind atacurile de spoofing și otrăvirea cache-ului.

Pași pentru a activa DNSSEC:

  1. Generează chei pentru zona ta utilizând dnssec-keygen.
  2. Semnează fișierul zonei cu dnssec-signzone.
  3. Configurează BIND pentru a încărca fișierul semnat al zonei.

Exemplu:

dnssec-enable yes;
dnssec-validation auto;

5. Restricționează transferurile de zonă

Asigură-te că transferurile de zonă sunt limitate la serverele secundare de încredere prin specificarea adreselor IP:

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

6. Limitează rata interogărilor DNS

Previne abuzurile prin atacuri de amplificare DNS implementând limitarea ratei interogărilor. Adaugă următoarele în fișierul named.conf:

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

7. Rulează BIND în chroot (opțional)

Executarea BIND într-un mediu chroot izolează serverul de restul sistemului, îmbunătățind securitatea.

Pași pentru a rula BIND în chroot:

  1. Instalează pachetul bind-chroot (pe RHEL) sau configurează manual (pe Debian).
  2. Editează /etc/named.conf pentru a indica directorul chroot.
  3. Repornește serviciul BIND.

8. Activează logarea și monitorizează traficul DNS

Configurează logarea pentru a detecta modele neobișnuite și a depana problemele. Adaugă următoarele în named.conf:

logging {
    channel default_debug {
        file "/var/log/named.log";
        severity dynamic;
    };
    category default { default_debug; };
};

Monitorizează traficul folosind instrumente precum tcpdump sau dnstop.

9. Folosește un firewall pentru a proteja serverul DNS

Restricționează accesul la porturile DNS (53) doar pentru IP-urile de încredere folosind iptables sau firewalld.

Exemplu cu iptables:

iptables -A INPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j DROP

Exemplu cu firewalld:

firewall-cmd --add-service=dns --zone=trusted --permanent
firewall-cmd --reload

10. Auditează și întărește periodic serverul DNS

Revizuiește periodic configurațiile serverului DNS și logurile. Instrumente precum lynis te pot ajuta să identifici potențiale vulnerabilități:

sudo lynis audit system

Concluzie

Securizarea serverului DNS este esențială pentru a asigura siguranța și fiabilitatea infrastructurii tale. Urmând pașii de mai sus, poți reduce semnificativ vulnerabilitățile și te poți proteja împotriva atacurilor DNS obișnuite. Actualizează și auditează regulat serverul pentru a menține o securitate solidă.

Linkuri relevante: