İçeriğe geç

(B) Ağ Yönetimi

Knot DNS ile Authoritative Sunucu ve DNSSEC Kurulumu

6 dk okuma

Authoritative DNS Sunucusu Olarak Knot DNS

Knot DNS, Çekya'nın .cz TLD kayıt otoritesi CZ.NIC tarafından geliştirilen ve tamamen C dilinde yazılmış yüksek performanslı bir authoritative DNS sunucusudur. Recursion yapmaz; yalnızca kendisinde tanımlı zone'lardan yanıt verir. Recursion işi ayrı bir proje olan Knot Resolver'a bırakılmıştır. Bu ayrım onu primary ya da secondary sunucu olarak ideal kılar. Yüksek QPS alan ortamlarda, sık güncellenen ve imzalı zone'larda BIND'in zorlandığı yerlerde rahat çalışır. DNSSEC imzalama motoru yerleşiktir, ek bir imzalama aracı kurulmaz.

Kurulum

Debian tabanlı sistemlerde paket yöneticisi üzerinden kurulum tek komutla tamamlanır:
sudo apt-get update
sudo apt-get install knot knot-dnsutils
Paket knot kullanıcısı ve grubuyla birlikte gelir, servis knot.service adıyla systemd altında çalışır. knot-dnsutils ise kdig gibi sorgu araçlarını verir. RHEL türevlerinde EPEL deposu eklendikten sonra dnf install knot ile aynı kurulum yapılır. Güncel sürümlerde master/slave yerine primary/secondary terimleri geçer; konfigürasyondaki karşılıkları master ifadesidir ve eski terimle geriye dönük uyumludur. Kurulum bitince konfigürasyon dosyası düzenlenir.

Temel Konfigürasyon

Ana konfigürasyon dosyası /etc/knot/knot.conf yolundadır. Basitleştirilmiş YAML formatı kullanır; girintiye duyarlıdır, sekme yerine boşluk gerekir. Dosya bölümlerden oluşur: server, database, log, key, remote, acl, policy, template, zone. En az server ve zone bölümleri tanımlanmalıdır.
server:
    listen: 0.0.0.0@53
    listen: ::@53
    user: knot:knot

database:
    storage: /var/lib/knot

log:
  - target: syslog
    any: info

remote:
  - id: secondary
    address: 192.0.2.10@53

acl:
  - id: acl_transfer
    address: 10.0.0.0/8
    action: transfer

zone:
  - domain: example.com
    storage: /var/lib/knot/zones
    file: example.com.zone
    notify: secondary
    acl: acl_transfer
Bu yapılandırma sunucunun tüm IPv4 ve IPv6 arayüzlerinde 53. porttan dinlemesini sağlar. Buradaki nesne ilişkisine dikkat etmek gerekir: adres bilgisini taşıyan yer remote bölümüdür, zone altındaki notify ise yalnızca o tanımın kimliğine referans verir. Transfer yetkisi de acl bölümünde adres ve action çiftiyle tanımlanır; zone bu acl kimliğini referans alır. Yani notify: secondary satırı bir IP listesi değildir, remote tanımının id'sidir. ACL'deki action transfer dışında update veya notify da olabilir. Üretimde transfer yetkisi mutlaka daraltılmalıdır. Zone dosyası /var/lib/knot/zones/ dizininde example.com.zone adıyla bulunmalıdır.

Zone Dosyası Yapısı

Standart BIND uyumlu zone dosyası formatı kullanılır. SOA kaydı zorunludur ve birincil sunucu bilgisi ile serial numarası içerir. Serial artırılmadığında secondary sunucular değişiklikleri almaz. A, AAAA, CNAME, MX, TXT ve NS kayıtları zone dosyasına eklenir.
$ORIGIN example.com.
$TTL 3600

@       IN      SOA     ns1.example.com. admin.example.com. (
                        2024011501 ; Serial
                        3600       ; Refresh
                        1800       ; Retry
                        604800     ; Expire
                        86400 )    ; Minimum TTL

@       IN      NS      ns1.example.com.
@       IN      NS      ns2.example.com.
@       IN      A       203.0.113.10
ns1     IN      A       203.0.113.11
ns2     IN      A       203.0.113.12
www     IN      A       203.0.113.10
mail    IN      A       203.0.113.20
@       IN      MX      10 mail.example.com.
Zone dosyası yazıldıktan sonra knotc zone-check example.com ile sözdizimi kontrol edilir, sonra konfigürasyon yeniden yüklenir:
sudo knotc reload

DNSSEC Kurulumu

Knot DNS iki imzalama moduna sahiptir: otomatik anahtar yönetimi ve manuel anahtar yönetimi. Otomatik modda algoritma, anahtar boyutu ve anahtar ömrü bir policy bölümünde tanımlanır; policy zone'a ya da template'e bağlanır. Anahtarları Knot kendisi üretir, KSK/ZSK yaşam döngüsünü de kendisi yönetir.
policy:
  - id: dnssec-default
    algorithm: ECDSAP256SHA256
    ksk-lifetime: 365d
    zsk-lifetime: 90d

template:
  - id: default
    storage: /var/lib/knot/zones
    dnssec-signing: on
    dnssec-policy: dnssec-default
