Algemene inleiding Met behulp van deze cursus leer je de netwerkinstellingen van een Linux Distributie instellen. Daarnaast geeft deze cursus je een basisinzicht in de installatie en configuratie van diverse, veel gebruikte netwerkservices onder Linux. Deze cursus baseert zich op de Linux distributie Ubuntu Server 9.10. Je kan deze distributie downloaden van http://www.ubuntu.com. De iso die je downloadt van deze website kan je branden op een CD(-RW). Let op, er is een 32-bit en 64-bit versie. Zorg ervoor dat je de juiste neemt voor jou PC. Indien je twijfelt, neem dan de 32-bit versie, die werkt altijd. Commando’s die uitgevoerd moeten worden kan je aan de volgende syntax herkennen: user@hostname:~$ commando [optie] [argument] Ook de inhoud van config-files zijn in dezelfde lay-out weergegeven. Als er bij een commando vierkante haakjes gebruikt worden, is de optie of het argument tussen die haakjes optioneel. Indien je over een bepaald onderwerp meer wenst te weten, kan je altijd terecht in de man-pages van de software. Het commando man naam_van_de_software of man naam_van_de_configfile zal je al een aardig stuk op weg helpen. Ook de websites van de diverse softwarepakketen bevatten meestal erg veel informatie, handleidingen en FAQ’s. Alle opmerkingen over deze cursus mag je mij gerust bezorgen. Ook als je van mening bent dat er een gedeelte ontbreekt of niet uitgebreid genoeg is, kan je mij vragen die toe te voegen of bij te werken. Ik probeer dit dan mee te verwerken in een volgende versie. Gunther Van Landeghem [email protected] Maart, 2010 De Creative Commons Naamsvermelding-Geen Afgeleide werken 2.0 Belgi¨e Licentie is van toepassing op dit werk. Ga naar http://creativecommons.org/licenses/by-nd/2.0/be/ of stuur een brief naar Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, VS om deze licentie te bekijken.
1
Hoofdstuk 2
Benodigde voorkennis 2.1
Benodigde voorkennis Linux
Een goede kennis van systeembeheer onder Linux is noodzakelijk om vlot met deze cursus te kunnen werken.
2.2
Benodigde voorkennis TCP/IP
Om vlot met deze cursus te kunnen werken is een degelijke basiskennis van TCP/IP nodig. Volgende termen zouden niet onbekend mogen zijn: • IP-adres en Netmask • Routering en Gateway • Socket en Poort De werking van TCP/IP valt buiten het bereik van deze cursus. Meer informatie kan je steeds terugvinden op de volgende pagina’s: • http://nl.wikipedia.org/wiki/TCP/IP • http://nl.wikipedia.org/wiki/Internetprotocol • http://nl.wikipedia.org/wiki/Transmission Control Protocol • http://nl.wikipedia.org/wiki/TCP- en UDP-poorten • http://nl.wikipedia.org/wiki/Router
2
Hoofdstuk 3
Instellen van de netwerkkaart(en) 3.1
Inleiding
Ondanks dat vele distrubuties de nodige grafische tools meeleveren om de netwerkkaart in te stellen, focussen we ons hier op het instellen van de netwerkkaart via de CLI daar de meeste systemen via commandline worden beheerd. Een server kan voorzien worden van ´e´en of meerdere NIC’s (Network Interface Card). Onder linux worden deze devices aangesproken via hun logische namen. De eerste netwerkkaart spreek je aan via eth0, de tweede via eth1, etc. Het is zelfs mogelijk om meerdere configuraties aan een kaart toe te wijzen welke je kan aanspreken via /dev/eth0:1, maar daarover verder meer. Om een overzicht te krijgen van al je netwerkkaarten kan je volgende commando uitvoeren:
De logische namen, zoals bijvoorbeeld eth0, zorgen ervoor dat je makkelijk een configuratie kunt doen van je netwerk. Deze logische namen worden in de achtergrond gelinkt aan het MAC-adres van je fysieke netwerkkaart. Dit gebeurt in het bestand /etc/udev/rules.d/70-persistent-net.rules. Een voorbeeld: # # # # #
This file maintains persistent names for network interfaces. See udev(7) for syntax. Entries are automatically added by the 75-persistent-net-generator.rules file; however you are also free to add your own entries.
# PCI device 0x1969:0x1026 (ATL1E) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:23:15:87:72:bd", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" Indien je problemen hebt met de naamgeving van je netwerkkaarten, kan je gerust dit bestand verwijderen en rebooten.
3.3
Instellen van de netwerkkaart
De meeste instellingen voor je netwerkkaart(en) vind je terug in /etc/network/interfaces. Dit bestand kan je eenvoudig bewerken met je teksteditor, maar vergeet niet dat dit steeds met rootrechten moet gebeuren: gunther@server:~$ sudo vim /etc/network/interfaces
3.3.1
Het loopback device
Zelfs indien je geen netwerkkaart in je computer hebt, zal dit bestand toch inhoud hebben. Op elke linux-machine is er steeds het loopback device aanwezig. Hiermee kan de server zichzelf bereiken en kan je makkelijk bepaalde testen uitvoeren. Ook diverse softwarepakketen zullen gebruik maken van dit loopback device om te communiceren met elkaar. Dit is de standaard configuratie hiervoor: gunther@server:~$ cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback Een envoudige ping naar de localhost of naar 127.0.0.1 toont ons dat alles werkt. gunther@server:~$ ping -c 4 localhost
HOOFDSTUK 3. INSTELLEN VAN DE NETWERKKAART(EN) PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64
time=0.053 time=0.287 time=0.209 time=0.266
5
ms ms ms ms
--- localhost ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3017ms rtt min/avg/max/mdev = 0.053/0.203/0.287/0.093 ms gunther@server:~$ ping -c 4 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64
data. time=0.037 time=0.301 time=0.266 time=0.204
ms ms ms ms
--- 127.0.0.1 ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3019ms rtt min/avg/max/mdev = 0.037/0.202/0.301/0.101 ms
3.3.2
DHCP instellen
Nu willen we onze eerste netwerkkaart eth0 instellen met DHCP, dan volstaat het om de volgende regels toe te voegen aan /etc/network/interfaces: # The primary network interface auto eth0 iface eth0 inet dhcp De eerste lijn zorgt ervoor dat de networkinterface eth0 automatisch wordt gestart bij het booten van het systeem. De tweede regel betekent dat de interface (iface) eth0 gebruik maakt van IPv4 (vervang inet door inet6 voor IPv6) en zijn adres krijgt via DHCP. In principe volstaat dit om te kunnen netwerken. Via DHCP zal je server een IP-adres ontvangen, alsook de default gateway en de adressen van de DNS servers.
3.3.3
Statisch IP instellen
Willen we nu bijvoorbeeld een tweede netwerkkaart (er vanuitgaand dat deze aanwezig is in uw computer) toevoegen met een vast IP-adres, dan hebben we iets meer werk. We moeten dan minstens een IP-adres en een netmask instellen. Alle andere instelling zijn optioneel. In /etc/network/interfaces kunnen we bijvoorbeeld de volgende regels toevoegen: # The secondary network interface iface eth1 inet static address 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 #optioneel
HOOFDSTUK 3. INSTELLEN VAN DE NETWERKKAART(EN) network 192.168.1.0 gateway 192.168.1.1
6
#optioneel #optioneel
De betekenis van elke regel zou voor zich moeten spreken. Om deze netwerkkaart te activeren herstart je de computer of gebruik je het volgende commando: gunther@server:~$ sudo ifup eth1
3.3.4
Alias interfaces
Wens je een tweede configuratie toe te kennen aan een netwerkkaart, bvb eth1, dan kan je dit doen door volgende regels op te nemen in /etc/network/interfaces: iface eth1:1 inet static address 192.168.1.101 netmask 255.255.255.0 gateway 192.168.1.1 Indien je met vaste IP-adressen werkt, vergeet dan niet de DNS-servers in te stellen!
3.4
De DNS-servers instellen
Om de DNS-servers in te stellen op een Linux-machine moet je het bestand /etc/resolv.conf aanpassen. Je kan hierin maximum 3 DNS-servers vermelden. Deze worden bij het opzoeken van de domeinnaam overlopen, in de volgorde dat ze zijn opgesomd, tot er een resolve is. Je vermeld deze DNS-servers achter de term nameserver telkens op een nieuwe lijn, in volgorde van belangrijkheid. Je kan achter de term search een zoeklijst opsommen voor het opzoeken van hostnamen. Een nslookup naar www zal, in onderstaande geval, www.example.org opleveren, en indien deze niet bestaat dan www.example.net, enzovoort. Bij de term domain kan je jouw lokale domeinnaam zetten. Let wel op, indien DHCP staat ingesteld op ´e´en van uw NIC’s zal dhclient1 het bestand /etc/resolv.conf overschrijven telkens er een IP-adres wordt opgevraagd. Dit is een voorbeeld van /etc/resolv.conf: gunther@server:~$ cat /etc/resolv.conf domain khk.be search example.org example.net example.com # bij search max. 6 domeinen en max. 256 characters in totaal nameserver 208.67.222.222 nameserver 208.67.220.220 Het opties domain en search zijn wederzijds exclusief. Als beiden voorkomen dan zal enkel de laatste instantie gebruikt worden. Via het commando man resolv.conf kan je meer info vinden. 1 Het
programma verantwoordelijk voor de DHCP-requests
HOOFDSTUK 3. INSTELLEN VAN DE NETWERKKAART(EN)
3.5
7
Routering
Indien je met meerdere interfaces werkt, is het noodzakelijk dat je host weet welk netwerk via welke interface bereikt kan worden. En indien een pakket niet voor ´e´en van de aangesloten netwerken is, moet je weten via welke andere host het pakket kan gestuurd worden om het toch nog op de bestemming te krijgen. Dit is de zogenaamde route-informatie of “IP routing table”. Deze tabel wordt samengesteld door de kernel en kan gemanipuleerd worden met de commando route. Indien je dit commando gebruikt zonder opties wordt de huidige routetabel weergegeven. gunther@server:~$ route Kernel IP routing table Destination Gateway 10.0.0.0 * 192.168.1.0 * link-local * 172.16.0.0 * default 10.0.0.1 gunther@server:~$
Zoals reeds gezegd kan je deze tabel ook aanpassen. Volgend commando zal een statische route toevoegen naar het 192.168.2.0 netwerk via de host 192.168.1.100: gunther@server:~$ sudo route add -net 192.168.2.0 gw 192.168.1.100 De default gateway kan je instellen met volgende commando: gunther@server:~$ sudo route add default gw 192.168.1.1 Bij een volgende reboot zullen deze regels verdwenen zijn. Je kan deze persistent maken door ze bijvoorbeeld op te nemen in je initialisatie scripts. Hoe je dit doet, valt buiten de cursus.
Hoofdstuk 4
DNS [4, 5, 2]
4.1
Inleiding
Het Domain Name System (DNS) is een systeem en protocol dat op zowel het internet als het intranet gebruikt wordt. Alle domeinnamen en IP-adressen staan daarbij in een soort database en een DNS-server matcht deze gegevens. Daardoor kan je een computer niet alleen via het IP-adres benaderen, maar ook via zijn “fully qualified domain name (FQDN)”. Het omgekeerde is ook mogelijk, een IP-adres wordt daarbij gematcht met een FQDN. Dit noemt men “reverse DNS”. De “Berkeley Internet Name Domain” ofwel “BIND” is de meest gebruikte DNS-server en wordt ondersteund door het Internet Software Consortium (www.isc.org).
4.2
Over DNS: de theorie
Voor je aan de configuratie van een DNS-server begint, is het best om eerst de syntax die gebruikt wordt in de zonefiles te begrijpen.
4.2.1
Resource Records
De DNS-data wordt opgeslagen in ’resource records’. Zo’n ’resource records’ kan bijvoorbeeld een DNS-naam koppelen aan een IP-adres. Elk resource record wordt op ´e´en regel geschreven en bevat meerdere velden. De syntax is de volgende: [name] [ttl] [class] type data Let op: deze syntax is specifiek voor de Resource Records in de configfiles van de zones. De volgorde van deze velden in de effectieve datapakketten, die verzonden worden over het netwerk, is anders. De betekenis van deze velden is: 8
HOOFDSTUK 4. DNS
9
name Een name-veld beschrijft de entiteit (host of domein) die het record beschrijft. Wanneer verschillende opeenvolgende records verwijzen naar dezelfde entiteit, kan de naam weggelaten worden na het eerste record. Het name-veld moet, indien het aanwezig is, altijd in de eerste kolom staan. Dit veld kan ofwel absoluut ofwel relatief zijn. Absolute paden eindigen met een punt en zijn volledig. Bij relatieve namen wordt de huidige ’domain name’ toegevoegd op het einde. Voorbeeld: www.khk.be.
3600
IN
A
193.190.63.155
Uitleg: Het eerst veld heeft de waarde ”www.khk.be”, dus deze record gaat over het absolute pad www.khk.be ofwel dus de webserver van de KHK.
ttl Time To Live, dit veld beschrijft hoe lang - in seconden - een data item kan gecached worden door een resolver en nog als geldig beschouwd worden. Meestal wordt er een default waarde genomen voor de volledige zone via de richtlijn $TTL, welke bovenaan de configfile moet staan om effect the hebben op alle andere Resource Records. Deze $TTL geldt dan voor elke Resource Record waar geen explicite ’ttl’ wordt vermeld. Als je de waarde zet, zet ze dan op enkele dagen tot weken[3]. Voorbeeld: www.khk.be.
3600
IN
A
193.190.63.155
Uitleg: In ons voorbeeld staat de ttl voor de record met de naam www.khk.be op 3600, omgerekend is dit dus 1 uur.
class De class directive specifieert het type netwerk. Er zijn 3 verschillende opties mogelijk • IN voor internet • CH voor ChaosNet • HS voor Hesiod Chaosnet is een obsolet netwerk protocol dat vroeger gebruikt werd door Symbolics Lisp machines. Hesiod is een database service die gebouwd is bovenop BIND. De default waarde is IN. Hoewel het niet nodig is een waarde te defini¨eren als je gebruik wil maken van IN, wordt het meestal toch gedaan. Voorbeeld: www.khk.be.
3600
IN
A
193.190.63.155
HOOFDSTUK 4. DNS
10
type Hier plaats je het type van record. Zie hiervoor het hoofstuk over Record Types. Voorbeeld: www.khk.be.
3600
IN
A
193.190.63.155
Uitleg: Dit record zal de naam ”www.khk.be” koppelen aan het ip-adres ”193.190.63.155” door de vermelding van het juist type ”A”, wat staat voor ”Address”.
data In dit veld komt een IP adres of een domeinnaam. Ook dit veld kan ofwel absoluut ofwel relatief zijn. Absolute paden eindigen met een punt en zijn volledig. Bij relatieve namen wordt de huidige domain name toegevoegd op het einde. Voorbeeld: www.khk.be.
3600
IN
A
193.190.63.155
Uitleg: De data in het record met de naam ”www.khk.be” is een ip-adres, namelijk ”193.190.63.155”. Deze bovenstaande velden, ’name’, ’ttl’, ’class’ en ’type’, worden telkens gescheiden door een witruimte, spatie of tab. De velden kunnen ook speciale karakters bevatten: ; @ () ∗
4.2.2
Wordt gebruikt om commentaar aan te geven. Alles wat volgt na een ; wordt niet meer ge¨ınterpreteerd. Is een verwijzing naar de huidige domain name. Dit laat je toe om data te verspreiden over meerdere regels. Is een wild card, enkel te gebruiken in het name veld.
Record Types
Zoals hierboven vermeld is ´e´en van de velden uit een ’resource record’ het type veld. Dit zijn enkele veel gebruikte record types met hun korte beschrijving. Type SOA NS A AAAA PTR MX CNAME TXT
Naam Start Of Authority Name Server IPv4 adres IPv6 adres PoinTeR Mail eXchanger Canonical NAME TeXT
Functie Definitie van een dns zone Identificeert de zone server en delegeert de subdomeinen Naam naar adres vertaling Naam naar IPv6 adres vertaling Adres naar naam vertaling Een e-mail-server voor het domein Nicknames of alias voor een host Commentaar en informatie
HOOFDSTUK 4. DNS
11
A-record of Address record Korte omschrijving: Verwijzing naar een IP-adres Mogelijke waarde: Geldig IPv4 adres Een A record definieert de IP-adressen van hosts en andere netwerkapparaten. Het patroon van een IP-adres is bijvoorbeeld 10.0.40.23. De meeste hosts hebben 1 IP-adres en zullen dan ook 1 A-record hebben. Routers of diverse servers hebben vaak meerdere netwerkkaarten en dus ook meerdere IP-adressen. Voor deze hosts kunnen er dan ook meerdere A-records aangemaakt zijn. Voorbeeld: server1 server1
IN IN
A A
10.0.1.5 10.0.1.6
AAAA-record Korte omschrijving: Verwijzing naar een IPv6-adres Mogelijke waarde: Geldig IPv6 adres Een AAAA-record is het IPv6-equivalent van een A-record en definieert de IPv6-adressen van hosts en andere netwerkapparaten die gebruik maken van het IPv6-protocol. Het patroon van een Ipv6-adres is bijvoorbeeld fe80:0:0:0:0:0:a00:2817. Voorbeeld: www.isc.org.
IN
AAAA
2001:4f8:0:2::d
CNAME of Canonical NAME Korte omschrijving: Alias naar een andere hostname Mogelijke waarde: Geldige hostname Een CNAME record is een alias voor een ander DNS record en verwijst dus naar een andere volwaardige hostname. Een voorbeeld van een vaak voorkomende CNAME is www: deze verwijst dan naar bijvoorbeeld de webserver van de domeinnaam. Wanneer het domein example.com is geregistreerd en voor server.example.com is er een A-record, kan je bijvoorbeeld een CNAME aanmaken van www.example.com. Dit is dan een alias voor webserver.example.com. Daarna kan je ook makkelijk nieuwe functies koppelen aan deze server, zoals bijvoorbeeld ftp. Voorbeeld: server www ftp
IN IN IN
A CNAME CNAME
10.0.1.5 server server
Beperkingen: Gebruik geen CNAMEs in combinatie met Resource Records welke verwijzen naar andere namen zoals MX, CNAME, PTR and NS. Dit wordt bijvoorbeeld sterk afgeraden: @
IN
MX
mailhost
HOOFDSTUK 4. DNS mailhost mailserver
IN IN
12 CNAME A
mailserver 10.0.0.4
; fout ; fout
CNAME records die naar een ander CNAME record verwijst, moet vermeden worden. Dit zou tot loops kunnen leiden, bijvoorbeeld: foo.example.com. bar.example.com.
IN IN
CNAME CNAME
bar.example.com. foo.example.com.
; fout ; fout
MX Korte omschrijving: Definieert een mailserver Mogelijke waarde: Bestaand A-record Prioriteit: Lage waarde is hoge prioriteit Het MX (Mail eXchanger) record definieert waar e-mail van het domein moet worden bezorgd. Een standaard verzonden mail gaat doorgaans van een e-mailclient naar een SMTP-server. Deze leest vervolgens de MX-records van het domein in het e-mailadres. Met het e-mailadres [email protected] wordt dus het MX-record voor het domein khk.be doorzocht. Een MX-record bevat twee soorten informatie: de preferentie en de domeinnaam van de mailserver. De preferentie (voorkeur) wordt opgegeven in het priority-veld en geeft aan naar welke server het eerst gezocht zal worden. Alle mailservers moeten een corresponderend A-record hebben. Voorbeeld: @ @ mail mail2
NS Korte omschrijving: Definieert de nameservers Mogelijke waarde: Geldige nameservers Dit record geeft de IP-adressen van een NameServer terug voor een bepaald domein of een subdomein. Elk domein heeft minimaal twee NS-records. De NS-records worden gebruikt om een set van authoritative nameservers te defini¨eren voor een bepaalde zone. Dit zijn de servers die worden aangesproken door resolvers en niet-authoritative nameservers die informatie willen hebben over een zone of domein. Als een nameserver authoritative is voor een domein zal de nameserver een A-record voor het domein bevatten. Wanneer een nameserver niet authoritative is voor een bepaald domein, zal de nameserver een NS-record en een A-record bevatten met een IP-adres of domein naar een andere nameserver. Voorbeeld: @ @ ns1.example.org. ns2.example.org.
SOA Korte omschrijving: Belangrijke informatie over de DNS-zone Mogelijke waarde: Vast patroon Het SOA-record (Start Of Authority) geeft aan welke nameserver autoriteit heeft over een zone en bevat informatie die voornamelijk voor slave nameservers van belang is. Dit record wordt altijd als eerste record in een zonefile opgenomen. SOA-gegevens worden per domeinnaam opgegeven in het patroon van: <email> <serial> <expire> <minimum>. De velden van een SOA-record hebben de volgende betekenis: • Nameserver: De naam van de master nameserver • Email: Het e-mailadres van de beheerder, met de apenstaart (@) vervangen door een punt • Serial: Dit is het serienummer van de zonefile. Wanneer het serienummer verhoogd wordt, zal de master de zonefile opnieuw inlezen na een reload, en de slaves zullen een zonetransfer doen. Bij elke wijziging in een zonefile zal dit SOA-record worden aangepast. • Refresh: Dit is het tijdsinterval waarin een slave nameserver bij de master controleert of het serienummer verhoogd is. • Retry: Als de master nameserver onbereikbaar was bij de laatste controle van het serienummer, dan gaat de slave het opnieuw proberen na dit tijdsinterval • Expire: Als de master nameserver zo lang down is geweest als aangegeven in expire, dan verwijdert de slave de zone • Minimum: Minimale TTL (time to live). Voorbeeld: @
postmaster.example.com. ( serial number refresh [1h] retry [10m] expire [1d] min TTL [1h]
TXT Korte omschrijving: Accepteert leesbare tekst Mogelijke waarde: Vrije waarde (max. 255 tekens) In een TXT-record (TeXT) kunnen gegevens worden opgeslagen die niet door een computer gebruikt kunnen worden, maar wel leesbaar zijn voor gewone gebruikers. In de praktijk worden TXT-records echter ook gebruikt om extra functionaliteit aan het DNS toe te voegen, denk bijvoorbeeld aan SPF1 . Voorbeeld: @
IN 1 Sender
TXT
Policy Framework
"Deze DNS server draait linux."
HOOFDSTUK 4. DNS
4.3
14
Installatie
De installatie van de DNS-server BIND9 is erg eenvoudig: sudo apt-get install bind9
4.4
configuratie
Er zijn veel manieren om BIND9 te configureren. De meest voorkomende configuraties zijn als caching nameserver, als primaire master en als secundaire master. • Geconfigureerd als caching nameserver, zal BIND9 het antwoord op een vraag opzoeken bij en andere nameserver en dit antwoord onthouden. Zo kan er nadien snel terug een antwoord gegeven worden aan de clients. • Een ’primary master server’ zal de dns-gegevens van een zone uit een file lezen als hij voor deze zone verantwoordelijk is. • Een ’secondary master server’ zal de dns-gegevens van een zone krijgen van een andere naamserver die verantwoordelijk is voor deze zone. Een doorsnee naamserver zal tegelijkertijd als caching name server, primary master en secondary master (kunnen) geconfigureerd worden. Zo’n server zal dan verantwoordelijk zijn voor een zone, meestal het eigen domein, secondary service voorzien voor een andere zone, bvb een klant of dochteronderneming, als aan caching doen voor het lokale LAN. In dit hoofdstuk behandelen we enkel een caching name server en een primary master nameserver.
4.4.1
Algemene configuratie
De DNS configuratie bestanden kan je terugvinden onder de directory /etc/bind. Het belangrijkste bestand is /etc/bind/named.conf waarvan dit de inhoud is: // // // // // // //
This is the primary configuration file for the BIND DNS server named. Please read /usr/share/doc/bind9/README.Debian.gz for information on the structure of BIND configuration files in Debian, *BEFORE* you customize this configuration file. If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; De include-regels uit deze configfile zullen de inhoud uit de andere vermelde configfiles opnemen. Deze opsplitsing zorgt voor eenvoudigere configfiles. /etc/bind/named.conf.options beschrijft algemene opties van je nameserver.
HOOFDSTUK 4. DNS
15
/etc/bind/named.conf.local bevat de zones waar je server verantwoordelijk voor is. /etc/bind/named.conf.default-zones We zien onder /etc/bind nog enkele andere files. De belangrijkste is: /etc/bind/db.root In dit bestand staan de root nameservers uit de wereld. Deze servers veranderen al eens, dus dit bestand moet ook aangepast worden. Dit gebeurt meestal met de updates van je pc, maar kan ook handmatig of automatisch via cron gedaan worden.
4.4.2
Caching Nameserver
De standaard configuratie van BIND9 is ingesteld om op te treden als een caching server. Het enige dat nog nodig is, is simpelweg het toevoegen van de IP-adressen van de DNS-servers van je ISP’s. Dit kan in het bestand /etc/bind/named.conf.options: forwarders { 8.8.8.8; 208.67.220.220; }; Vergeet niet je server te herstarten: sudo /etc/init.d/bind9 restart Indien je geen forwarders instelt, zal er rechtstreeks met de root-servers gecommuniceerd worden.
4.4.3
Primary Master
Om een nameserver in te stellen als een Primary Master moeten we drie zaken doen: • Via het bestand /etc/bind/named.conf.local je server laten weten voor welke zone hij verantwoordelijk is. • Een zonefile aanmaken voor deze zone. • Een reverse-file aanmaken voor deze zone. We zullen deze procedure volgen voor het domein example.org. Vervang dit gerust met je eigen domeinnaam. Binnen deze zone zullen we enkele voorbeeld hosts toevoegen.
De server instellen Plaats onderaan in het bestand /etc/bind/named.conf.local de volgende regels: zone "example.org" { type master; file "/etc/bind/db.example.org"; };
HOOFDSTUK 4. DNS
16
Dit zone-statement defineert de zone example.org. Bij type staat master. Dit zorgt ervoor dat de nameserver verantwoordelijke is voor deze zone. Dit mag je enkel doen als de zone-file op dit systeem staat. Dit wordt gerealiseerd met de optie file. Hierachter staat het zone-bestand /etc/bind/db.example.org waar de configuratie van deze zone zal terechtkomen.
Zonefile aanmaken Maak het bestand /etc/bind/db.example.org aan met de volgende inhoud: ; ; BIND data file for example.og ; $TTL 604800 ; @ IN SOA ns1.example.org. postmaster.example.org. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.org. @ IN NS ns1.example.org. @ IN A 10.0.0.1 @ IN AAAA fe80:0:0:0:0:0:a00:1 ; Nameservers ns1 IN A 10.0.0.1 ns2 IN A 10.0.0.2 ; Webservers amelie IN A 10.0.0.1 anna IN A 10.0.0.2 ; Round Robin DNS for webserver www IN A 10.0.0.1 www IN A 10.0.0.2 ; Mail servers IN MX 10 mail.example.org. IN MX 20 mail2.example.org. mail IN A 10.0.0.5 mail2 IN A 10.0.0.6 mail IN TXT "This is the main mail server" mail2 IN TXT "This is the backup mail server" ; Aliases ftp IN CNAME anna smtp IN CNAME mail pop3 IN CNAME mail
Het bovenstaande is een eenvoudig maar gebruikelijk voorbeeld. Enkele bemerkingen: 1. Een zone-file bestaat uit commentaar, directives en resource records. 2. Commentaar start met een ; (puntkomma) vanaf het begin, of van ergens in een regel, en loopt tot het einde van de regel.
HOOFDSTUK 4. DNS
17
3. Een directive start steeds met een ’$’. De enige directive die hier gebruikt wordt is $TTL[2]. Deze directive zorgt ervoor dat er voor elke resource record een standaard ttl wordt ingesteld. Andere mogelijke directives zijn $ORIGINE, $INCLUDE en $GENERATE. Deze $TTL directive moet steeds boven het eerste resource record staan. 4. Het eerste Resource Record moet het SOA (Start of Authority) record zijn. 5. Daarna volgen er verschillende resource records. De juiste betekenis hiervan is in het begin van dit hoofdstuk uitgelegd. Vergeet geen restart te doen van je DNS-server met sudo /etc/init.d/bind9 restart om je nieuwe configuratie te testen. Dit kan je bijvoorbeeld met dig doen.
Reverse Nu dat de zone is ingesteld en het omzetten van namen naar IP-adressen lukt, is ook een reverse zone vereist. Zo’n reverse DNS-zone zorgt ervoor dat een IP-adres kan omgezet worden naar een naam. Hiervoor bewerk je /etc/bind/named.conf.local en voeg je de volgende regels toe: zone "0.0.10.in-addr.arpa" { type master; notify no; file "/etc/bind/db.10.0.0"; }; Maak nu deze file /etc/bind/db.10.0.0 aan, en plaats er volgende inhoud in: ; ; BIND reverse data file for example.org ; $TTL 604800 @ IN SOA ns1.example.org. postmaster.example.org. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1 @ IN NS ns2 1 IN PTR amelie.example.org. 2 IN PTR anna.example.org. 5 IN PTR mail.example.org. 6 IN PTR mail2.example.org. Deze file zou voor zich moeten spreken.
HOOFDSTUK 4. DNS
4.5 4.5.1
18
Testen Het commando dig
Niet enkel om informatie bij een DNS-server op te vragen, maar zeker ook om je eigen DNS-server te testen is dig2 een ideaal hulpmiddel. Met deze flexibele tool kan je DNS lookups doen, dit is het opvragen van informatie, en krijg je erg leesbare resultaten te zien van de DNS-server die werd ’gequeried’. De standaard syntax van dig is dig [@server] [name] [type] Daarbij is: server de naam, IPv4-adres of IPv6-adres van de DNS-server die je wil raadplegen. Indien je het server argument niet meegeeft in het comando dig, zal de DNS-server die staat ingesteld in /etc/resolv.conf gebruikt worden. name is de naam van het resource record dat we zoeken. Enkele voorbeelden: www.khk.be, webmail.khk.be, mail.khk.be, ns.khk.be, khk.be, .... type geeft het type van query mee dat je wenst op te zoeken. Denk daarbij aan ANY, A, MX, TXT, AAAA, etc. Indien je het type niet meegeeft in het comando dig, zal standaard naar de A records gevraagd worden. Wanneer je dig zonder argumenten of opties uitgevoert, zal er een NS query worden uitgevoerd voor ”.”, de root van het DNS-systeem. gunther@desktop:~$ dig ; <<>> DiG 9.7.0-P1 <<>> ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41211 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 516764 IN NS F.ROOT-SERVERS.NET. . 516764 IN NS L.ROOT-SERVERS.NET. . 516764 IN NS D.ROOT-SERVERS.NET. . 516764 IN NS C.ROOT-SERVERS.NET. . 516764 IN NS A.ROOT-SERVERS.NET. . 516764 IN NS J.ROOT-SERVERS.NET. . 516764 IN NS E.ROOT-SERVERS.NET. . 516764 IN NS I.ROOT-SERVERS.NET. . 516764 IN NS G.ROOT-SERVERS.NET. 2 domain
Dit commando zal je het ip-adres geven van de webserver www.khk.be, of beter gezegd: wat is het A record voor de pc met de hostname www, binnen de zone khk.be. Dit is dus 193.190.63.155. Zoals je onderaan in de uitvoer kan zien, werd deze query uitgevoerd op de DNS-server met het ipadres 208.67.222.222. Dit is namelijk de DNS-server die staat ingesteld in /etc/resolv.conf. Je kan deze query ook uitvoeren op een DNS-server van je eigen keuze: gunther@desktop:~$ dig @8.8.8.8 www.khk.be ; <<>> DiG 9.7.0-P1 <<>> @8.8.8.8 www.khk.be ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31609
HOOFDSTUK 4. DNS
20
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.khk.be. IN A ;; ANSWER SECTION: www.khk.be. 3600 IN A 193.190.63.155 ;; ;; ;; ;;
Hierbij worden dezelfde gegevens opgrevraagd, maar nu bij een adere dns-server, namelijk 8.8.8.8. Je kan onderaan ook in het antwoord zien, dat deze DNS-server heeft geantwoord. Je kan hier dus bijvoorbeeld ook localhost of 127.0.0.1 gebruiken, om je lokale DNS-server te testen. We kunnen nu ook in een zone specifieke informatie beginnen te zoeken. gunther@desktop:~$ dig @8.8.8.8 khk.be NS ; <<>> DiG 9.7.0-P1 <<>> @8.8.8.8 khk.be NS ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14100 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;khk.be. IN NS ;; ANSWER SECTION: khk.be. 3559 IN NS ns.khk.be. khk.be. 3559 IN NS ns.belnet.be. ;; ;; ;; ;;
Door de vermelding NS te maken achteraan het commando, vragen we dus de NS records op, we willen dus weten welke nameservers verantwoordelijk zijn voor de zone khk.be. We krijgen in het antwoord de hostnames te zien van de verantwoordelijke naamservers voor deze zone, namelijk ns.khk.be en ns.belnet.be. Zo kunnen we voor een zone ook kijken welke server(s) de email afhandelen. We vragen dan de MX records op. gunther@Dragonfly:~$ dig khk.be MX ; <<>> DiG 9.7.0-P1 <<>> khk.be MX
Blijkbaar is er voor de zone khk.be ´e´en mailserver voorzien, namelijk mailhost.khk.be. Het ip-adrs van deze machine kunnen we eenvoudigweg opvragen met dig mailhost.khk.be A. We kunnen in plaats van NS en MX ook andere type records opvragen, zoas bijvoorbeeld SOA, TXT, AAAA, ... . Als je ANY vermeld, zal je, indien gedefinierd in de zone, de records van het type SOA, NS, MX en SPF ontvangen. Maar met dig is het ook mogelijk om een ip-adres aan een naam te linken. Hiervoor gebruikt je dig -x met vermelding van het ip-adres dat je wenst op te zoeken. gunther@desktop:~$ dig -x 193.190.63.163 ; <<>> DiG 9.7.0-P1 <<>> -x 193.190.63.163 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3908 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;163.63.190.193.in-addr.arpa. IN PTR ;; ANSWER SECTION: 163.63.190.193.in-addr.arpa. 0 IN CNAME 163.khk.63.190.193.in-addr.arpa. 163.khk.63.190.193.in-addr.arpa. 7182 IN PTR subversion.khk.be. ;; ;; ;; ;;
DHCP Opmerking: het testen van een DHCP-server gebeurt best ofwel binnen een testnetwerk, ofwel binnen een virtuele omgeving, beiden daartoe ingericht, om problemen te voorkomen op het productienetwerk!
5.1
Inleiding
Het Dynamic Host Configuration Protocol (DHCP) is een netwerkservice die er voor zorgt dat clientcomputers automatisch de netwerksettings zoals bijvoorbeeld een IP-adres krijgen van een server. De volgende gegevens kunnen oa. ter beschikking gesteld worden door de DHCP server aan de DHCP clients: • IP-Address • Netmask • DNS • WINS • Host Name • Domain Name • Default Gateway • Time Server • Print Server • ... Het voordeel van DHCP is dat veranderingen op het netwerk enkel op de DHCP server moeten aangepast worden. Nieuwe clients zijn ook makkelijker te integreren in het bestaande netwerk zonder al teveel conflicten met netwerksettings. Een DHCP server kan op drie manieren gegevens voorzien: 22
HOOFDSTUK 5. DHCP
23
dynamic allocation: Je geeft een bereik (ook wel pool, range of scope genoemd) van IP-adressen aan je DHCP-server, en elke client computer op het LAN krijgt hieruit een IP-adres tijdens de initialisatie van het netwerk. Deze lease geldt voor een vooraf ingestelde periode. Wanneer de DHCP client niet langer is aangesloten op het netwerk komt zijn configuratie vrij en is deze terug, vanuit de adrespool, vrij voor andere DHCP-clients. automatic allocation: Dit is hetzelfde als dynamic allocation, maar de DHCP-server houdt een tabel bij met waarin de in het verleden reeds uitgedeelde IP-adressen, zodat de server eventueel een zelfde IP-adres terug kan toewijzen aan een gekende clint die terug aansluit op het netwerk. static allocation: De DHCP-server wijst een IP-adres toe, op basis van een tabel met MACadres / IP-adres paren, die handmatig werden ingevuld. Alleen aanvragen van een clients met een MAC-adres in deze tabel, zullen een IP-adres krijgen. Deze methoden kunnen ook gecombineerd worden met elkaar.
5.2
Installatie
Er zijn verschillende DHCP servers beschikbaar voor UNIX-achtige OSen, zowel commerci¨ele als vrij ter beschikking. E´en van de meest populaire vrije DHCP servers is Paul Vixie/ISC DHCPd (verder DHCPD-server genoemd). Momenteel is de laatste versie 4.1.1, welke IPv6 ondersteund, maar vele distrubuties voorzien nog versie 3.1.x, welke enkel IPv4 ondersteund. Deze laatste wordt hier behandeld. Indien je handmatig wil installeren kan je terect op website https://www.isc.org/software/dhcp. Maar de meeste distributies voorzien in een eenvoudige installatie van dhcpd, en dit is de meest aangewezen manier om te installeren. Gebruik hiervoor het volgende commando: gunther@server:~$ sudo apt-get install dhcp3-server Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd De status informatie wordt gelezen... Klaar <snip> De volgende NIEUWE pakketten zullen genstalleerd worden: dhcp3-server <snip> Instellen van dhcp3-server (3.1.2-1ubuntu7.1) ... Generating /etc/default/dhcp3-server... * Starting DHCP server dhcpd3 invoke-rc.d: initscript dhcp3-server, action "start" failed. gunther@server:~$
Dat de installatie eindigt met een fout is normaal, het zou niet aangewezen zijn dat de dhcpserver zomaar zou starten zonder de juiste configuratie. De reden dat er geen default configuratie
HOOFDSTUK 5. DHCP
24
aanwezig is, is puur voor de veiligheid van je netwerk, anders zouden er standaard al (onjuiste) IP-adressen uitgedeeld worden, of conflicten onstaan met een eventuele andere DHCP-server. We moeten na de installatie twee zaken doen: • Zorgen dat DHCPD op de juiste interface luisterd naar binnenkomende requests. • Een juiste configuratie-file aanmaken.
5.3
Koppelen aan een netwerkinterface
Een server kan meerder netwerkkaarten hebben. Vandaar dat we eerst moeten instellen op welke interfaces DHCPD moet luisteren naar binnenkomende requests. Dit gebeurd in het bestand /etc/default/dhcp3-server. De default inhoud van dit bestand kan je hieronder vinden: gunther@server:~$ cat /etc/default/dhcp3-server # Defaults for dhcp initscript # sourced by /etc/init.d/dhcp # installed at /etc/default/dhcp3-server by the maintainer scripts # # This is a POSIX shell fragment # # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="" Zoals je ziet, momenteel zal dhcpd niet starten, daar er nog geen netwerkinterface is toegewezen. Om ervoor te zorgen dat geluisterd wordt op de interface /dev/eth0, verander je de laatste regel uit /etc/default/dhcp3-server in de volgende: INTERFACES="eth0" Je kan meerdere interfaces opgeven door ze te scheiden met een spatie. Je kan DHCPD proberen te starten met het commando sudo /etc/init.d/dhcp3-server start maar dit zal niet lukken. Je zal een hoop foutmeldingen kunnen lezen in /var/log/syslog waaruit blijkt dat we het configuratiebestand van DHCPD nog moeten instellen.
5.4
Basisconfiguratie DHCPD
De configuratie gebeurt in het bestand /etc/dhcp3/dhcpd.conf. Bekijk onderstaande voorbeeld config-file, dit geeft een eerste indruk op de basis werking van DHCPD. De meeste opties spreken voor zich: # Voorbeeld configuratie bestand voor dhcpd
authoritative; log-facility local7; subnet 10.0.0.0 netmask 255.255.255.0 { } subnet 10.0.1.0 netmask 255.255.255.0 { range 10.0.1.50 10.0.1.99; option subnet-mask 255.255.255.0; option broadcast-address 10.0.1.255; option routers 10.0.1.1, 10.0.1.2; } Uitleg over de gebruikte configuratie opties: ddns-update-style: Met deze optie kan je de DHCP-server vragen een DNS-server bij te werken als het IP adres van een client in uw netwerk is veranderd. domain-name: Dit wordt de default domeinnaam voor de clients in het netwerk. domain-name-servers: Dit vertelt de DHCP-server welke DNS-servers moet doorgestuurd worden aan een DNS-client. Je kan meer dan ´e´en DNS-server opgeven door ze te scheiden met een komma. default-lease-time: De client zal het IP-adres leasen voor 600 seconden (10 minuten). max-lease-time: Dit kan verlengd worden tot 7200 seconden (2 uur). authoritative: Indien je DHCP-server de verantwoordelijke is op je netwerk - zoals bijna altijd het geval is - of onderdeel van een failover-paar, dan moet je deze optie vermelden.[1] log-facility: Deze optie zorgt voor de logging, welke via syslog gaat. subnet: Het subnet waarvoor de instellingen gelden. netmask: Het netmasker van het subnet. range: De pool van IP-adressen die de DHCP-server kan toewijzen. In ons voorbeeld is het van 10.0.1.50 tot en met 10.0.1.99, dus 50 IP-adressen. option subnet-mask: Het netmasker gebruiken dat de clients dienen te gebruiken. option broadcast-address: Het broadcast-adres dat de clients dienen te gebruiken. option routers: De gateway(’s) die de clients dienen te gebruiken. In ons geval is dit 10.0.1.1 en 10.0.1.2. We hadden hier eventueel ook een FQDN kunnen gebruiken, bijvoorbeeld ’router1.example.org’. Meerdere waarden worden gescheiden door een komma.
HOOFDSTUK 5. DHCP
26
Er is ook een optie subnet 10.0.0.0 netmask 255.255.255.0 { } vermeld in het voorbeeld configuratiebestand. Het is namelijk zo dat, als een DHCPD-server aan meerdere netwerken aangesloten is, je voor elke interface een melding maakt. Zo krijgt DHCPD immers een zicht op de netwerkstructuur. De DHCPD-server kan nu gestart worden. gunther@server:/$ sudo /etc/init.d/dhcp3-server start * Starting DHCP server dhcpd3
5.5
[ OK ]
DHCPD testen
Om na te gaan of de dhcpd server draait, kan je het volgend commando gebruiken: gunther@server:~$ sudo ps auwx | grep dhcpd dhcpd 5496 0.0 0.4 3844 1776 ? Ss 17:53 0:00 /usr/sbin/dhcpd3 -q -pf /var/run/dhcp3-server/dhcpd.pid -cf /etc/dhcp3/dhcpd.conf eth1 Ook het commando netstat -uap geeft informatie over de werking van dhcpd: gunther@server:~$ sudo netstat -uap Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address udp 0 0 *:bootps *:*
Om nu te kijken welke leases zijn uitgedeeld op het netwerk, kan je volgend commando gebruiken: gunther@server:~$ cat /var/lib/dhcp3/dhcpd.leases # The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-V3.1.1 lease 192.168.0.100 { starts 4 2009/05/28 14:00:33; ends 4 2009/05/28 14:10:33; cltt 4 2009/05/28 14:00:33; binding state active; next binding state free; hardware ethernet 08:00:27:c1:73:2b; client-hostname "client1"; }
HOOFDSTUK 5. DHCP
27
De logging van de dhcpd-server gebeurd via syslog. Kijk dus in de logfiles als er iets niet werkt naar behoren. Je kan dit bijvoorbeeld doen met volgend commando: tail -f /var/log/syslog | grep dhcpd
5.7
Niveaus in DHCP-opties
De opties uit het configuratiebestand van DHCPD kunnen toegepast worden 1. per host; 2. per groep hosts; 3. per subnet; 4. per gedeeld netwerk; 5. globaal. Indien bijvoorbeeld meerdere computers dezelfde gegevens met elkaar delen, loont het de moeite daarvoor een host-group te maken. In dit hoofdstuk worden deze niveaus toegepast in de verschillende voorbeelden.
5.8
DHCP-relay-agent
Om een DHCP-request succesvol te laten verlopen, is het nodig dat de DHCP-server zich op hetzelfde netwerksegment bevindt als de client. Is dit niet het geval, dan kan er op de tussenliggende router gebruik gemaakt worden van een DHCP relay-agent. Dit is een stukje software dat in staat is een DHCP-request door te sturen naar een DHCP-server op een ander netwerk. Het onderstaande commando zorgt op een Linux-server voor dat pakketjes die binnenkomen op interface eth1 worden doorgestuurd naar de DHCP-server die zich bevindt op adres 192.168.123.2: dhcrelay -i eth1 192.168.123.2
5.9
’Failover’ DHCP-server
Aanpassingen op de eeste DHCP-server: In /etc/dhcp3/dhcpd.conf plaatsen we volgende # Primary DHCP server authoritative; ddns-update-style none; failover peer "dhcp-failover" {
HOOFDSTUK 5. DHCP primary; address 192.168.0.3; port 647; peer address 192.168.0.4; peer port 647; max-response-delay 30; # seconden load balance max seconds 3; # disable loadbalance na 3 seconden mclt 1800; # max client lead time van 30 minuten split 128; # elke peer de helft van de leases } subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.254; option domain-name-servers 192.168.0.1; pool { failover peer "dhcp-failover"; max-lease-time 1800; # 30 minuten range 192.168.0.100 192.168.0.200; } } Aanpassingen op de tweede DHCP-server: # Secondary DHCP server authoritative; ddns-update-style none; failover peer "dhcp-failover" { primary; address 192.168.0.4; port 647; peer address 192.168.0.3; peer port 647; max-response-delay 30; max-unacked-updates 10; load balance max seconds 3; } subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.254; option domain-name-servers 192.168.0.1; pool { failover peer "dhcp-failover"; max-lease-time 1800; # 30 minuten range 192.168.0.100 192.168.0.200; } }
28
HOOFDSTUK 5. DHCP
29
Herstart op beide server de DHCPD-service met /etc/init.d/dhcp3-server restart.
5.10
Meer configuratie opties
5.10.1
Logging
We zagen dat in de configfile een regel staat met betrekking tot de logging, namelijk: log-faciliteit local7; Voorlopig komen daarmee de meldingen terecht in /var/log/syslog. Vanuit de systeemlogging, kan je acht ”log-faciliteiten”gebruiken voor lokale toepassingen, local0 tot en met local7 genaamd. We kiezen hier local7, deze wordt nog niet door een andere toepassing gebruikt en is dus nog vrij. Plaats volgende regel in /etc/rsyslog.d/50-default.conf: local7.*
/var/log/dhcpd.log
De * zorgt ervoor dat alle gebeurtenissen gelogd worden, ongeacht hun niveau. De locatie van het logbestand waar de gebeurtenissen naar geschreven worden, is /var/log/dhcpd.log. Vergeet niet de systemlogging te herstarten met het commando sudo restart rsyslog.
5.10.2
Een vast IP-adres koppelen aan een host
Indien je een host telkens het zelfde IP-adres wil laten krijgen kan je daarvoor de volgende configuratie opnemen in /etc/dhcp3/dhcpd.conf: group { # group specifieke opties default-lease-time 86400; max-lease-time 604800; host AP_KHK_1.khk.be { hardware ethernet 00:80:4f:13:57:f7; fixed-address 192.168.0.50; } host AP_KHK_2.khk.be { hardware ethernet 00:80:4f:13:57:f8; fixed-address 192.168.0.51; } } De accesspoints uit dit voorbeeld zullen steeds het zelfde IP-adres krijgen.
HOOFDSTUK 5. DHCP
5.10.3
30
Andere opties te bekijken
Als je een WINS server voor je Windows clients wenst mee te sturen, gebruik je volgende optie in /etc/dhcp3/dhcpd.conf: option netbios-name-servers 192.168.0.3; Als je een Time server wil meegeven naar de clients, gebruik je de volgende optie: option ntp-servers 192.168.0.3; Dhcpd biedt nog veel meer mogelijkheden. Kijk gerust eens in de manpages via man dhcpd en man dhcpd.conf.
Hoofdstuk 6
DHCP en Dynamic DNS In een (groot) netwerk is het soms handig om ook de clients via hun hostnaam te kunnen benaderen, en niet enkel op hun dynamisch ip-adres. Eens je BIND en DHCPD hebt geinstalleerd heb je eigenlijk alles al om dynamische DNS te gebruiken. De configuratie bestaat uit drie stappen: • DHCP configureren zodat deze, na het toekennen van een ip-adres aan een client, de hostnaam en ipadres doorstuurd naar de BIND-server • DNS configureren zodat deze, na het ontvangen van gegevens, deze in de juiste zone schrijft. • Een vertrouwenrelatie opbouwen tussen de DHCP- en DNS-server. We starten met het laatste. In de volgende stappen gaan we er vanuit dat je een aparte DNS-server en DHCP-server hebt. Maar het kan uiteraard ook op dezelfde machine uitgevoerd worden.
6.1
Key
We hebben een key nodig, die op beide servers wordt geplaatst. Het aanmaken kan op de DNSserver met de volgende commando’s: root@server:~$ rndc-confgen -a > /etc/bind/rndc.key root@server:~$ chmod 600 /etc/bind/rndc.key De inhoud van deze file is: key "rndc-key" { algorithm hmac-md5; secret "nm/hkDdldfjGjsdjSdfsDD=="; }; chmod g+w /var/lib/bind/db.clients.tux.org
31
HOOFDSTUK 6. DHCP EN DYNAMIC DNS
6.2
DNS-server
In named.conf.local: include "/etc/bind/rndc.key"; acl "rndc-users" { 192.168.0.3/24; 192.168.0.4/24; }; controls { inet * allow {"rndc-users";} keys {"rndc-key";}; }; zone "clients.tux.org" { type master; file "/var/lib/bind/db.clients.tux.org"; allow-update { key "rndc-key"; }; }; zone "0.168.192.in-addr.arpa" { type master; notify no; file "/var/lib/bind/db.0.168.192"; allow-update { key "rndc-key"; }; };
6.3
DHCP-server
In dhcpd.conf:
ddns-update-style interim; include "/etc/dhcp3/rndc.key"; zone clients.tux.org. { primary 192.168.0.1; key "rndc-key"; } ddns-domainname "clients.tux.org";
32
Hoofdstuk 7
Netfilter 7.1
Inleiding
Een computernetwerk, een server of zelfs een desktop-pc zijn niet meer denkbaar zonder een goede firewall. Op een Linux-systeem wordt de firewall netfilter meegeleverd in de kernel. De configuratie gebeurt vanuit userspace door middel van de commando’s ipfwadm (2.0 kernel), ipchains (2.2 kernel) of iptables (2.4 kernel en hoger). Meer info hierover kan je terug vinden op http://www.netfilter.org. We bekijken Netfilter enkel via het commando iptables omdat bijna alle distributies momenteel gebruik maken van een 2.6 kernel.
7.2
Tables en Chains
Een firewall onder Linux bestaat drie tabellen, namelijk de filter-, nat- en mangletabel. De ’filter-table’ wordt gebruikt om aan pakketfiltering te doen. Er zal standaard in deze tabel gewerkt worden, indien je bij het commando iptables geen tabel aangeeft. Dit wordt bijvoorbeeld gebruikt om enkel HTTP verkeer toe te laten op een server. De ’mangle-table’ kan je gebruiken om veranderingen aan pakketten te doen, bvb de aanpassing van de quality of service bits in de TCP header. Dit wordt bijvoorbeeld gebruikt om VoIP-verkeer voorrang te geven. De ’nat-table’ zal voor de network address translation zorgen. Denk daarbij bijvoorbeeld aan een de werking van een router. In elk van deze tabellen vind je een aantal chains, dit zijn verzamelingen van opeenvolgende regels, waaruit de firewall is opgebouwd. Een schematisch overzicht:
34 Chain function Filtert pakketjes die door de firewall, via een andere NIC, gerouteerd worden. Filtert binnenkomende pakketjes, bestemd voor de server waarop de firewall staat. Filtert pakketjes afkomstig van de server waarop de firewall staat en die naar buiten gestuurd worden. Het vertallen van de IP-adressen voor de routering. Het vertaling van de IP-adressen gebeurd na de routering. NAT voor de pakketjes gegenereerd door de host zelf. Aanpassing van de quality of service bits in de TCP pakketten.
Netwerk pakketjes gaan via een bepaalde procedure door de firewall. Hieronder kan je een grafische voorstelling zien van deze procedure. In deze setup wordt de firewall bekenen vanuit het opzicht dat er een pakket van het internet, over de firwall, naar het LAN gaat. Dezelfde procedure is er ook in de andere richting, namelijk van het Lan naar het internet, alsook op een server met ´e´en netwerkinterface die data ontvangt en verstuurd. Deze data gaat dan over ´e´en en dezelfde NIC.
Figuur 7.1: De werking van iptables. Op elke regel kan er bovendien een actie van toepassing zijn, ook wel ’target’ genoemd, namelijk ACCEPT, DROP, LOG of REJECT. Daarover dadelijk meer. Het vullen van deze chains gebeurt met het commando iptables.
7.3
De syntax van iptables
De algemene syntax van iptables ziet er zo uit: iptables [-t
] <match> Uitleg: • table - De tabel waarop de regel van toepassing is. Indien dit wordt weggelaten, is de regel standaard van toepassing op de filter tabel. • commando - Hier wordt aangegeven of de regel toegevoegd, verwijderd, ingevoegd, ... moet worden. Hier wordt ook aangegeven op welke chain de rule van toepassing is.
HOOFDSTUK 7. NETFILTER
35
• match - De filtercriteria • target - De actie die moet genomen worden op pakketten die overeenkomen met deze rule Een overzich van mogelijke waarden volgt. Dit is geen exhaustieve lijst maar eerder ori¨enterend. Kijk gerust in de man-pages voor meer opties en meer uitleg.
7.3.1
Mogelijkheden bij ’table’
-t table waarbij table de waarde ’filter’, ’nat’ en ’mangle’ kan hebben. Een commando als iptables -t nat ... zal dus zijn uitwerking hebben in de ’nat-table’.
7.3.2
Mogelijkheden bij ’commando’
-A, –append Zal een regel toevoegen aan het einde van een chain. -D, –delete Zal een regel verwijderen uit een chain. Voor uitleg zie hoofdstuk -I, –insert Zal een regel toevoegen op een bepaalde locatie in een chain. -R, –replace Dient om een regel te vervangen met een andere waarde. -L, –list Geeft een lijst van alle regels in een bepaalde chain. -F, –flush Zal alle regels verwijderen uit een chain. -P, –policy Stelt de default policy in van een chain. Elk ’commando’ word gevolgd door de naam van een chain, dus bij de ’filter’table kan dit dus INPUT, FORWARD of OUTPUT zijn. In veel gevallen volg nadien ook een regelnummer waarop het commando moet worden uitgevoerd. Zo zal bijvoorbeeld iptables -t filter -I INPUT 5 een regel toevoegen in de INPUT chain van de ’filter-table’ en het de vijfde regel maken.
7.3.3
Mogelijkheden bij ’match’
-s, –source Het IP-adres vanwaar het verkeer komt. -d, –destination Het IP-adres waar het verkeer naar toe gaat. -i, –in-interface Op welke interface komt het verkeer binnen. -o, –out-interface Op welke interface gaat het verkeer buiten. -p Het protocol dat gebruikt wordt, bijvoorbeeld ’tcp’ of ’udp’. –dport De poort waarop het verkeer binnenkomt. Dit kan een enkele poort zijn of een range.
HOOFDSTUK 7. NETFILTER
7.3.4
36
Mogelijkheden bij ’target’
-j ¡target¿ laat ons naar een bepaald target gaan. Default zijn er 4 targets: ACCEPT - Het pakket wordt doorgelaten, de chain wordt niet verder afgelopen. DROP - Het pakket wordt niet doorgelaten, de chain wordt niet verder afgelopen. REJECT - Het pakket wordt niet doorgelaten en de zender wordt hiervan op de hoogte gebracht, de chain wordt niet verder afgelopen. LOG - Het pakket wordt doorgelaten en deze actie wordt gelogd, de chain wordt wel verder afgelopen.
7.4 7.4.1
Het opbouwen van de firewall De firewall bekijken
Op de volgende manier kan je de huidige instellingen van je firewall bekijken. gunther@server:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source
Zoals je kan zien is de firewall is nog niet geconfigureerd. De policies van elke chain staat op ’ACCEPT’ en er zijn geen regels. Het commando iptables -L [chain] heeft nog een aantal interessant opties voor het tonen van de firewall-rules. De meest gebruikte zijn: • -v : geeft verbose output; • -n : IP adressen en portnummers zullen in numeriek format worden weergegeven; • –line-numbers : voeg regel nummers toe die overeenkomen met de positie van die regel in de chain. • -t table : vermeld welke table je wil zien: filter, mangle of nat (filter is de default).
7.4.2
De standaard policy
De regels in een chain worden van boven naar beneden doorgelopen. Indien geen enkele regel van toepassing was op het pakket, is de standaard policy van de chain van toepassing. Deze kan je als volgt instellen:
HOOFDSTUK 7. NETFILTER
37
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP Maar je zou daar ook een regel voor kunnen aanmaken die je als laatste zet in de chain. sudo iptables -A INPUT -j DROP Omdat we geen interface of protocol hebben meegeven in ons commando, word alle verkeer, op alle poorten, op alle interfaces, geblokeerd. Het is belangrijk dat je dit als laatste doet. Als je eerst begint met alles blokkeren zal er geen verkeer meer mogelijk zijn.
7.4.3
Verkeer op de localhost toestaan
Om te kunnen functioneren moet alle verkeer op localhost mogelijk zijn. Met een defaultpolicy ingesteld op DROP, is dit niet mogelijk. Een van de eerste zaken die je expliciet zal moeten aangegeven is dat dit verkeer wordt toegestaan: iptables --table filter -A INPUT --source 127.0.0.1 -i lo -j ACCEPT iptables --table filter -A OUTPUT --destination 127.0.0.1 -o lo -j ACCEPT Een andere mogelijkheid is dat je bij elke regel de interface vermeld met -i eth0, maar dat zorgt elke voor meer en complexer werk.
7.4.4
Established Sessions toestaan
We kunnen reeds opgebouwde sessie toestaan om data te ontvangen gunther@server:~$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT gunther@server:~$ sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
7.4.5
Inkomend verkeer op bepaalde poorten toestaan
Om inkomend TCP verkeer toe te laten voor SSH op de poort 22, moeten we de volgende regel gebruiken: gunther@server:~$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT We zeggen dus: • -A INPUT : voeg deze regel toe aan de input chain; • -p tcp : kijk na of het TCP verkeer is; • –dport 22 : indien dit zo is, kijk na of het verkeer naar de poort 22 gaat; • -j ACCEPT : indien dit zo is, laat het verkeer toe.
HOOFDSTUK 7. NETFILTER
38
We kunnen deze regel nakijken door: gunther@server:~$ sudo iptables -L Chain INPUT (policy DROP) target prot opt source ACCEPT all -- anywhere ACCEPT tcp -- anywhere
Volgende commando zal de derde regel verwijderen uit de INPUT-chain van de ’filter-table’: sudo iptables -t filter -D INPUT 3
7.4.8
Logging aanzetten
Bovenstaande instelling zullen hun werk doen. Maar wat er dan juist allemaal gebeurd weten we niet. Daarvoor moeten we logging gebruiken. Een voorbeeld: sudo iptables -I INPUT 5 -m limit --limit 5/min \ -j LOG --log-prefix "iptables denied: " --log-level 7 Uitleg: –limit het maximum aantal keer een zelfde regel mag voorkomen in syslog. –log-prefix ¨ıptables denied: ” voegt een prefix toe aan de logging voor de leesbaarheid. –log-level 7 zet het syslog level op ’informational’ (zie man syslog)
HOOFDSTUK 7. NETFILTER
7.5
39
De firewall automatisch laten starten
Al deze instellingen zijn tijdelijk. Als de computer opnieuw wordt opgestart dan zijn alle regels verloren. Laten we nu alle instellingen opslaan en er voor zorgen dat deze automatisch worden ingesteld bij het starten. De tools iptables-save en iptables-restore worden hier voor gebruikt. Volgende methode is slechts ´e´en benadering voor Debian-gebasserde systemen, er zijn uiteraard nog meer mogelijkheden. We zullen eerst een export moeten doen van de regels die we hebben toegepast. We slaan dit ook ineens op in een file welke we zullen aanspreken bij het opstarten van onze netwerkverbindingen. sudo iptables-save > /etc/iptables.settings We gaan nu dit bestand automatisch laten starten tijdens het opstarten. We openen daarvoor eerst het netwerkinterfases configuratie bestand /etc/network/interfases met een teksteditor. Voeg daar onderaan de volgende regel toe: pre-up iptables-restore < /etc/iptables.settings. Het bestand /etc/network/interfaces zou er dan zo kunnen uitzien: auto eth0 iface eth0 inet dhcp pre-up iptables-restore < /etc/iptables.rules post-down iptables-save -c > /etc/iptables.rules Start nu je computer opnieuw op. Met sudo iptables -L zal je merken dat de firewall-rules behouden zijn.
7.6
De firewall (tijdelijk) uitzetten
Soms kan het nodig zijn om de firewal (tijdelijk) uit te zetten. Je kan makkelijk alle regels ’flushen’: sudo iptables -F Je zou er ook een shell-script voor kunnen schrijven, bijvoorbeeld /root/fw.stop, met de volgende inhoud: echo "Stopping firewall and allowing everyone..." iptables -t filter -F iptables -t filter -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT Maak je script uitvoerbaar met het commando chmod u+x /root/fw.stop. Het uitvoeren gebeurd met /root/fw.stop.
HOOFDSTUK 7. NETFILTER
7.7
40
GUI voor netfilter
Er zijn verschillende programma’s ter beschikking om met een GUI regels te definieren voor netfilter. Firestarter kan je via synaptic instaleren. Meer info kan je vinden op de website van Firestarter: http://www.fs-security.com/ en http://www.fs-security.com/docs/tutorial.php
Hoofdstuk 8
Controle van de netwerkinstellingen 8.1
Inleiding
Met behulp van een aantal handige netwerktooltjes die meestal standaard ge¨ınstalleerd worden bij Linux, is het mogelijk de configuratie en werking van je netwerk na te kijken.
8.2
ping
Ping1 is een hulpprogramma dat kan gebruikt worden om de bereikbaarheid van netwerkapparatuur te testen. Ping gebruikt het ICMP-protocol om een ICMP ECHO REQUEST pakket te sturen naar host of gateway in afwachting van een reactie met een ICMP ECHO RESPONSE pakket. De reactietijd tussen het versturen en het ontvangen van de bevestiging wordt aangegeven als de round-trip time en wordt weergegeven in milliseconden. Een veel gemaakte misvatting is dat ping gebruikt kan worden om de snelheid van een verbinding te meten. Hoewel de round-trip time wel een indicatie geeft over de snelheid van een verbinding is het niet mogelijk om de daadwerkelijke snelheid van de verbinding er uit af te leiden. Een voorbeeld: gunther@clientPC:~$ ping -c 4 www.google.be PING www.l.google.com (74.125.77.99) 56(84) bytes of data. 64 bytes from ew-in-f99.google.com (74.125.77.99): icmp_seq=1 64 bytes from ew-in-f99.google.com (74.125.77.99): icmp_seq=2 64 bytes from ew-in-f99.google.com (74.125.77.99): icmp_seq=3 64 bytes from ew-in-f99.google.com (74.125.77.99): icmp_seq=4 --- www.l.google.com ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3003ms
ttl=52 ttl=52 ttl=52 ttl=52
1 Packet
InterNet Groper
41
time=22.3 time=21.4 time=20.2 time=21.3
ms ms ms ms
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN
42
rtt min/avg/max/mdev = 20.273/21.339/22.352/0.743 ms De optie -c 4 werd hier gebruikt om het pingen te beperken tot 4 pakketjes. als je deze optie niet opneemt, zal ping blijven IMCP-pakketen sturen tot je op CTRL-C drukt. Hieruit kan je afleiden dat de DNS-resolving lukt, de domeinnaam www.google.be wordt namelijk omgezet naar een IP-adres, maar ook de routering staat juits ingesteld, je kan namelijk vanaf je lokale netwerk het internet bereiken. Verder leren we dat: • De kleinste ’round trip time’ was 20.273 milliseconden • De gemidelde ’round trip time’ was 21.339 milliseconden • De grootste ’round trip time’ was 22.352 millisecondsen • De standaarddeviatie2 van de ’round trip time’ was 0.743 milliseconden Normaal is het erg handig dat je een server kunt ’uitpingen’, zo weet je dat deze nog up is. Maar zodra je deze server open zet naar het internet, wil je soms net deze reply af zetten uit veiligheidsoverwegingen. Hier ziet je nog dat de reply werkt: gunther@clientPC:~$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.135 ms --- localhost ping statistics --1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.135/0.135/0.135/0.000 ms Met volgend commando zet je dit af. gunther@clientPC:~$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 net.ipv4.icmp_echo_ignore_all = 1 gunther@clientPC:~$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. --- localhost ping statistics --1 packets transmitted, 0 received, 100% packet loss, time 0ms Pingen terug mogelijk maken gaat even gemakkelijk: gunther@clientPC:~$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0 net.ipv4.icmp_echo_ignore_all = 0 gunther@Dragonfly:~$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 2 Dit is een maat voor de spreiding van een variabele, gedefinieerd als de wortel uit de variantie. Men zou kunnen zeggen dat de standaarddeviatie de gemiddelde afwijking is van het gemiddelde.
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN
43
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.160 ms --- localhost ping statistics --1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.160/0.160/0.160/0.000 ms gunther@Dragonfly:~$ Om dit permanent in te stellen, zodat na een reboot de echo reply af staat kan je /etc/sysctl.conf bewerken. Zie hiervoor de manpages van sysctl. Ook al is ping erg eenvoudig, je kan er een grappig en handig commando mee opbouwen. Om bvb een node in jouw netwerk te vinden is het volgende mogelijk: gunther@clientPC:~$ while /bin/ping -c 1 192.168.1.1; \ do play /usr/share/sounds/purple/alert.wav; done Je hoort nu een geluid door uw speakers. Trek nu n voor n al de netwerkkabels uit. Van zodra je de netwerkabel van de bedoelde pc uittrekt, zal het geluid stoppen. Je hebt de juiste node gevonden!
8.3
traceroute
Het commando traceroute wordt gebruikt om de weg te volgen die een pakketje van uw hostmachine aflegt tot aan zijn bestemming. Het programma probeert alle gateways te tonen die gepasseerd worden bij het contact maken met een bepaalde host. Zo is te zien hoeveel ”hops¨er nodig zijn voor een pakket om bij een bepaalde host te komen en de tijd die ervoor nodig was. Het programma kan je installeren met sudo apt-get install traceroute en kan als volgt gebruikt worden: gunther@clientPC:~$ traceroute www.google.be traceroute to www.google.be (74.125.79.106), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 2.117 ms 2.185 ms 2.364 ms 2 d515300C1.access.telenet.be (81.83.0.193) 23.096 ms 23.145 ms * 3 * * * 4 * * * 5 * * * 6 * so-1-0-0-dcr2.bru.cw.net (195.2.2.73) 12.633 ms 14.881 ms 7 so-5-0-0.dcr1.bru.cw.net (195.2.25.25) 19.719 ms 19.446 ms 20.127 ms 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 * 209.85.255.143 (209.85.255.143) 18.305 ms 72.14.239.199 (72.14.239.199) 14 209.85.255.118 (209.85.255.118) 26.994 ms 209.85.255.130 (209.85.255.130) 15 * * * 16 * * * 17 * * * 18 * * *
36.668 ms 25.186 ms 209.85.25
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN 19 20 21 22 23 24 25 26 27 28 29 30
* * * * * * * * * * * *
* * * * * * * * * * * *
44
* * * * * * * * * * * *
Als een antwoord komt van verschillende gateways, wordt het adres van elk systeem getoont. Als er geen respons is binnen de 5 seconden wordt een ”*”getoont. Ondanks het nut van traceroute, kan je misschien beter overwegen om mtr te gebruiken. Deze zal je meer en live data tonen.
8.4
mtr
Het programma mtr3 combineert de functionaliteit van traceroute en ping in een enkel netwerk diagnostis hulpmiddel dat realtime data weergeeft. Je kan dit starten door het commando mtr te laten volgen met het ip-adres of de FQDN van je target, bijvoorbeeld mtr www.google.com geeft dan volgende uitvoer: Met q of CTRL+C verlaat je het programma.
8.5
tcpdump
Het commando tcpdump wordt gebruikt om netwerktrafiek in het oog te houden. Hiermee kan je pakketten afkomstig van een bepaalde host of bestemd voor een bepaalde host opvangen. Het is ook mogelijk het verkeer op een bepaalde poort te bekijken. Bovendien kan je aangeven welk type verkeer je in het oog wilt houden (TCP, UDP, ARP, ... ). Enkele opties: • -i Geeft aan naar welke interface we willen luisteren • -n Print IP-adressen in plaats van namen • -t Drukt geen timestamps af • -q Geeft minimale output • -v Geeft veel meer output • -c Voert tcpdump een speciefiek aantal keer uit. Indien deze optie niet wordt meegegeven, blijft tcpdump constant luisteren naar de interface. Je kan het commando dan enkel stoppen door de toetsencombinatie Ctrl-C. 3 Vroeger
was dit ’Matt’s traceroute’ mar tegenwoordig ’My traceroute’
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN
45
Figuur 8.1: Het programma mtr in werking. Dit is bijvoorbeeld een ’surf-sessie’ naar www.google.com:
gunther@desktop:~$ sudo tcpdump dst host www.google.com -i eth0 -n -t tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes IP 10.0.0.55.44184 > 208.69.35.230.80: Flags [S], seq 764235770, win 5840, options [mss 1460,sackOK, IP 10.0.0.55.44184 > 208.69.35.230.80: Flags [.], ack 2456324818, win 92, options [nop,nop,TS val 80 IP 10.0.0.55.44184 > 208.69.35.230.80: Flags [P.], seq 0:624, ack 1, win 92, options [nop,nop,TS val IP 10.0.0.55.44184 > 208.69.35.230.80: Flags [.], ack 274, win 108, options [nop,nop,TS val 8002369 IP 10.0.0.55.44184 > 208.69.35.230.80: Flags [.], ack 492, win 125, options [nop,nop,TS val 8002369 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [S], seq 770098146, win 5840, options [mss 1460,sackOK, IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 1677682001, win 92, options [nop,nop,TS val 80 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [P.], seq 0:623, ack 1, win 92, options [nop,nop,TS val IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 275, win 108, options [nop,nop,TS val 8002392 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 1715, win 153, options [nop,nop,TS val 8002392 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 2881, win 198, options [nop,nop,TS val 8002392 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 4321, win 243, options [nop,nop,TS val 8002395 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 4595, win 288, options [nop,nop,TS val 8002395 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 4921, win 333, options [nop,nop,TS val 8002396 IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [P.], seq 623:1432, ack 4921, win 333, options [nop,nop IP 10.0.0.55.44185 > 208.69.35.230.80: Flags [.], ack 5207, win 378, options [nop,nop,TS val 8002644 ^C 16 packets captured 18 packets received by filter
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN
46
0 packets dropped by kernel gunther@desktop:~$ Zoek je een grafisch programma met gelijkaardige functionaliteit, kijk dan een naar http://www.wireshark.org.
8.6
lsof
Het programma ’lsof’4 kan je gebruiken om ’data flow’, die gerelateerd is aan een poort, users of een applications, na te gaan. Zo kan je dus ook van huidige netwerkconnecties de geassocieerde open bestanden bekijken. Als je het commando lsof zou uitvoeren, krijg je een erg lange lijst, van alle open bestanden met hun corresponderende proces, te zien. Uiteraard geeft de manpage veel info over lsof, maar het commando lsof -h geeft je een korte samenvatting. Het commando dat voor ons interessant is, is lsof -i. Daarbij krijg je alle open files die geassocioceerd zijn met netwerkconnecties. root@server:~# lsof -i COMMAND PID USER inetd 2011 root nmbd 2026 root nmbd 2026 root nmbd 2026 root nmbd 2026 root smbd 2031 root smbd 2031 root dhcpd3 2069 dhcpd dhclient3 2226 root sshd 2289 root sshd 2289 root ntpd 2422 ntp ntpd 2422 ntp ntpd 2422 ntp ntpd 2422 ntp ntpd 2422 ntp ntpd 2422 ntp ntpd 2422 ntp dhclient 2475 root sshd 2488 root sshd 2496 gunther vsftpd 3624 root wget 5542 root root@server:~#
Je kan je nog specifieker gaan door de volgende opties te gebruiken: lsof i :80 zoeken op een specifieke poort lsof i :ssh zoeken op een specifieke service 4 LiSt
Open Files
HOOFDSTUK 8. CONTROLE VAN DE NETWERKINSTELLINGEN lsof i @www.khk.be zoeken op een hostname
47
Appendices
48
Iptables Dit is een voorbeeld van een shell-script om een firewall in te stellen. #!/bin/sh # set -e echo 0 > /proc/sys/net/ipv4/ip_forward ([ -f /var/lock/subsys/ipchains ] && /etc/init.d/ipchains stop) >/dev/null 2>&1 || true (rmmod ipchains) >/dev/null 2>&1 || true /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -P INPUT DROP /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset /sbin/iptables -A INPUT -m state --state INVALID -j DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset /sbin/iptables -A OUTPUT -m state --state INVALID -j DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset /sbin/iptables -A FORWARD -m state --state INVALID -j DROP /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT /sbin/iptables -A FORWARD -i lo -o lo -j ACCEPT /sbin/iptables -t mangle -F /sbin/iptables -t mangle -X /sbin/iptables -t mangle -Z /sbin/iptables -t mangle -P PREROUTING ACCEPT /sbin/iptables -t mangle -P OUTPUT ACCEPT /sbin/iptables -t mangle -P INPUT ACCEPT /sbin/iptables -t mangle -P FORWARD ACCEPT /sbin/iptables -t mangle -P POSTROUTING ACCEPT /sbin/iptables -t nat -F /sbin/iptables -t nat -X /sbin/iptables -t nat -Z /sbin/iptables -t nat -P PREROUTING ACCEPT /sbin/iptables -t nat -P OUTPUT ACCEPT 49
IPTABLES
50
/sbin/iptables -t nat -P POSTROUTING ACCEPT /sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT /sbin/iptables -A INPUT -p udp --dport 123 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 8443 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 8880 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 995 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 993 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 106 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 3306 -s 62.193.224.166 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP /sbin/iptables -A INPUT -p tcp --dport 5432 -j DROP /sbin/iptables -A INPUT -p tcp --dport 9008 -j DROP /sbin/iptables -A INPUT -p tcp --dport 9080 -j DROP /sbin/iptables /sbin/iptables /sbin/iptables /sbin/iptables
-A -A -A -A
INPUT INPUT INPUT INPUT
-p -p -p -p
udp udp tcp tcp
--dport --dport --dport --dport
137 138 139 445
-j -j -j -j
DROP DROP DROP DROP
/sbin/iptables -A INPUT -p udp --dport 1194 -j ACCEPT /sbin/iptables -A INPUT -p udp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -p icmp --icmp-type 8/0 -j ACCEPT /sbin/iptables -A INPUT -j DROP /sbin/iptables -A OUTPUT -p tcp --dport 5224 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT /sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -A OUTPUT -p udp --dport 80 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT /sbin/iptables -A OUTPUT -p udp --dport 123 -j ACCEPT /sbin/iptables -A OUTPUT -j DROP /sbin/iptables -A FORWARD -j DROP echo 1 > /proc/sys/net/ipv4/ip_forward # # End of script #
Default config-file van DHCPD # # # # # # # #
Sample configuration file for ISC dhcpd for Debian Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as configuration file instead of this file. $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
# The ddns-updates-style parameter controls whether or not the server will # attempt to do a DNS update when a lease is confirmed. We default to the # behavior of the version 2 packages (’none’, since DHCP v2 didn’t # have support for DDNS.) ddns-update-style none; # option definitions common to all supported networks... option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org; default-lease-time 600; max-lease-time 7200; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. #subnet 10.152.187.0 netmask 255.255.255.0 { #} # This is a very basic subnet declaration. #subnet 10.254.239.0 netmask 255.255.255.224 { # range 10.254.239.10 10.254.239.20; # option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; 52
DEFAULT CONFIG-FILE VAN DHCPD #} # This declaration allows BOOTP clients to get dynamic addresses, # which we don’t really recommend. #subnet 10.254.239.32 netmask 255.255.255.224 { # range dynamic-bootp 10.254.239.40 10.254.239.60; # option broadcast-address 10.254.239.31; # option routers rtr-239-32-1.example.org; #} # A slightly different configuration for an internal subnet. #subnet 10.5.5.0 netmask 255.255.255.224 { # range 10.5.5.26 10.5.5.30; # option domain-name-servers ns1.internal.example.org; # option domain-name "internal.example.org"; # option routers 10.5.5.1; # option broadcast-address 10.5.5.31; # default-lease-time 600; # max-lease-time 7200; #} # # # #
Hosts which require special configuration options can be listed in host statements. If no address is specified, the address will be allocated dynamically (if possible), but the host-specific information will still come from the host declaration.
#host passacaglia { # hardware ethernet 0:0:c0:5d:bd:95; # filename "vmunix.passacaglia"; # server-name "toccata.fugue.com"; #} # Fixed IP addresses can also be specified for hosts. These addresses # should not also be listed as being available for dynamic assignment. # Hosts for which fixed IP addresses have been specified can boot using # BOOTP or DHCP. Hosts for which no fixed address is specified can only # be booted with DHCP, unless there is an address range on the subnet # to which a BOOTP client is connected which has the dynamic-bootp flag # set. #host fantasia { # hardware ethernet 08:00:07:26:c0:a5; # fixed-address fantasia.fugue.com; #} # # # #
You can declare a class of clients and then do address allocation based on that. The example below shows a case where all clients in a certain class get addresses on the 10.17.224/24 subnet, and all other clients get addresses on the 10.0.29/24 subnet.
#class "foo" { # match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; #}
53
DEFAULT CONFIG-FILE VAN DHCPD #shared-network 224-29 { # subnet 10.17.224.0 netmask 255.255.255.0 { # option routers rtr-224.example.org; # } # subnet 10.0.29.0 netmask 255.255.255.0 { # option routers rtr-29.example.org; # } # pool { # allow members of "foo"; # range 10.17.224.10 10.17.224.250; # } # pool { # deny members of "foo"; # range 10.0.29.10 10.0.29.230; # } #}
54
Overzicht van mogelijken tijdswaarden in zonefiles voor DNS BIND werkt steeds met seconden in zijn tijdswaarden. Het is echter mogelijk om afkortingen te gebruiken bij het specificeren van tijdseenheden. Daarbij je de volgende gebruiken: • M voor minuten • H voor uren • D voor dagen • W voor weken De onderstaande tabel laat veelgebruite tijdswaarden zien, in seconden, en hun equivalente tijd in een ander formaat. Seconden 60 1800 3600 10800 21600 43200 86400 259200 604800 31536000
Ander tijdsformaat 1M 30M 1H 3H 6H 12H 1D 3D 1W 365D
55
Bibliografie [1] Is your dhcp server authoritative? http://www.isc.org/files/auth.html. 25 [2] M. Andrews. Negative Caching of DNS Queries (DNS NCACHE). RFC 2308 (Proposed Standard), March 1998. Updated by RFCs 4035, 4033, 4034. 8, 17 [3] D. Barr. Common DNS Operational and Configuration Errors. RFC 1912 (Informational), February 1996. 9 [4] P.V. Mockapetris. Domain names - concepts and facilities. RFC 1034 (Standard), November 1987. Updated by RFCs 1101, 1183, 1348, 1876, 1982, 2065, 2181, 2308, 2535, 4033, 4034, 4035, 4343, 4035, 4592. 8 [5] P.V. Mockapetris. Domain names - implementation and specification. RFC 1035 (Standard), November 1987. Updated by RFCs 1101, 1183, 1348, 1876, 1982, 1995, 1996, 2065, 2136, 2181, 2137, 2308, 2535, 2845, 3425, 3658, 4033, 4034, 4035, 4343. 8