Вы находитесь на странице: 1из 71

Netwerken onder Linux

Gunther Van Landeghem KHK Dep.HWBK gunther.van.landeghem@khk.be Werkversie november 2011

Inhoudsopgave
1 Algemene inleiding 2 Benodigde voorkennis 2.1 2.2 Benodigde voorkennis Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benodigde voorkennis TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 2 3 3 4 5 5 6 6 6 7 7 8 8 8 9 9 9 10 10

3 De status van de netwerkkaart(en) 3.1 3.2 De status opvragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De status wijzigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Instellen van de netwerkkaart(en) met IPv4 4.1 4.2 4.3 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MAC-adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instellen van de netwerkkaart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 4.3.2 4.3.3 4.3.4 4.4 Het loopback device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DHCP instellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Statisch IP instellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alias interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Name resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 4.4.2 4.4.3 De DNS-servers instellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Statische hostnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Name Service Switch Conguration . . . . . . . . . . . . . . . . . . . . . . .

4.5

Routering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Instellen van de netwerkkaart(en) met IPv6 5.1 IPv6 adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i

INHOUDSOPGAVE 5.1.1 5.1.2 6 DNS 6.1 6.2 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Over DNS: de theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 6.2.2 6.3 6.4 Resource Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Record Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Statisch IPv6 instellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IPv6 testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ii 10 11 12 12 12 12 14 18 18 18 19 19 22 22 23 26 26 27 28 30 31 31 32 33 33 35 35 36 36 36

Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . conguratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 6.4.2 6.4.3 Algemene conguratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caching Nameserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Primary Master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.5

Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 6.5.2 Het commando dig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Veelgebruikte mogelijkheden van dig . . . . . . . . . . . . . . . . . . . . . .

6.6

DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.1 6.6.2 6.6.3 6.6.4 Testen voor de setup van DNSSEC . . . . . . . . . . . . . . . . . . . . . . . Caching DNSSEC Nameserver . . . . . . . . . . . . . . . . . . . . . . . . . Testen na de setup van DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . Onze eigen zone in DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . .

7 DHCP 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Koppelen aan een netwerkinterface . . . . . . . . . . . . . . . . . . . . . . . . . . . Basisconguratie DHCPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DHCPD testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Leases nakijken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Niveaus in DHCP-opties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DHCP-relay-agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Failover DHCP-server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INHOUDSOPGAVE 7.10 Meer conguratie opties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10.1 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10.2 Een vast IP-adres koppelen aan een host . . . . . . . . . . . . . . . . . . . . 7.10.3 Andere opties te bekijken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 DHCP en Dynamic DNS 8.1 8.2 8.3 Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DNS-server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DHCP-server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iii 38 38 38 39 40 40 41 41 42 42 42 43 44 44 44 45 45 45 45 46 46 46 47 47 47 48 48 49 50 50

9 Netlter 9.1 9.2 9.3 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables en Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De syntax van iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 9.3.2 9.3.3 9.3.4 9.4 Mogelijkheden bij table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mogelijkheden bij commando . . . . . . . . . . . . . . . . . . . . . . . . . Mogelijkheden bij match . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mogelijkheden bij target . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Het opbouwen van de rewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.4.6 9.4.7 9.4.8 De rewall bekijken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De standaard policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verkeer op de localhost toestaan . . . . . . . . . . . . . . . . . . . . . . . . Established Sessions toestaan . . . . . . . . . . . . . . . . . . . . . . . . . . Inkomend verkeer op bepaalde poorten toestaan . . . . . . . . . . . . . . . ICMP toelaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regels verwijderen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logging aanzetten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.5 9.6 9.7

De rewall automatisch laten starten . . . . . . . . . . . . . . . . . . . . . . . . . . De rewall (tijdelijk) uitzetten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GUI voor netlter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Controle van de netwerkinstellingen 10.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INHOUDSOPGAVE 10.2 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 mtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 tcpdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 lsof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Appendices Iptables Default cong-le van DHCPD Overzicht van mogelijken tijdswaarden in zoneles voor DNS

iv 50 52 53 53 55 58 58 61 64

Lijst van guren


9.1 De werking van iptables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 54

10.1 Het programma mtr in werking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Hoofdstuk 1

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 conguratie van diverse, veel gebruikte netwerkservices onder Linux. Deze cursus baseert zich op de Linux distributie Ubuntu Server 11.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. Commandos die uitgevoerd moeten worden kan je aan de volgende syntax herkennen: user@hostname:~$ commando [optie] [argument] Ook de inhoud van cong-les 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 FAQs. 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 gunther.van.landeghem@khk.be Werkversie februari, 2012 De Creative Commons Naamsvermelding-Geen Afgeleide werken 2.0 Belgi Licentie is van toepasse ing 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.

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 paginas: 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

Hoofdstuk 3

De status van de netwerkkaart(en)


3.1 De status opvragen

