Hoofdstuk 3
Domain Name System Het Domain Name System (DNS) is een hi¨erarchische, gedistribueerde database, die vooral gebruikt wordt voor het opzoeken van IP-adressen op hostname. Maar DNS-informatie wordt ook gebruikt voor mail routing en andere Internet-applicaties. Het practicum gaat deze week over DNS en bestaat uit de volgende onderdelen: • DNS installeren op je Linux-machine. Voor dit practicum werken we geheel op het experimenteernetwerk 145.92.26.0/23. Controleer of je machine op de correcte poort is aangesloten. • Het testen van de DNS-functies. • DNS-service voor je eigen subdomein van os3.nl leveren. • Slave servers toevoegen aan de primary server en een zone transfer uitvoeren.
3.1
Installatie van BIND
De bekendste DNS-implementatie heet Berkeley Internet Name Domain (BIND). De eerste versie van BIND is geschreven in Berkeley door een groep studenten en betaald door DARPA. De ontwikkeling van BIND wordt momenteel ondersteund door het Internet Systems Consortium (ISC) en BIND is te downloaden via www.isc.org. De meest recente versie is op het moment van schrijven 9.3.1. De BIND-distributie bevat naast de source code ook documentatie over BIND en DNS. De README file bevat installatie-instructies en in de doc/ directory kan je onder andere de Administrator Reference Manual (ARM) en een aantal relevante RFC’s vinden. Een goede RFC om mee te beginnen is RFC 1034: Domain Names - Concepts and Facilities. Het compileren en installeren van BIND is eenvoudig en zal op de meeste Linux-distributies bestaan uit de bekende reeks ./configure, make, make 8
install. Installeer BIND in de directory /usr/local en zorg dat BIND zijn configuratiebestanden zal zoeken in /etc. Laat de daemon zijn state, zoals de named.pid file, in /var/run schrijven. In de README staat meer informatie. BIND installeert een aantal tools in /usr/local/bin, de daemon executables in /usr/local/sbin en de header files in de /usr/local/include directory. Er wordt helaas geen voorbeeldconfiguratiefile (named.conf) ge¨ınstalleerd.
3.2
Het testen van BIND
Het compileren en installeren van BIND is vrij eenvoudig, maar het correct configuren van een BIND-server is zeker niet triviaal. Daarom is het verstandig om simpel te beginnen met een “caching-only nameserver”. Dit type nameserver beheert geen eigen zone data. Waarom zijn caching nameservers dan toch handig? De nameserver daemon van BIND is named en is te vinden in de sbin/ directory onder /usr/local. De configuratie file van named is named.conf. Hierin staan de algemene opties voor named en verwijzingen naar de DNSdatabase files. Onze server heeft alleen een named.conf file en een file met root-DNS servers nodig. De root hint-file bevat een lijst met root DNS-servers die de server gebruikt om een recentere lijst met rootservers te downloaden. Deze file is te downloaden van ftp://ftp.rs.internic.net/domain. De server gebruikt ook nog een named.local file om het loopback-adres 127.0.0.1 te resolven naar localhost. De named.conf file voor de caching-only DNS-server kan er dan als volgt uitzien: options { directory "/etc/named"; };
// Working directory
// caching only DNS server zone "." { type hint; file "named.cache"; }; // Provide a reverse mapping for the loopback address 127.0.0.1 zone "0.0.127.in-addr.arpa" { type master; file "named.local"; notify no; };
9
Je kan een named.conf file controleren door het named-checkconf programma te gebruiken. Omdat dit programma alleen een returnwaarde teruggeeft moet je hem zichtbaar maken. In bash zou je dit als volgt kunnen doen (kun jij hier een nettere manier voor verzinnen?): if ‘named-checkconf‘; then echo t; else echo f; fi De named.local file is een zone file voor het domein 0.0.127-in-addr.arpa. De file zorgt voor de reverse mapping van het adres 127.0.0.1 naar localhost. Zie RFC 1033 voor meer informatie over zone files. Hierin worden ook de velden
, en <server> behandeld. $TTL @ 1 360000 3600 3600000 3600 ) IN NS 0 1
86400 IN SOA ; ; ; ; ;
IN IN
( serial refresh every 100 hours retry after 1 hour expire after 1000 hours negative cache is 1 hour
<server>. PTR loopback. PTR localhost.
Je kan nu de named daemon met de hand opstarten als named -g -d2. Dit start de named daemon in de voorgrond met debug level 2 (zie de manual van named). Het is echter beter om de server zo te configuren dat de uitvoer van named naar een logfile gaat. Het is ook netjes om de “name server control” tool rndc gebruiken voor het starten en stoppen van de server. Hiervoor moet je wel de named.conf aanpassen, zoals beschreven in hoofdstuk 3 van de ARM. Beschrijf hoe je named hebt gestart en zoek uit hoe je uitvoer van named naar een log file kan sturen. Om je nameserver te gebruiken moet je resolv.conf aanpassen. Wat moet erin staan? Gebruik nu ´e´en van de tools die bij de BIND-distributie zitten om de werking van je nameserver te testen. De BIND-distributie bevat ook een verzameling scripts waarmee je de werking van je nameserver kan testen. Deze scripts kan je gebruiken om andere functies van de nameserver uit te proberen. Hiervoor worden virtuele ip-adressen op de loopback interface gebruikt.
3.3
Delegation
Als je na het doen van een aantal tests overtuigd bent geraakt dat de nameserver werkt, kun je hem je eigen subdomein van os3.nl laten bedienen. 10
• Verzin een naam voor je subdomein. Maak nu een (forward-mapping) zone file voor dit domein. Deze moet de volgende resource records bevatten: – 2 MX records. Zorg ervoor dat mail voor jouw domein gewoon wordt afgeleverd op firenze. Deze zal de mail dan beschouwen als bedoeld voor os3.nl omdat firenze de beste MX voor het subdomein blijkt te zijn. – 4 A records. – 2 CNAME records. RFC 1178 geeft handige tips bij het kiezen van namen en is leuk om te lezen. Gebruik de bovengenoemde RFC’s (1034 en 1033) voor informatie over zone files en voorbeelden. • Voeg een verwijzing naar de zone file toe aan named.conf. Herstart of herlaad de nameserver en test deze configuratie met de BIND-tools. • Als alles werkt kan je delegation van je domein aanvragen bij het systeembeheer. Sectie 4.2.2 van RFC 1034 en de sectie Instructions van RFC 1033 beschrijven het delegation proces. Het zal bij Mendel wel iets minder officieel gaan. Stuur Mendel een NS resource record en een A glue record die hij aan de nameserver van het os3.nl domein kan toevoegen. Aan welke belangrijke offici¨ele eis(en) voldoet je eigen subdomein nu nog niet?
3.3.1
Reverse zone files
DNS wordt ook gebruikt om hostnamen op te zoeken aan de hand van een IP-adres. Waarom zou je dit willen doen? Lees RFC 2317 over classless in-addr.arpa delegation. Werkt dit mechanisme ook voor losse IP-adressen? Implementeer het, indien mogelijk, op je server na overleg met het systeembeheer over de te nemen stappen. Lever het systeembeheer weer de resource records die toegevoegd moeten worden aan hun nameserver.
3.4
Slave server en zone transfer
Het is nu tijd om de betrouwbaarheid van de DNS-service te verbeteren door een slave server voor je domein op te zetten. Kies een medestudent en configureer je nameservers zo dat je slave server voor elkaar bent. Je domein heeft nu een extra DNS-server, die je ook aan je delegation point (vraag dit aan systeembeheer) moet doorgeven. De primary server en de slave server moeten altijd dezelfde DNS-data bevatten. Dus als je DNS-data op de primary server update zal de data op de slave server ook moeten worden aangepast. Dit gebeurt met een zone 11
transfer. Je kan met ´e´en van de BIND-tools (bijvoorbeeld dig of nslookup) een zone transfer uitvoeren om te zien welke informatie er verstuurd wordt. Initieer nu een zone transfer tussen de primary server en de slave server, en beschrijf dit proces. Hoe heeft de slave server die verandering ontvangen? Wat heb je aan de named.conf file moeten aanpassen?
3.5
Bonus
bonus opdracht In de tijd dat DNS werd ontworpen, was er nog weinig aandacht voor beveiliging. Het gevolg is dat DNS kwetsbaar is voor verschillende soorten aanvallen. RFC 3833 geeft een threat analysis voor DNS. Om DNS te beschermen zijn de Domain Name System Security Extensions (DNSSEC) ontwikkeld. Een introductie voor DNSSEC kan je vinden in RFC 4033. Beschrijf kort de problemen die DNSSEC moet oplossen. Kijk ook naar de functie van andere beveiligingsmethoden zoals TSIG en TKEY. bonus opdracht Kijk nu of je je nameserver een DNSSEC secure zone kan laten serven. Het authenticatie mechanisme van DNSSEC werkt met een authentication chain tussen twee servers. Laat je secure zone een zone delegeren, en test de werking van de authentication chain. Wat is nu je Trust Anchor?
12