dnssec-signing: on parametresi zone'un otomatik olarak imzalanacağı anlamına gelir. ksk-lifetime ve zsk-lifetime değerleri anahtar ömürlerini belirtir; birim sonepleriyle gün bazında yazılırlar. KSK'yı yılda bir, ZSK'yı üç ayda bir döndürmek güvenlik ve operasyonel yük arasında yaygın bir denge olarak geçer. İki anahtar tipinin işi farklıdır: ZSK zone içindeki kayıtları imzalar, KSK ise DNSKEY kayıtlarını imzalar ve güven zincirinin üst zone'a bağlanan ucudur. ECDSAP256SHA256, RSA'ya göre çok daha kısa anahtar ve imzayla eşdeğer güvenlik sağlar; 256 bitlik anahtar boyu bu algoritma için standarttır. Manuel moda geçmek isteyenler policy'yi manual yaparak anahtarları kendisi üretir. Sözdizimi name=value biçimindedir:
sudo keymgr example.com. generate algorithm=ECDSAP256SHA256 size=256 ksk=true zsk=true
Tek anahtarla her iki işi yapan Single-Type Signing kullanmak en kestirme yol. Anahtarlar dosya olarak değil, /var/lib/knot/keys/ altındaki LMDB tabanlı KASP veritabanında saklanır. keymgr ile knotc işlemlerini aynı anda çalıştırmamak gerekir; KASP veritabanı kilitlenebilir. DS kaydı zincirin üst halkasıdır: KSK genel anahtarının özeti DS formatında üst zone'a iletilir. Knot bunu çıktı olarak verir:
sudo keymgr example.com. ds
Çıktıdaki key tag, algoritma numarası, digest tipi ve özet registrar arayüzüne girilir. DS üst zone'a eklenmeden zone doğrulayıcı resolverlar için görünmez; tam tersi, yanlış DS kalırsa domain SERVFAIL ile cevap verir hale gelir.

Doğrulama

İmzalamanın yapılıp yapılmadığı sorgu araçlarıyla test edilir:
dig +dnssec example.com. A @localhost
kdig @127.0.0.1 example.com SOA +dnssec
Yanıtta RRSIG kaydının bulunması imzanın üretildiğini gösterir. DNSKEY sorgusunda 256 flag'li ZSK ve 257 flag'li KSK görülmelidir. Bir resolverdan SERVFAIL gelirse dig +cd ile doğrulama devre dışı bırakılıp kaydın kendisine bakılır; cevap geliyorsa sorun DNSSEC tarafındadır. ldns paketindeki drill aracı zinciri kökten itibaren takip eder:
drill -S example.com
-S parametresi güven zincirini root'a kadar kovalar ve kopan halkayı gösterir. Knot tarafında ise knotc zone-status tüm zone'ların durumunu, knotc zone-sign example.com ise yeniden imzalamayı tetikler. Loglar syslog'a, systemd altında journal'a gider; journalctl -u knot ile izlenir.

Güvenlik Önlemleri

Authoritative sunucularda birkaç temel katman iş görür. ACL tanımları transfer ve update işlemlerini yalnızca yetkili adreslere açar; normal sorgular her zaman serbesttir, kısıtlanması gereken şey transfer'dır. Recursion zaten yoktur, kapatılacak bir şey kalmaz. Response rate limiting mod-rrl modülüyle etkinleştirilir, amplification saldırılarına karşı anlamlıdır. Zone transfer'ları TSIG anahtarıyla imzalamak IP kısıtının üstüne ikinci bir katman ekler; anahtar keymgr -t ile üretilir. Değişiklik dayanıklılığı için template'te journal-content: all ve zonefile-sync ayarları kullanılabilir; değişiklikler LMDB journal'da tutulup zone dosyasına senkronize edilir. Yüksek performans, düşük kaynak tüketimi ve yerleşik DNSSEC desteği bir arada isteniyorsa Knot DNS authoritative taraf için güçlü bir seçimdir; konfigürasyon dili de BIND'in named.conf'undan okunabilirdir.

Açık kaynak

GitHub projeleri

Tümünü gör
wireguard-server-panel

WireGuard VPN sunucu paneli - İstemci yönetimi, QR kodları ve trafik istatistikleri için kendi sunucunuzda barındırılan web kullanıcı arayüzü (fork, aktif olarak geliştirilmekte)

Go

Laravel-NDFirewall

Rota Kapsamlı Laravel WAF - RCE, SQLi, XSS ve SSRF algılama özelliklerine sahip hafif bir Web Uygulaması Güvenlik Duvarı

PHP

Trustsslroot

Tek komutla çalışan özel PKI oluşturucu - Kendi kendini imzalayan kök CA ve sertifikaları anında oluşturun

Go

node_exporter

Hafif sistem metrikleri aktarıcısı - Güvenli erişim kontrolüne sahip, Linux için durum bilgisi barındırmayan tek ikili dosyalı izleme hizmeti

Rust

ipReconary

IP keşif ve alt ağ analiz aracı - Hızlı ağ taraması ve IP istihbarat toplama

Rust

Cloudfiltred

Cloudflare IP beyaz liste güvenlik duvarı - 80/443 numaralı bağlantı noktalarını yalnızca Cloudflare IP’leriyle sınırlayarak kaynak sunucunuzu doğrudan saldırılara karşı koruyun

Rust

LoadAlertTracker

Hafif sistem yükü izleme arka plan programı - Eşik değerleri aşıldığında Telegram, Discord ve Mattermost üzerinden gerçek zamanlı uyarılar

Rust

ctCertWatch

Sertifika Şeffaflığı günlüğü izleyicisi - Kimlik avı alan adlarını, marka taklitçiliğini ve yetkisiz SSL sertifikalarını gerçek zamanlı olarak tespit eder

Rust

DDNS-FW

Dinamik DNS Güvenlik Duvarı - DDNS aracılığıyla değişen IP adreslerini takip edin ve güvenli erişim kontrolü için güvenlik duvarı kurallarını otomatik olarak güncelleyin

Rust