Om de status van de netwerkkaarten op te vragen kan je het commando ifconfig -a gebruiken. gunther@laptop:~$ ifconfig -a eth0 Link encap:Ethernet HWaddr 00:26:13:88:72:7d inet addr:71.24.59.40 Bcast:78.23.63.255 Mask:255.255.240.0 inet6 addr: fe80::222:157f:fa88:724d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:288813 errors:0 dropped:0 overruns:0 frame:0 TX packets:166171 errors:0 dropped:0 overruns:0 carrier:19 collisions:0 txqueuelen:1000 RX bytes:377446912 (377.4 MB) TX bytes:20509311 (20.5 MB) Interrupt:45 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:10546 errors:0 dropped:0 overruns:0 frame:0 TX packets:10546 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:702173 (702.1 KB) TX bytes:702173 (702.1 KB) Link encap:Ethernet HWaddr 00:25:af:ed:ab:74 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan0

Dit geeft je zowel de actieve als de niet-actieve netwerkkaarten. Indien je enkel de actieve netwerkaarten wenst te bekijken is het commando ifconfig voldoende. Het tonen van de status van n specieke netwerkkaart, bvb eth0, gebeurt via ifconfig eth0. ee

HOOFDSTUK 3. DE STATUS VAN DE NETWERKKAART(EN)

3.2

De status wijzigen

Wensen we nu een netwerkkaart, bvb eth0, uit te schakelen, kan dit via ifdown eth0. Het aanzetten gebeurt via ifup eth0. Je Let op: dit gelt enkel voor interfaces die gecongureerd zijn in /etc/network/interfaces. Via het init-script /etc/init.d/networking restart doe je dit ineens voor alle netwerkkaarten.

Hoofdstuk 4

Instellen van de netwerkkaart(en) met IPv4


4.1 Inleiding

Ondanks dat vele distrubuties de nodige grasche tools meeleveren om de netwerkkaart(en) in te stellen, focussen we ons hier op het instellen via de CLI daar de meeste systemen via de commandline worden beheerd. Een server kan voorzien worden van n of meerdere NICs (Network Interface Card). Onder linux ee 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 conguraties aan een kaart, bijvoorbeeld eth0, toe te wijzen welke je dan kan aanspreken via eth0:1, eth0:2, ... . Om een overzicht te krijgen van al je netwerkkaarten kan je volgende commando uitvoeren: gunther@server:~$ sudo lshw -class network *-network description: Ethernet interface product: 82540EM Gigabit Ethernet Controller vendor: Intel Corporation physical id: 1 bus info: pci@0000:07:01.0 logical name: eth0 version: 02 serial: 00:07:e9:77:67:18 size: 1GB/s capacity: 1GB/s width: 32 bits clock: 66MHz capabilities: <snip> configuration: <snip> resources: <snip>

HOOFDSTUK 4. INSTELLEN VAN DE NETWERKKAART(EN) MET IPV4

4.2

MAC-adressen

De logische namen, zoals bijvoorbeeld eth0, zorgen ervoor dat je makkelijk een conguratie kunt doen van je netwerkkaarten. Deze logische namen worden in de achtergrond gelinkt aan het MACadres van je fysieke netwerkkaart. Dit MAC-adres kan je makkelijk achterhalen via het commando lshw --class network. De linking 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" # PCI device 0x1814:0x0781 (rt2800pci) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:af:ed:bb:24", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0" De waarde bij NAME kan je gerust wijzigen. Indien je problemen hebt met de naamgeving van je netwerkkaarten, kan je gerust dit bestand verwijderen en rebooten. Het bestand zal dat opnieuw aangemaakt worden.

4.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

4.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 conguratie 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

HOOFDSTUK 4. INSTELLEN VAN DE NETWERKKAART(EN) MET IPV4 Een envoudige ping naar de localhost of naar 127.0.0.1 toont ons dat alles werkt. gunther@server:~$ ping -c 4 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 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

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

4.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.

4.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

HOOFDSTUK 4. INSTELLEN VAN DE NETWERKKAART(EN) MET IPV4 address 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 network 192.168.1.0 gateway 192.168.1.1

#optioneel #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

4.3.4

Alias interfaces

Wens je een tweede conguratie 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!

4.4
4.4.1

Name resolution
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 n van uw NICs zal dhclient1 het bestand /etc/resolv.conf ee 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
1 Het

programma verantwoordelijk voor de DHCP-requests

HOOFDSTUK 4. INSTELLEN VAN DE NETWERKKAART(EN) MET IPV4 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.

4.4.2

Statische hostnames

/etc/hosts

4.4.3

Name Service Switch Conguration

/etc/nsswitch.conf

4.5

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 n van de aangesloten netwerken ee 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:~$

Genmask 255.255.255.0 255.255.255.0 255.255.0.0 255.240.0.0 0.0.0.0

Flags U U U U UG

Metric 2 0 1000 0 0

Ref 0 0 0 0 0

Use 0 0 0 0 0

Iface eth2 eth0 eth2 eth1 eth2

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 netmask 255.255.255.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 5

Instellen van de netwerkkaart(en) met IPv6


5.1 IPv6 adressen

