Skip to main content

DNS-Auftrag

Aufgabenstellung

Einrichtung des Labors:

  • Ein Debian Linux-Server wird konfiguriert, um als DNS-Server zu dienen, wobei BIND (Berkeley Internet Name Domain) als Softwarelösung zum Einsatz kommt.

Konfiguration des DNS-Servers:

  • Installation von BIND: Der BIND-DNS-Server wird auf dem Debian Linux-System installiert.
  • Einrichtung der Zonen-Dateien: Konfiguration und Einrichtung der primären DNS-Zone für eine Domäne. Dabei wird besonderer Wert auf die Erstellung und Konfiguration der Zonendatei gelegt, einschließlich aller relevanten DNS-Einträge und des SOA (Start of Authority) Records.
  • Konfiguration eines sekundären DNS-Servers: Einrichtung eines sekundären (Slave) DNS-Servers für Redundanz und zur Demonstration der automatisierten Zonensynchronisation.

Analyse und erweiterte Konfiguration:

  • Analyse der DNS-Anfragen: Verwendung von Wireshark zur Aufzeichnung und Analyse der DNS-Anfragen. Dies umfasst das Verständnis der rekursiven Anfragen und der Antwortpakete.
  • Erforschung verschiedener DNS-Record-Typen: Untersuchung und Erläuterung unterschiedlicher Arten von DNS-Einträgen (wie A, AAAA, MX, CNAME, TXT) und deren Anwendung.
  • Dynamische DNS-Updates: Experimentieren mit dynamischen Updates von DNS-Einträgen. Nutzung von tsig-keygen zur Generierung sicherer Schlüssel für die Authentifizierung von Update-Anfragen.
  • Integration in bestehende Netzwerkumgebungen: Einbeziehung des konfigurierten DNS-Servers in ein bestehendes Netzwerk, eventuell unter Nutzung von exotischen Betriebssystemen, um deren Kompatibilität und Funktionalität in Bezug auf DNS-Anfragen zu testen.
  • Erforschung von DNS unter IPv6: Untersuchung der Besonderheiten und Konfigurationen von DNS in IPv6-Netzwerken, einschließlich Reverse-DNS.

image.png

DNS-Auftrag.excalidraw

Theorie

DNS Einträge

A (Address Record)

  • Verwendung: Verknüpft einen Domainnamen mit der IP-Adresse eines Servers.
  • Beispiel: example.com A 192.0.2.1
  • Seit: Das A-Record ist einer der ursprünglichen DNS-Einträge, eingeführt mit dem Start des DNS-Systems 1983.

AAAA (IPv6 Address Record)

  • Verwendung: Ähnlich wie das A-Record, aber für IPv6-Adressen.
  • Beispiel: example.com AAAA 2001:0db8::1
  • Seit: Eingeführt Anfang der 1990er Jahre als Teil der Einführung von IPv6.

PTR (Pointer Record)

  • Verwendung: Wird für Reverse DNS (rDNS) Lookups verwendet, um eine IP-Adresse in den zugehörigen Hostnamen zu übersetzen.
  • Beispiel: 1.2.0.192.in-addr.arpa PTR example.com
  • Seit: Seit den Anfängen von DNS, 1983.

TXT (Text Record)

  • Verwendung: Ermöglicht es einem Administrator, beliebigen Text in einem DNS-Eintrag zu speichern.
  • Beispiel: example.com TXT "v=spf1 include:_spf.google.com ~all"
  • Seit: Eingeführt in den 1990er Jahren.

MX (Mail Exchange Record)

  • Verwendung: Definiert die Mailserver, die für den Empfang von E-Mails für eine Domain zuständig sind.
  • Beispiel: example.com MX 10 mail.example.com
  • Seit: Seit den Anfängen von DNS, 1983.

SRV (Service Record)

  • Verwendung: Spezifiziert den Standort der Server für bestimmte Dienste.
  • Beispiel: _sip._tcp.example.com SRV 10 5 5060 sipserver.example.com
  • Seit: Eingeführt in den späten 1990ern.