Daar waar IPv4 adressen zijn opgebouwd uit 32 bits, zijn IPv6 adressen opgebouwd uit 128 bits. Dit biedt heel wat mogelijkheden. De opbouw: 128 bits Network portion 48 bit ( or more ) 16 bit ( or less ) Routing prex Subnet ID FE80 link-local 169. FC00::/7 unique-local 10. 172. 192. 2001 global fc00::/7 Unique local addresses (ULAs) are intended for local communication. They are routable only within a set of cooperating sites (analogous to the private address ranges 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 of IPv4).[21] The addresses include a 40-bit pseudorandom number in the routing prex intended to minimize the risk of conicts if sites merge or packets are misrouted into the Internet. Device portion 64 bit Interface identier

5.1.1

Statisch IPv6 instellen

In /etc/network/interfaces kunnen we de volgende regels toevoegen: iface eth0 inet6 static address FC00::0016 netmask 64 gateway FC00::0001 10

HOOFDSTUK 5. INSTELLEN VAN DE NETWERKKAART(EN) MET IPV6

11

5.1.2

IPv6 testen

ifconfig eth0 ip -6 address show eth0 netstat -nr -6 ping6 ipv6.google.com traceroute6 ipv6.google.com

Hoofdstuk 6

DNS
[4, 5, 2]

6.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 qualied 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).

6.2

Over DNS: de theorie

Voor je aan de conguratie van een DNS-server begint, is het best om eerst de syntax die gebruikt wordt in de zoneles te begrijpen.

6.2.1

Resource Records

De DNS-data wordt opgeslagen in resource records. Zon resource records kan bijvoorbeeld een DNS-naam koppelen aan een IP-adres. Elk resource record wordt op n regel geschreven en bevat ee meerdere velden. De syntax is de volgende: [name] [ttl] [class] type data Let op: deze syntax is speciek voor de Resource Records in de congles van de zones. De volgorde van deze velden in de eectieve datapakketten, die verzonden worden over het netwerk, is anders. De betekenis van deze velden is: 12

HOOFDSTUK 6. DNS name

13

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 congle moet staan om eect 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 specieert 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 deniren als je gebruik wil maken van IN, wordt het meestal toch e gedaan. Voorbeeld: www.khk.be. 3600 IN A 193.190.63.155

HOOFDSTUK 6. DNS 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

14

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: ; @ () 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.

6.2.2

Record Types

Zoals hierboven vermeld is n van de velden uit een resource record het type veld. Dit zijn ee 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 Denitie van een dns zone Identiceert de zone server en delegeert de subdomeinen Naam naar adres vertaling Naam naar IPv6 adres vertaling (uitgesproken als quadA). Adres naar naam vertaling Een e-mail-server voor het domein Nicknames of alias voor een host Commentaar en informatie

HOOFDSTUK 6. DNS A-record of Address record Korte omschrijving: Verwijzing naar een IP-adres Mogelijke waarde: Geldig IPv4 adres

15

Een A record denieert 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 denieert 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 6. DNS mailhost mailserver IN IN CNAME A mailserver 10.0.0.4 ; fout ; fout

16

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: Denieert een mailserver Mogelijke waarde: Bestaand A-record Prioriteit: Lage waarde is hoge prioriteit Het MX (Mail eXchanger) record denieert 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 info@khk.be 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 IN IN IN IN MX MX A A 10 mail.domain.com. 20 mail2.domain.com. 10.0.1.15 10.0.1.16

NS Korte omschrijving: Denieert 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 deniren voor een bepaalde zone. Dit zijn de servers die wore den 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. IN IN IN IN NS NS A A ns1.example.org. ns2.example.org. 10.0.0.7 10.0.0.8

HOOFDSTUK 6. DNS SOA Korte omschrijving: Belangrijke informatie over de DNS-zone Mogelijke waarde: Vast patroon

17

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 zonele opgenomen. SOA-gegevens worden per domeinnaam opgegeven in het patroon van: <nameserver> <email> <serial> <refresh> <retry> <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 zonele. Wanneer het serienummer verhoogd wordt, zal de master de zonele opnieuw inlezen na een reload, en de slaves zullen een zonetransfer doen. Bij elke wijziging in een zonele 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: @ IN SOA ns1.example.com. 1 ; 3600 ; 600 ; 86400 ; 3600 ) ; 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: @
1 Sender

IN

TXT

"Deze DNS server draait linux."

Policy Framework

HOOFDSTUK 6. DNS

18

6.3

Installatie

De installatie van de DNS-server BIND9 is erg eenvoudig: sudo apt-get install bind9

6.4

conguratie

Er zijn veel manieren om BIND9 te congureren. De meest voorkomende conguraties zijn als caching nameserver, als primaire master en als secundaire master. Gecongureerd 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 le 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) gecongureerd worden. Zon 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.

6.4.1

Algemene conguratie

De DNS conguratie 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 congle zullen de inhoud uit de andere vermelde congles opnemen. Deze opsplitsing zorgt voor eenvoudigere congles. /etc/bind/named.conf.options beschrijft algemene opties van je nameserver.

HOOFDSTUK 6. DNS /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 les. De belangrijkste is:

19

/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.

6.4.2

Caching Nameserver

De standaard conguratie 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 ISPs. 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.

6.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 zonele aanmaken voor deze zone. Een reverse-le 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 6. DNS

20

Dit zone-statement deneert 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-le op dit systeem staat. Dit wordt gerealiseerd met de optie le. Hierachter staat het zone-bestand /etc/bind/db.example.org waar de conguratie van deze zone zal terechtkomen.

Zonele aanmaken Maak het bestand /etc/bind/db.example.org aan met de volgende inhoud: ; ; BIND 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.example.org. @ IN NS ns2.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-le 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 6. DNS

21

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 conguratie 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. Zon 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 le /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 le zou voor zich moeten spreken.

HOOFDSTUK 6. DNS

22

6.5
6.5.1

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 exibele 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 uitvoert, genereer je een NS query 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

information groper

HOOFDSTUK 6. DNS . . . . ;; ;; ;; ;; 516764 516764 516764 516764 IN IN IN IN NS NS NS NS M.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET.

23

Query time: 14 msec SERVER: 208.67.222.222#53(208.67.222.222) WHEN: Mon Apr 12 14:09:06 2010 MSG SIZE rcvd: 228

Uit deze uitvoer kan je dus zien dan 13 servers verantwoordelijk zijn voor ons wereldwijde DNSsysteem.

6.5.2

Veelgebruikte mogelijkheden van dig

Meestal zal je wel opties of argumenten willen meegeven met dig. Enkele courante voorbeelden. gunther@desktop:~$ dig www.khk.be ; <<>> DiG 9.7.0-P1 <<>> www.khk.be ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22771 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.khk.be. IN A ;; ANSWER SECTION: www.khk.be. 3538 IN A 193.190.63.155 ;; ;; ;; ;; Query time: 13 msec SERVER: 208.67.222.222#53(208.67.222.222) WHEN: Mon Apr 12 13:50:53 2010 MSG SIZE rcvd: 44

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 6. DNS ;; 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 ;; ;; ;; ;; Query time: 40 msec SERVER: 8.8.8.8#53(8.8.8.8) WHEN: Mon Apr 12 14:01:45 2010 MSG SIZE rcvd: 44

24

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 specieke 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. ;; ;; ;; ;; Query time: 40 msec SERVER: 8.8.8.8#53(8.8.8.8) WHEN: Mon Apr 12 14:15:34 2010 MSG SIZE rcvd: 65

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

HOOFDSTUK 6. DNS ;; ;; ;; ;; global options: +cmd Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18766 flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

25

;; QUESTION SECTION: ;khk.be. IN MX ;; ANSWER SECTION: khk.be. 1468 IN MX 10 mailhost.khk.be. ;; ;; ;; ;; Query time: 22 msec SERVER: 208.67.222.222#53(208.67.222.222) WHEN: Mon Apr 12 17:42:23 2010 MSG SIZE rcvd: 49

Blijkbaar is er voor de zone khk.be n mailserver voorzien, namelijk mailhost.khk.be. Het ip-adrs ee 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 gedenierd 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. ;; ;; ;; ;; Query time: 14 msec SERVER: 208.67.222.222#53(208.67.222.222) WHEN: Mon Apr 12 17:55:12 2010 MSG SIZE rcvd: 98

HOOFDSTUK 6. DNS

26

6.6
6.6.1

DNSSEC
Testen voor de setup van DNSSEC

We gaan eerst enkele testen uitvoeren waaruit blijkt dan DNSSEC momenteel nog niet werkt. Een eerste eenvoudige test die we kunnen doen is surfen naar n van de volgende webpaginas: ee http://dnssectest.sidn.nl/ http://test.dnssec-or-not.org/ Ook vanop de commandline kunnen we tests uitvoeren. Zo kan je het A-record proberen op te vragen van www.dnssec-failed.org. Als alles goed is ingesteld zouden we geen record mogen ontvangen. gunther@desktop:~$ dig www.dnssec-failed.org A ; <<>> DiG 9.7.3 <<>> www.dnssec-failed.org A ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13556 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.dnssec-failed.org. IN A ;; ANSWER SECTION: www.dnssec-failed.org. 3489 IN A 68.87.64.48 ;; ;; ;; ;; Query time: 8 msec SERVER: 195.130.130.11#53(195.130.130.11) WHEN: Sun Nov 13 16:25:57 2011 MSG SIZE rcvd: 55

We krijgen een A-record terug, DNSSEC werkt dus niet zoals het hoort. Een andere test: gunther@desktop:~$ dig org. SOA +dnssec ; <<>> DiG 9.7.3 <<>> org. SOA +dnssec ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 985 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;org. IN SOA ;; ANSWER SECTION:

HOOFDSTUK 6. DNS

27

org. 828 IN SOA a0.org.afilias-nst.info. noc.afilias-nst.info. 2009847027 1800 900 604800 86400 ;; ;; ;; ;; Query time: 7 msec SERVER: 195.130.130.11#53(195.130.130.11) WHEN: Sun Nov 13 16:09:07 2011 MSG SIZE rcvd: 95