SPF (Sender Policy Framework)

  • Verwendung: Hilft dabei, E-Mail-Spoofing zu verhindern, indem festgelegt wird, welche Mailserver E-Mails für eine Domain senden dürfen.
  • Beispiel: example.com TXT "v=spf1 ip4:192.0.2.0/24 -all"
  • Seit: Eingeführt 2004, aber 2014 offiziell als veraltet erklärt und durch DMARC ersetzt.

NAPTR (Naming Authority Pointer)

  • Verwendung: Wird verwendet in Verbindung mit SIP und ENUM zum Routing von Telefonanrufen über das Internet.
  • Beispiel: 2.0.2.4.1.2.9.e164.arpa NAPTR 100 10 "u" "E2U+sip" "!^.*$!sip:number@example.com!" .
  • Seit: Eingeführt in den späten 1990er Jahren.

CAA (Certificate Authority Authorization)

  • Verwendung: Gibt an, welche Zertifizierungsstellen Zertifikate für eine Domain ausstellen dürfen.
  • Beispiel: example.com CAA 0 issue "letsencrypt.org"
  • Seit: Eingeführt 2013.

NS (Name Server Record)

  • Verwendung: Gibt die Nameserver an, die für eine bestimmte Domain zuständig sind.
  • Beispiel: example.com NS ns1.example.com
  • Seit: Seit den Anfängen von DNS, 1983.

DS (Delegation Signer)

  • Verwendung: Wird im DNSSEC-Protokoll verwendet, um die Authentizität der Nameserver-Informationen einer Domain zu bestätigen.
  • Beispiel: example.com DS 12345 5 1 49FD46E6C4B45C55D4AC69DB588D2B9411AEDB4F
  • Seit: Eingeführt mit DNSSEC in den 2000er Jahren.

Hauptunterschiede und Änderungen bei DNS über IPv6

  1. IPv6-Adressen:

    • IPv6-Adressen sind länger und komplexer als IPv4-Adressen. Sie bestehen aus 128 Bit und werden in hexadezimaler Notation dargestellt, z. B. 2001:0db8:85a3:0000:0000:8a2e:0370:7334.
  2. AAAA-Records:

    • Für IPv6-Adressen wird der AAAA-Record (Quad-A-Record) anstelle des A-Records verwendet, um eine Hostadresse zu speichern. Ein AAAA-Record kann eine IPv6-Adresse zu einem Domainnamen auflösen.
    • Beispiel:
      www.example.com. 3600 IN AAAA 2001:0db8:85a3::8a2e:0370:7334

       

  3. Reverse DNS:
  • Reverse DNS-Lookups für IPv6-Adressen verwenden PTR-Records, die in der ip6.arpa.-Domain gespeichert werden.
  • Ein Beispiel für eine PTR-Zeile für IPv6 sieht folgendermaßen aus:
    4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.3.a.5.8.b.0.d.0.1.0.0.2.ip6.arpa. 3600 IN PTR www.example

Aufbau der Umgebung

Konfiguration des DNS Servers (Master)

Schritt 1: Installation von BIND

Paketdatenbank aktualisieren:
sudo apt-get update
BIND Installieren:
sudo apt-get install bind9 bind9utils bind9-doc dnsutils

Schritt 2: Konfiguration von BIND

Edit the named.conf.options file:
sudo nano /etc/bind/named.conf.options
acl LAN {
192.168.1.0/26;
};
options {
        directory "/var/cache/bind"; // default directory
        allow-query { localhost; LAN; }; // allow queries from localhost and 192.168.1.0-192.168.1.255
        forwarders { 1.1.1.1; }; // use CloudFlare 1.1.1.1 DNS as a forwarder
        recursion yes;  // allow recursive queries
};
named-checkconf /etc/bind/named.conf.options

image.png