Bij de ags zie je enkel ;; flags: qr rd ra;. Het ontbreken van de ad ag duidt erop dat DNSSEC niet werkt. Een tweede test kan dit bevestigen: gunther@desktop:~$ dig test.dnssec-or-not.net TXT ; <<>> DiG 9.7.3 <<>> test.dnssec-or-not.net TXT ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49527 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;test.dnssec-or-not.net. IN TXT ;; ANSWER SECTION: test.dnssec-or-not.net. 31 IN CNAME 3c1f4442c88296a0.dnssec-or-not.net. 3c1f4442c88296a0.dnssec-or-not.net. 31 IN TXT "Nope! DO bit not set in your query" ;; ;; ;; ;; Query time: 9 msec SERVER: 195.130.130.11#53(195.130.130.11) WHEN: Sun Nov 13 16:09:11 2011 MSG SIZE rcvd: 119

De inhoud van het TXT-record spreekt voor zich.

6.6.2

Caching DNSSEC Nameserver

BIND9 kan momenteel overweg met het DNSKEY formaat. We kunnen de huidige publieke rootkey als volgt bekijken: gunther@desktop:~$ dig @a.root-servers.net . DNSKEY ; <<>> DiG 9.7.3 <<>> @a.root-servers.net . DNSKEY ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11238 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;. IN DNSKEY ;; ANSWER SECTION:

HOOFDSTUK 6. DNS

28

. 172800 IN DNSKEY 256 3 8 AwEAAdNW7YIhcTdqXrzgZjJJ35VjAFT1ArvnhAzXDm7AuGxSQqmGBRmj <snip> . 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF <snip> ;; ;; ;; ;; Query time: 130 msec SERVER: 198.41.0.4#53(198.41.0.4) WHEN: Sun Nov 13 21:36:27 2011 MSG SIZE rcvd: 439

Met deze info kunnen we het bestand /etc/bind/named.conf.keys aanmaken. De eenvoudigste manier is het volgende commando uit te voeren: dig @a.root-servers.net . DNSKEY > /etc/bind/named.conf.keys en dan deze le te bewerken met vi /etc/bind/named.conf.keys zodat hij er als volgt uit ziet: managed-keys { "." initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; }; De .koppelt de key aan de root van DNS hirarchie. Nu moeten we dit bestand inladen in de conguratie van BIND. Pas hier voor het bestand /etc/bind/named.conf aan zodat dit er als volgt uitziet: // // // // // // // 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 "/etc/bind/named.conf.keys"; "/etc/bind/named.conf.options"; "/etc/bind/named.conf.local"; "/etc/bind/named.conf.default-zones";

include include include include

Voeg ook in /etc/bind/named.conf.options de regel dnssec-validation yes; toe. Vergeet niet BIND te herstarten met /etc/init.d/bind9 reload.

6.6.3

Testen na de setup van DNSSEC

We testen het surfen naar onze webpaginas opnieuw:

HOOFDSTUK 6. DNS http://dnssectest.sidn.nl/ http://test.dnssec-or-not.org/

29

Het resultaat is nu zoals verwacht, we zijn beschermd door DNSSEC! Ook de commandline bewijst dit. We voeren de commandos terug uit: gunther@desktop:~$ dig www.dnssec-failed.org A ; <<>> DiG 9.7.3 <<>> www.dnssec-failed.org A ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 46884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.dnssec-failed.org. IN A ;; ;; ;; ;; Query time: 1387 msec SERVER: 10.0.0.168#53(10.0.0.168) WHEN: Sun Nov 13 16:44:32 2011 MSG SIZE rcvd: 39

We krijgen geen A-record terug, zaals dit zou moeten bij www.dnssec-failed.org. gunther@desktop:~$ dig org. SOA +dnssec ; <<>> DiG 9.7.3 <<>> org. SOA +dnssec ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60762 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 7, ADDITIONAL: 1 ...[cut]... ;; ;; ;; ;; Query time: 103 msec SERVER: 10.0.0.168#53(10.0.0.168) WHEN: Sun Nov 13 17:50:44 2011 MSG SIZE rcvd: 536

Bij de ags zie je nu ;; flags: qr rd ra ad;, waarbij ad staat voor Authenticated Data. gunther@desktop:~$ dig test.dnssec-or-not.net TXT ; <<>> DiG 9.7.3 <<>> test.dnssec-or-not.net TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65105

HOOFDSTUK 6. DNS ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;test.dnssec-or-not.net. IN TXT ;; ANSWER SECTION: test.dnssec-or-not.net. 60 IN CNAME 86cca33da3f4b973.dnssec-or-not.net. 86cca33da3f4b973.dnssec-or-not.net. 60 IN TXT "Yes, you are using DNSSEC" ;; ;; ;; ;; Query time: 3210 msec SERVER: 10.0.0.168#53(10.0.0.168) WHEN: Sun Nov 13 17:50:12 2011 MSG SIZE rcvd: 109

30

Het TXT-record klinkt veelbelovend.

6.6.4

Onze eigen zone in DNSSEC

Hoofdstuk 7

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!

7.1

Inleiding

Het Dynamic Host Conguration 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 conicten met netwerksettings. Een DHCP server kan op drie manieren gegevens voorzien: 31