Edit the named.conf.local file
sudo nano /etc/bind/named.conf.local
zone "test.local" {
    type master;
    file "/etc/bind/zones/db.test.local"; # Pfad zur Zonendatei
    allow-transfer { 192.168.1.5; }; # IP des sekundären DNS-Servers
};
zone "1.168.192.in-addr.arpa" IN {
     type master;
     file "/etc/bind/zones/db.test.local.rev"; # Pfad zur Zonendatei
     allow-transfer { 192.168.1.5; }; # IP des sekundären DNS-Servers
}
named-checkconf /etc/bind/named.conf.local

image.png

Zone Folder erstellen:
mkdir /etc/bind/zones
Forward Zone File erstellen:
nano /etc/bind/zones/db.test.local
$TTL    604800
@       IN      SOA     ns1.test.local. admin.test.local. (
                           3         ; Serial
                      604800         ; Refresh
                       86400         ; Retry
                     2419200         ; Expire
                      604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.test.local.
@       IN      NS      ns2.test.local.
ns1     IN      A       192.168.1.4
ns2     IN      A       192.168.1.5
router  IN      A       192.168.1.1
named-checkzone test.local /etc/bind/zones/db.test.local

image.png

Reverse Zone File erstellen:
nano /etc/bind/zones/db.test.local.rev
$TTL    604800
; SOA record with MNAME and RNAME updated
@       IN      SOA     cherry.example. root.cherry.example. (
                              2         ; Serial Note: increment after each change
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; Name server record
@       IN      NS      ns1.test.local.
@       IN      NS      ns2.test.local.
; A record for name server
ns1     IN      A       192.168.1.4
ns2     IN      A       192.168.1.5
; PTR record for name server
4       IN      PTR     ns1.test.local.
5       IN      PTR     ns2.test.local.
; PTR record for clients
1       IN      PTR     router.test.local.
named-checkzone test.local /etc/bind/zones/db.test.local.rev

image.png

Bind Neustarten
systemctl restart bind9

Testen des DNS Servers

Forward Zone
nslookup ns1.test.local 192.168.1.4
nslookup ns2.test.local 192.168.1.4
nslookup router.test.local 192.168.1.4

image.png

Reverse Zone
nslookup 192.168.1.1 192.168.1.4
nslookup 192.168.1.4 192.168.1.4
nslookup 192.168.1.5 192.168.1.4

image.png

Konfiguration des DNS Servers (Slave)

Schritt 1: Installation von BIND

Paketdatenbank aktualisieren:
sudo apt-get update
BIND Installieren:
sudo apt-get install bind9 bind9utils bind9-doc dnsutils

Schritt 2: Konfiguration von BIND

Edit the named.conf.options file:
sudo nano /etc/bind/named.conf.options
acl LAN {
192.168.1.0/26;
};
options {
        directory "/var/cache/bind"; // default directory
        allow-query { localhost; LAN; }; // allow queries from localhost and 192.168.1.0-192.168.1.255
        forwarders { 1.1.1.1; }; // use CloudFlare 1.1.1.1 DNS as a forwarder
        recursion yes;  // allow recursive queries
};
named-checkconf /etc/bind/named.conf.options

image.png

Edit the named.conf.local file
sudo nano /etc/bind/named.conf.local
zone "test.local" {
    type slave;
    file "secondary/db.test.local"; # Pfad für die sekundäre Zonendatei
    masters { 192.168.1.4; }; # IP des primären DNS-Servers
};
zone "1.168.192.in-addr.arpa" IN {
     type slave;
     file "secondary/db.test.local.rev";
     masters { 192.168.1.4; };
};
named-checkconf /etc/bind/named.conf.local

image.png

Bind Neustarten
systemctl restart bind9

Testen des DNS Servers

Forward Zone
nslookup ns1.test.local 192.168.1.5
nslookup ns2.test.local 192.168.1.5
nslookup router.test.local 192.168.1.5

image.png

Reverse Zone
nslookup 192.168.1.1 192.168.1.5
nslookup 192.168.1.4 192.168.1.5
nslookup 192.168.1.5 192.168.1.5

image.png

Erweiterte Konfiguration und Analyse

Einbinden in vorhandenes Netzwerk

vogelsrv42002 - DHCP Konfiguration ändern
sudo nano /etc/dhcp/dhcpd.conf
# minimal sample /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.192 {
 range 192.168.1.10 192.168.1.50;
 option routers 192.168.1.1;
 option domain-name-servers 192.168.1.4, 192.168.1.5;
}
systemctl restart isc-dhcp-server
Testen der neuen Konfiguration
nslookup /release
nslookup /all

image.png

Wireshark Analyse der DNS abfragen

Forward abfragen

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Reverse abfragen

image.png

image.png

image.png

image.png

Cloud DNS (AWS)

In AWS besitze Ich bereits eine DNS Zone Namens mregli.cloud. Die Zone wird gemanaged in einem Service Namens Route 53 (DNS-Service). Das UI sieht wie folgt aus:

image.png

In AWS kann man die folgenden DNS Einträge erstellen:

image.png

Der Grund wieso man den AWS DNS benutzen soll ist da man die DNS Server im Hintergrund nicht selber Managen muss und da die DNS Server eine 100% Verfügbarkeit versprechen da die DNS Funktion niemals ausfallen darf.

Dynamische DNS-Updates (Local)

Verzeichnis für Geheimnisse erstellen: Erstellen Sie ein Verzeichnis, um die generierten Schlüssel sicher zu speichern.

mkdir /secrets
tsig-keygen ddns >> /secrets/ddns

TSIG-Schlüssel (Transaction Signature) generieren: Erstellen Sie einen TSIG-Schlüssel, der zur Authentifizierung von DNS-Updates verwendet wird.

key "ddns" {
        algorithm hmac-sha256;
        secret "TYkYPXTJXYVc9gM3cDvSbuwSaZ73bLf6LVfeKmDCB78=";
};

DNS-Zonendatei konfigurieren: Konfigurieren Sie Ihre DNS-Zonendatei, um dynamische Updates zu ermöglichen. Diese Konfiguration definiert die Zone, die als Master fungiert, und legt die Datei fest, in der die Zonendaten gespeichert werden.

key "ddns" {
        algorithm hmac-sha256;
        secret "D/Y0qfay469q2Nk7ROASD48oSCnjfUUvw1hLirl6Gqc=";
};
...
zone "test.local" {
    type master;
    file "/etc/bind/zones/db.test.local"; # Pfad zur Zonendatei
    allow-transfer { 192.168.1.5; }; # IP des sekundären DNS-Servers
    allow-update { key "ddns"; };
};
...

Anpassung des AppArmor-Profils für BIND

AppArmor ist ein Sicherheitsmodul, das die Berechtigungen von Anwendungen auf Systemebene einschränkt. Um dynamische DNS-Updates zuzulassen, müssen Sie das AppArmor-Profil für den BIND-DNS-Server anpassen:

AppArmor-Profil für BIND lokalisieren: Das AppArmor-Profil für BIND befindet sich normalerweise unter /etc/apparmor.d/usr.sbin.named. Öffnen Sie diese Datei zur Bearbeitung:

sudo nano /etc/apparmor.d/usr.sbin.named

AppArmor-Profil ändern: Fügen Sie die erforderlichen Berechtigungen für das Verzeichnis und die Dateien hinzu, die mit den DNS-Updates verbunden sind. Stellen Sie sicher, dass die folgenden Zeilen (oder ähnliche) enthalten und korrekt konfiguriert sind:

image.png

AppArmor-Profile neu laden: Nachdem Sie das Profil geändert haben, laden Sie die AppArmor-Profile neu, um die Änderungen anzuwenden:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.named

Berechtigungen überprüfen: Stellen Sie sicher, dass der BIND-Benutzer (named oder ähnlich) die erforderlichen Berechtigungen hat, um in das Verzeichnis /etc/bind/zones zu schreiben und die Datei db.test.local.jnl zu erstellen oder zu ändern. Falls dies noch nicht geschehen ist, passen Sie die Berechtigungen an:

sudo chown -R bind:bind /etc/bind/zones
sudo chmod -R 755 /etc/bind/zones

BIND neu starten: Starten Sie den BIND-Dienst neu, um die Änderungen anzuwenden:

systemctl restart bind9

Update erneut versuchen: Versuchen Sie, das DDNS-Update erneut durchzuführen:

nsupdate -k /secrets/ddns
> server ns1.test.local
> update add home.test.local 200 A 1.2.3.4
> send

Testen kann man es dann über einen einfachen normalen nslookup.

nslookup home.test.local

image.png

Dynamische DNS-Updates (Maas)

image.png

copyTSIG-Schlüssel DNSspeichern: TSIGErstellen keySie ondie systemDatei /secrets/maas und fügen Sie den TSIG-Schlüssel ein:

nano /secrets/maas

Fügen Sie den folgenden Inhalt ein:

key "manuel.regli" {
	algorithm hmac-sha256;
	secret "m5W38E9ugk8hIsi0dav9FkOoIFIny2yiyISpn0MMDtA=";
};

Speichern Sie die Datei und schließen Sie den Editor.

Berechtigungen setzen: Stellen Sie sicher, dass die Datei die richtigen Berechtigungen hat, sodass nur der notwendige Benutzer (in diesem Fall der Benutzer, der nsupdate ausführt) darauf zugreifen kann:

sudo chown root:root /secrets/maas
sudo chmod 600 /secrets/maas

DNS-Update durchführen: Verwenden Sie nsupdate, um den DNS-Eintrag zu aktualisieren:

nsupdate -k /secrets/maas
> server ns.users.bbw-it.ch.
> update add test.manuel.regli.users.bbw-it.ch. 200 IN A 2.12.21.2
> send

Überprüfung des Updates: Überprüfen Sie den neuen DNS-Eintrag mit nslookup:

nslookup test.manuel.regli.users.bbw-it.ch

image.png

nslookup test.manuel.regli.users.bbw-it.ch ns.users.bbw-it.ch

image.png

image.png

IPv6

Forward Zone file bearbeiten
nano /etc/bind/zones/db.test.local
$ORIGIN .
$TTL 604800     ; 1 week
test.local              IN SOA  ns1.test.local. admin.test.local. (
                                4          ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      ns1.test.local.
                        NS      ns2.test.local.
$ORIGIN test.local.
$TTL 200        ; 3 minutes 20 seconds
home                    A       1.2.3.4
$TTL 604800     ; 1 week
ns1                     A       192.168.1.4
ns1                     AAAA    fe80::250:56ff:fe9e:7055
ns2                     A       192.168.1.5
router                  A       192.168.1.1
Reverse Zone file bearbeiten

Um herauszufinden wie der eintrag lauten muss kann man den folgenden Trick verwenden:

dig -x fe80::250:56ff:fe9e:7055

image.png

 

nano /etc/bind/zones/db.8.e.f.ip6.arpa
$TTL 3600
@   IN  SOA ns1.example.com. admin.example.com. (
            2024052601 ; Seriennummer
            3600       ; Refresh
            1800       ; Retry
            1209600    ; Expire
            3600 )     ; Minimum TTL

@    IN  NS  ns1.test.local.
@    IN  NS  ns2.test.local.

5.5.0.7.e.9.e.f.f.f.6.5.0.5.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. 3600 IN PTR ns1.test.local.
nano /etc/bind/named.conf.local
zone "8.e.f.ip6.arpa" IN {
     type master;
     file "/etc/bind/zones/db.8.e.f.ip6.arpa";
     allow-transfer { 192.168.1.5; };
};