HOOFDSTUK 7. DHCP

32

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 conguratie 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.

7.2

Installatie

Er zijn verschillende DHCP servers beschikbaar voor UNIX-achtige OSen, zowel commercile als e vrij ter beschikking. En van de meest populaire vrije DHCP servers is Paul Vixie/ISC DHCPd e (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 isc-dhcp-server Pakketlijsten worden ingelezen... Klaar Boom van vereisten wordt opgebouwd De status informatie wordt gelezen... Klaar <snip> De volgende NIEUWE pakketten zullen genstalleerd worden: isc-dhcp-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 conguratie. De reden dat er geen default conguratie

HOOFDSTUK 7. DHCP

33

aanwezig is, is puur voor de veiligheid van je netwerk, anders zouden er standaard al (onjuiste) IP-adressen uitgedeeld worden, of conicten 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 conguratie-le aanmaken.

7.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 conguratiebestand van DHCPD nog moeten instellen.

7.4

Basisconguratie DHCPD

De conguratie gebeurt in het bestand /etc/dhcp3/dhcpd.conf. Bekijk onderstaande voorbeeld cong-le, dit geeft een eerste indruk op de basis werking van DHCPD. De meeste opties spreken voor zich: # Voorbeeld configuratie bestand voor dhcpd

HOOFDSTUK 7. DHCP ddns-update-style none; option domain-name "example.org"; option domain-name-servers 208.67.222.222, 8.8.8.8; default-lease-time 600; max-lease-time 7200; 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 conguratie opties: # 10 min # 2 uur

34

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 n DNS-server opgeven door ze te scheiden met ee 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 7. DHCP

35

Er is ook een optie subnet 10.0.0.0 netmask 255.255.255.0 { } vermeld in het voorbeeld conguratiebestand. 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

[ OK ]

7.5

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 *:* gunther@server:~$ cat /etc/services | grep bootps bootps 67/tcp # BOOTP server bootps 67/udp

State

PID/Program name 5496/dhcpd3

7.6

Leases nakijken

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 7. DHCP

36

De logging van de dhcpd-server gebeurd via syslog. Kijk dus in de logles als er iets niet werkt naar behoren. Je kan dit bijvoorbeeld doen met volgend commando: tail -f /var/log/syslog | grep dhcpd

7.7

Niveaus in DHCP-opties

De opties uit het conguratiebestand 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.

7.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

7.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 7. 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" { secondary; 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; } }

37

HOOFDSTUK 7. DHCP Herstart op beide server de DHCPD-service met /etc/init.d/dhcp3-server restart.

38

7.10
7.10.1

Meer conguratie opties


Logging

We zagen dat in de congle 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-faciliteitengebruiken 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.

7.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 conguratie 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 7. DHCP

39

7.10.3

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 8

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 conguratie bestaat uit drie stappen: DHCP congureren zodat deze, na het toekennen van een ip-adres aan een client, de hostnaam en ipadres doorstuurd naar de BIND-server DNS congureren 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.

8.1

Key

We hebben een key nodig, die op beide servers wordt geplaatst. Het aanmaken kan op de DNSserver met de volgende commandos: root@server:~$ rndc-confgen -a > /etc/bind/rndc.key root@server:~$ chmod 600 /etc/bind/rndc.key De inhoud van deze le is: key "rndc-key" { algorithm hmac-md5; secret "nm/hkDdldfjGjsdjSdfsDD=="; }; chmod g+w /var/lib/bind/db.clients.tux.org

40

HOOFDSTUK 8. DHCP EN DYNAMIC DNS

41

8.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"; }; };

8.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";

Hoofdstuk 9

Netlter
9.1 Inleiding

Een computernetwerk, een server of zelfs een desktop-pc zijn niet meer denkbaar zonder een goede rewall. Op een Linux-systeem wordt de rewall netlter meegeleverd in de kernel. De conguratie gebeurt vanuit userspace door middel van de commandos 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.netlter.org. We bekijken Netlter enkel via het commando iptables omdat bijna alle distributies momenteel gebruik maken van een 2.6 kernel.

9.2

Tables en Chains

Een rewall onder Linux bestaat drie tabellen, namelijk de lter-, nat- en mangletabel. De lter-table wordt gebruikt om aan pakketltering 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 rewall is opgebouwd. Een schematisch overzicht:

42

HOOFDSTUK 9. NETFILTER Table Filter Chain FORWARD INPUT OUTPUT NAT PREROUTING POSTROUTING OUTPUT PREROUTING POSTROUTING OUTPUT INPUT FORWARD

43 Chain function Filtert pakketjes die door de rewall, via een andere NIC, gerouteerd worden. Filtert binnenkomende pakketjes, bestemd voor de server waarop de rewall staat. Filtert pakketjes afkomstig van de server waarop de rewall staat en die naar buiten gestuurd worden. Het vertallen van de IP-adressen voor de routering. Het vertaling van de IP-adressen gebeurt na de routering. NAT voor de pakketjes gegenereerd door de host zelf. Aanpassing van de quality of service bits in de TCP pakketten.

Mangle

Netwerk pakketjes gaan via een bepaalde procedure door de rewall. Hieronder kan je een grasche voorstelling zien van deze procedure. In deze setup wordt de rewall bekenen vanuit het opzicht dat er een pakket van het internet, over de rwall, 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 n ee netwerkinterface die data ontvangt en verstuurd. Deze data gaat dan over n en dezelfde NIC. ee

Figuur 9.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.

9.3

De syntax van iptables

De algemene syntax van iptables ziet er zo uit: iptables [-t <table>] <commando> <match> <target> Uitleg: table - De tabel waarop de regel van toepassing is. Indien dit wordt weggelaten, is de regel standaard van toepassing op de lter 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 9. NETFILTER match - De ltercriteria

44

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 orinterend. e Kijk gerust in de man-pages voor meer opties en meer uitleg.

9.3.1

Mogelijkheden bij table

-t table waarbij table de waarde lter, nat en mangle kan hebben. Een commando als iptables -t nat ... zal dus zijn uitwerking hebben in de nat-table.

9.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, ush 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 ltertable 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 lter-table en het de vijfde regel maken.

9.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 9. NETFILTER

45

9.3.4

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.

9.4
9.4.1

Het opbouwen van de rewall


De rewall bekijken

Op de volgende manier kan je de huidige instellingen van je rewall bekijken. gunther@server:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source Chain FORWARD (policy ACCEPT) target prot opt source Chain OUTPUT (policy ACCEPT) target prot opt source

destination

destination

destination

Zoals je kan zien is de rewall is nog niet gecongureerd. 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 rewall-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: lter, mangle of nat (lter is de default).

9.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 9. NETFILTER 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

46

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.

9.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.

9.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

9.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 9. NETFILTER 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 Chain FORWARD (policy ACCEPT) target prot opt source Chain OUTPUT (policy ACCEPT) target prot opt source ACCEPT all -- anywhere gunther@server:~$

47

destination anywhere anywhere

state RELATED,ESTABLISHED tcp dpt:ssh

destination

destination anywhere

Om nu ook webverkeer toe te laten, doen we het volgende: sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

9.4.6

ICMP toelaten

Laten we nu ping toelaten, maar dit beperken tot max 5 echo-requests per minuut, om ooding te voorkomen: iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/minute -j ACCEPT iptables -t filter -A INPUT -p icmp -j DROP iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

9.4.7

Regels verwijderen

Volgende commando zal de derde regel verwijderen uit de INPUT-chain van de lter-table: sudo iptables -t filter -D INPUT 3

9.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-prex ptables denied: voegt een prex toe aan de logging voor de leesbaarheid. log-level 7 zet het syslog level op informational (zie man syslog)

HOOFDSTUK 9. NETFILTER

48

9.5

De rewall 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 n benadering voor Debian-gebasserde systemen, er zijn uiteraard ee 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 le welke we zullen aanspreken bij het opstarten van onze netwerkverbindingen. sudo iptables-save > /etc/iptables.rules We gaan nu dit bestand automatisch laten starten tijdens het opstarten. We openen daarvoor eerst het netwerkinterfases conguratie bestand /etc/network/interfases met een teksteditor. Voeg daar onderaan de volgende regel toe: pre-up iptables-restore < /etc/iptables.rules. 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 rewall-rules behouden zijn.

9.6

De rewall (tijdelijk) uitzetten

Soms kan het nodig zijn om de rewal (tijdelijk) uit te zetten. Je kan makkelijk alle regels ushen: 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 9. NETFILTER

49

9.7

GUI voor netlter

Er zijn verschillende programmas ter beschikking om met een GUI regels te denieren voor netlter. 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 10

Controle van de netwerkinstellingen


10.1 Inleiding

Met behulp van een aantal handige netwerktooltjes die meestal standaard ge nstalleerd worden bij Linux, is het mogelijk de conguratie en werking van je netwerk na te kijken. Een overzicht vn deze tools: ping traceroute mtr tcpdump lsof

10.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:
1 Packet

InterNet Groper

50

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN gunther@server:~$ 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 rtt min/avg/max/mdev = 20.273/21.339/22.352/0.743 ms

51

ttl=52 ttl=52 ttl=52 ttl=52

time=22.3 time=21.4 time=20.2 time=21.3

ms ms ms 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 aeiden 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@server:~$ 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@server:~$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 net.ipv4.icmp_echo_ignore_all = 1 gunther@server:~$ 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
2 Dit is een maat voor de spreiding van een variabele, gedenieerd als de wortel uit de variantie. Men zou kunnen zeggen dat de standaarddeviatie de gemiddelde afwijking is van het gemiddelde.

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN Pingen terug mogelijk maken gaat even gemakkelijk: gunther@server:~$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0 net.ipv4.icmp_echo_ignore_all = 0 gunther@server:~$ 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.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

52

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@client:~$ 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!

10.3

traceroute

Het commando traceroute wordt gebruikt om de weg te volgen die een pakketje van uw hostmachine aegt 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@server:~$ 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 (85.74.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 * * *

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

53

* 209.85.255.143 (209.85.255.143) 18.305 ms 72.14.239.199 (72.14.239.199) 209.85.255.118 (209.85.255.118) 26.994 ms 209.85.255.130 (209.85.255.130) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

36.668 ms 25.186 ms 209.85.25

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.

10.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.

10.5

tcpdump

Het commando tcpdump wordt gebruikt om netwerktraek 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
3 Vroeger

was dit Matts traceroute mar tegenwoordig My traceroute

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN

54

Figuur 10.1: Het programma mtr in werking. -q Geeft minimale output -v Geeft veel meer output -c Voert tcpdump een specieek 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. 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

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN IP 10.0.0.55.44185 > 208.69.35.230.80: IP 10.0.0.55.44185 > 208.69.35.230.80: IP 10.0.0.55.44185 > 208.69.35.230.80: IP 10.0.0.55.44185 > 208.69.35.230.80: IP 10.0.0.55.44185 > 208.69.35.230.80: ^C 16 packets captured 18 packets received by filter 0 packets dropped by kernel gunther@desktop:~$ Flags Flags Flags Flags Flags [.], ack 4321, win 243, [.], ack 4595, win 288, [.], ack 4921, win 333, [P.], seq 623:1432, ack [.], ack 5207, win 378,

55

options [nop,nop,TS val 8002395 options [nop,nop,TS val 8002395 options [nop,nop,TS val 8002396 4921, win 333, options [nop,nop options [nop,nop,TS val 8002644

Zoek je een grasch programma met gelijkaardige functionaliteit, kijk dan een naar http://www.wireshark.org.

10.6

lsof

Het programma lsof4 kan je gebruiken om data ow, 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 les 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
4 LiSt

FD 4u 10u 11u 18u 19u 19u 20u 5u 4u 3u 4u 16u 17u 18u 19u 20u 21u 22u 5u 3r 3u 3u

TYPE DEVICE SIZE NODE NAME IPv4 4975 TCP *:swat (LISTEN) IPv4 5019 UDP *:netbios-ns IPv4 5020 UDP *:netbios-dgm IPv4 5939 UDP server.lan:netbios-ns IPv4 5940 UDP server.lan:netbios-dgm IPv4 5106 TCP *:microsoft-ds (LISTEN) IPv4 5108 TCP *:netbios-ssn (LISTEN) IPv4 5152 UDP *:bootps IPv4 4602 UDP *:bootpc IPv4 5585 TCP *:ssh (LISTEN) IPv6 5587 TCP *:ssh (LISTEN) IPv4 5774 UDP *:ntp IPv6 5775 UDP *:ntp IPv6 5779 UDP localhost:ntp IPv6 5780 UDP [fe80::a00:27ff:feaf:4b69]:ntp IPv6 5781 UDP [fe80::a00:27ff:fec1:732b]:ntp IPv4 5782 UDP localhost:ntp IPv4 6615 UDP server.lan:ntp IPv4 5842 UDP *:bootpc IPv4 5997 TCP server.lan:ssh->clientPC.lan:47295 (ESTABLISHED IPv4 5997 TCP server.lan:ssh->clientPC.lan:47295 (ESTABLISHED IPv4 8739 TCP *:ftp (LISTEN)

Open Files

HOOFDSTUK 10. CONTROLE VAN DE NETWERKINSTELLINGEN wget 5542 root@server:~# root 3u IPv4 13807

56

TCP server.lan:37664->91.189.94.156:www (ESTABLISHE

Je kan je nog specieker gaan door de volgende opties te gebruiken: lsof i :80 zoeken op een specieke poort lsof i :ssh zoeken op een specieke service lsof i @www.khk.be zoeken op een hostname

Appendices

57

Iptables
Dit is een voorbeeld van een shell-script om een rewall 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 58

IPTABLES /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

59

/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

IPTABLES

60

/sbin/iptables /sbin/iptables /sbin/iptables /sbin/iptables

-A -A -A -A

OUTPUT OUTPUT OUTPUT OUTPUT

-p -p -p -p

tcp tcp tcp tcp

--dport --dport --dport --dport

20 -j ACCEPT 21 -j ACCEPT 2121 -j ACCEPT 50000:60000 -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 cong-le 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 didnt # 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; 61

DEFAULT CONFIG-FILE VAN DHCPD #} # This declaration allows BOOTP clients to get dynamic addresses, # which we dont 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.

62

#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"; #}

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; # } #}

63

Overzicht van mogelijken tijdswaarden in zoneles voor DNS


BIND werkt steeds met seconden in zijn tijdswaarden. Het is echter mogelijk om afkortingen te gebruiken bij het speciceren 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

64

Bibliograe
[1] Is your dhcp server authoritative? http://www.isc.org/les/auth.html. 34 [2] M. Andrews. Negative Caching of DNS Queries (DNS NCACHE). RFC 2308 (Proposed Standard), March 1998. Updated by RFCs 4035, 4033, 4034. 12, 21 [3] D. Barr. Common DNS Operational and Conguration Errors. RFC 1912 (Informational), February 1996. 13 [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. 12 [5] P.V. Mockapetris. Domain names - implementation and specication. 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. 12

65

Вам также может понравиться