# Linux Systeembeheer/Computerparken opvolgen en beheren

In dit hoofdstuk van de cursus netwerken laten wij enkele manieren zien om een computerpark te beheren en op te volgen.

## DHCP
### Inleiding

Het DHCP (Dynamic Host Configuration Protocol) geeft client machines de mogelijkheid om zichzelf via het netwerk te configureren, inclusief netwerkadres. Via een DHCP server kunnen machines worden geconfigureerd met hun IP adres, een subnet mask, een default route, DNS server, WINS server etc. Als hiermee alle configuratiegegevens worden ingesteld die geraakt worden bij een omnummering, kan een omnummering voor deze machines dus volstaan met het aanpassen van de DHCP server configuratie.
DHCP kan ook gebruikt worden voor servers en printers, die veelal een vast IP adres nodig hebben (in verband met hun DNS entries). Veel DHCP servers ondersteunen dit doordat ze aan het MAC adres een vast nummer kunnen toewijzen. Het kan erg handig zijn om zo veel mogelijk machines via DHCP te configureren. De DHCP server is dan ook een vrij essentiële netwerk component: als die gestoord is kan er geen machine worden opgestart.
Het protocol maakt gebruik van twee componenten; de DHCP-server en de DHCP-client. De client verstuurt tijdens het opstarten een DHCP-verzoek (de DHCP-request) in de vorm van een broadcast naar de server. Omdat het een broadcast is, gaat het pakketje dus niet verder dan de lokale router en kan een DHCP-server op een ander netwerksegment niet bereikt worden. De DHCP-server stuurt als reactie op de DHCP-request een pakketje terug met daarin de benodigde informatie. Dit pakketje wordt ook wel de DHCP-offer genoemd. De client antwoordt hierop met een DHCP-ack om aan te geven dat hij met deze DHCP-server in zee wil gaan. Om een DHCP-verzoek succesvol te laten verlopen, is het nodig dat de DHCP-server op hetzelfde netwerksegment als de client voorkomt; het verzoek wordt immers verstuurd in de vorm van een Broadcast. Als de DHCP –server op een ander segment voorkomt, kan op de router gebruik gemaakt worden van de 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. DHCP-relay agents zijn beschikbaar voor vrijwel elke router.

### Leerdoelen

* De functie van een DHCP-server begrijpen
* Een Linux DHCP-server kunnen opzetten

### DHCP: Algemene uitleg

De DHCP-server die wij opstellen kent adressen toe aan de hand van dynamische allocatie. Hierbij krijgt een client alleen voor een bepaalde periode de beschikking over een IP-adres. De duur van deze periode wordt gedefinieerd in de zogenaamde lease. Hierbij moet een reeks adressen die uitgedeeld kunnen worden (de range) gedefinieerd worden. Deze reeks bestaat uit een begin- en een eindadres. Elk adres dat tussen het begin en het eindadres voorkomt kan uitgedeeld worden. Nadat de lease-periode verstreken is, moet de client opnieuw vragen of hij het adres nog een tijdje kan gebruiken. Hoe lang de lease periode precies duurt en welke parameters er ingesteld worden, wordt bepaald in het algemene configuratiebestand dhcpd.conf.

### Installatie en configuratie van een DHCP-server

Installeer de service.
Zorg ervoor dat de dhcp-service start bij het opstarten van de server:
Bovenstaand commando is gelijk aan "chkconfig --level 2345 dhcpd on && chkconfig --level 016 dhcpd off", maar korter. In runlevel 0 (shutdown), 1 (single user mode) en 6 (reboot), staat de DHCP-server uit. In runlevel 2, 4 (user defined run levels), 3 (console), en 5 (gui), staat de DHCP-server aan.
Om de DHCP-server naar eth0 te laten luisteren, wijzigen we de systeemconfiguratie.
Vooraleer we de service starten gaan we deze configureren. Het configuratiebestand vind je ergens in de map /etc, vaak /etc/dhcpd.conf maar soms ook /etc/dhcp/dhcpd.conf. Een voorbeeld configuratiebestand is eveneens beschikbaar, zie /usr/share/doc/dhcp-*/dhcpd.conf.sample.
Volgende lijnen voegen we toe aan de outer scope, dat is bovenaan het bestand.
Voor meer informatie over bovenstaande parameters verwijzen we naar de man-page.
Een subnet definiëren we met het sleutelwoord subnet. Voorbeeld:
Een client met een statisch IP adres definiëren we met het sleutelwoord host. Voorbeeld:
Syntaxcontrole van het configuratiebestand (optioneel).
Starten van de DHCP-service.
Bij mislukking raadplegen we /var/log/messages.

### Labo-opdracht: configuratie van een DHCP-server

We willen in een computerlokaal alle desktop-pc's een vast IP-adres geven via een DHCP-server. Bezoekers die met een laptop op het netwerk in het lokaal aansluiten, krijgen een dynamisch toegewezen IP-adres. Het schrijven van een DHCP-configuratie die geschikt is voor deze opstelling is een saai en repetitief werkje dat we best kunnen automatiseren, bijvoorbeeld met een Bash script. Dat is het doel van dit labo.
Als invoer gebruiken we een tekstbestand met de gewenste IP-adrestoewijzingen per pc. Op elke lijn van het bestand staan de gewenste hostnaam, het MAC-adres, het gewenste IP-adres (enkel host-deel ervan) en (eventueel) commentaar, gescheiden door TAB-tekens, bijvoorbeeld:
De volgende algemene instellingen, moeten configureerbaar zijn m.h.v. variabelen:
* De standaard-locatie van het invoerbestand (zie hierboven) en uitvoerbestand (bijv. /etc/dhcpd.conf)
* Domeinnaam
* Het network-mask en broadcast-adres
* IP-adressen van gateway, en DNS server(s)
* Bereik van de dynamisch uit te delen IP-adressen (= laagste en hoogste IP)
* Standaard en maximale lease-tijd
Het resulterende configuratiebestand moet conform de syntaxis van /etc/dhcpd.conf zijn en makkelijk leesbaar (commentaar, indentatie, ...). Er is een deel met de vaste instellingen voor het hele netwerk (routers, subnet masker, broadcast-adres, lease-tijd en bereik van IP adressen. Daarna volgen de toewijzingen van IP-adressen per pc. Afhankelijk van het MAC-adres wordt een vast IP toegekend en een hostnaam ("fully qualified", d.w.z. met de domeinnaam er bij). Merk op dat Linux-hosts deze hostnaam zullen aanvaarden en gebruiken, maar dat Windows pc's deze optie negeren.
Verifieer de werking van je script door een opstelling te maken met een DHCP-server en een client. In het geval van fysieke pc's verbind je die best met een cross-overkabel, losgekoppeld van het netwerk. Je kan ook op een virtueel netwerk testen, maar zorg dan wel dat de virtuele DHCP-server (gesimuleerd door de virtualisatiesoftware) uit staat.

### Testen

Stap 1: De DHCP-service van VirtualBox uitschakelen (File -> Preferences -> Network -> Host Only Ethernet adapter -> Enable DHCP Server uitzetten). Stap 2: In de network settings (Settings -> Network) van de VM waar de DHCP-service op draait een bridged network adapter instellen. Stap 3: VM starten en controleren of de DHCP-service aan staat. Stap 4: Computer to computer wireless network opzetten. Vervolgens een andere computer verbinden met dat netwerk. Stap 5: Controleren of de IP-adressen door de DHCP-server zijn toegekend.

## DNS
### Inleiding

DNS (intern en extern)
Het Domain Name System (DNS) is het systeem en protocol dat op het Internet gebruikt wordt. Alle domeinnamen en IP-adressen staan in een database en een DNS-server matcht deze gegevens. Een DNS-server vertaalt niet, omdat er geen enkele logica zit tussen de domeinnamen en IP-adressen. Een DNS-server of Domain Name Server is op deze technologie gebaseerd, en maakt deze matchen, zodat computers niet alleen via het (onpraktische) IP-adres benaderd kunnen worden, maar ook via een hostname (computernaam). Ook het omgekeerde is mogelijk (reverse DNS): een IP-adres wordt gematcht naar de ingestelde hostname. Hoewel dit de meest gebruikte mogelijkheden zijn, wordt DNS ook op andere manieren gebruikt, bijvoorbeeld voor het bepalen van de mailservers voor een domein. Daarnaast kan ook het Sender Policy Framework (SPF) aan TXT records in een DNS-server worden toegevoegd. Mailservers kunnen aan de hand van dit record checken of de herkomst van de e-mail klopt. SPF is één van de instrumenten die zijn ingezet ter bestrijding van wereldwijde spam.
De Domain Name Servers spelen een belangrijke rol in een omnummer proces. Omdat ze namen op IP adressen afbeelden (en andersom) is dit de plaats waar de meeste aandacht nodig is. Organisaties met een firewall hebben meestal twee DNS systemen: één waarin alle adressen voorkomen, voor intern gebruik, en een waarin alleen een aantal extern zichtbare adressen voorkomen, een zogenaamde splitDNS.
DNS werkt met expiration: aan de client wordt verteld hoe lang een bepaald gegeven geldig is. Deze periode staat meestal op een paar dagen. Het is verstandig dit voor een migratie terug te brengen naar een uur. Oude gegevens zullen dan minder lang overleven, ten koste van een verwaarloosbaar hogere belasting op de DNS servers.
Het is van essentieel belang dat het hele DNS beheer van een organisatie op orde is voordat aan een omnummering wordt begonnen. Zoals eerder is aangegeven is het verstandig dit beheer in overeenstemming te brengen met het beheer van machines en nummerplannen.

### Leerdoelen

* De werking van DNS begrijpen
* Statische toewijzing van hostnamen aan IP-adressen via /etc/hosts kunnen instellen
* Een Linux DNS relay server kunnen opzetten met Dnsmasq
* Een Linux DNS server kunnen opzetten met BIND
** de syntax van /etc/named.conf begrijpen en kunnen toepassen
** de syntaxis van zone files begrijpen
** zone files en reverse zone files voor een bepaald domein kunnen opstellen
*** Name-servers toewijzen (NS)
*** IP-adrestoewijzingen voor hosts instellen (A en AAAA, PTR)
*** Aliassen toekennen (CNAME)
*** Mailservers voor een domein instellen (MX)
*** Diensten in een domein adverteren (SRV)
** een slave DNS-server voor een domein kunnen opzetten
** de functie van de root hints file begrijpen

### BIND9 (Berkeley Internet Name Deamon)

BIND (of Berkeley Internet Name Daemon) is de meest gebruikte DNS-server-software. De software werd ontwikkeld aan de Universiteit van Californië, Berkeley. Het project werd ondersteund en later overgenomen door het Internet Systems Consortium.

#### Installatie

Het pakket bind-utils bevat enkele handige tools zoals nslookup, host en dig.
Je kan het versienummer van de zojuist geïnstalleerde bind daemon controleren met het commando named.

#### Configuratie

We kopiëren het BIND9 voorbeeldbestand localhost.zone naar de map /var/named.
Wordt er geen voorbeeldbestand geleverd bij de installatie, maak dan zelf het bestand /var/named/localhost.zone aan en voeg er onderstaande configuratie aan toe.
Vervolgens maken we het bestand /var/named/a.net.db aan.
We voegen nu onze DNS-server toe aan het bestand /etc/resolv.conf.
Tenslotte configureren we de firewall.
We starten de DNS-server met de service named.
Een slave-server opzetten
Om een slave-server op te zetten moeten we het configuratiebestand named.conf aanpassen.
Deze regels geven aan dat we een slave-server opzetten voor het domein a.net, dat daarvoor een bestand met de naam slave/a.net wordt bijgehouden, en dat er gebruik gemaakt wordt van de master-server op 192.0.2.1.
Het a.net.db bestand van de master-server kunnen we gewoon kopiëren.
Als dit allemaal gedaan is kan je de DNS-server starten. De server neemt dan automatisch contact op met de root-server en haalt daar de gegevens op.

#### Testen

Een DNS-server ondervragen kunnen we doen met de tool dig (Domain Information Groper).
Een query uitvoeren kunnen we doen met behulp van nslookup.

### Labo-opdracht: een Linux DNS-server opzetten met BIND

We gaan met BIND een DNS-server opzetten voor het domein a.net met de volgende hosts:
| Hostnaam | IP-adres | Functie |
| Phobos | 192.0.2.1 | DNS1 |
| Deimos | 192.0.2.2 | DNS2 |
| mercurius | 192.0.2.10 | Webserver |
| venus | 192.0.2.11 | Mailserver |
| mars | 192.0.2.12 | FTP-server |
Zorg er voor dat:
* De server beschikt over een root hints file
* Elke server het correcte IP-adres toegewezen krijgt
* De webserver kan bereikt worden via "www.a.net"
* Mail verstuurd naar "naam@a.net" wordt afgeleverd bij de mailserver venus
* Mars geadverteerd wordt als een FTP server (prioriteit 10, weight 0, poort 21)

## LDAP
### Inleiding

OpenLDAP is het Open Source project voor het netwerkprotocol Lightweight Directory Access Protocol (LDAP). Dat is een protocol dat gebruikt wordt om informatie van een zgn. directory-server op te zoeken. Dit is eigenlijk een soort databank, maar informatie zit niet opgeslagen in tabellen zoals we gewend zijn bij relationele databanken. In plaats daarvan is de informatie georganiseerd in een hiërarchische structuur (een boom). Bij de wortel van de boom gebruikt men voor deze structuren vaak DNS-domeinen. Dieper in de boom vinden we vaak records die organisatorische eenheden (afdelingen in een bedrijf, bijvoorbeeld) voorstellen, personen, apparatuur, enz.
Je kan een LDAP-server “from scratch” manueel opzetten, maar dat is niet direct voor de hand liggend. Recentelijk heeft men binnen het Fedora project inspanningen gedaan om dit proces wat makkelijker te maken. Het resultaat is 389 Directory Server.
In wat volgt zetten we een LDAP-server op die toelaat het inloggen op computers te centraliseren.

### Leerdoelen

* Het inloggen op computers binnen een netwerk centraliseren met een LDAP-server

### Installatie 389 Directory Server

Eerst voegen we een nieuwe gebruiker ldapuser toe op de machine die als LDAP-server zal dienen. Op client-machines zullen we als ldapuser kunnen inloggen terwijl die gebruiker op dat systeem lokaal niet bestaat.
Wijzig het wachtwoord van de zojuist aangemaakte gebruiker:

#### Installatie van de server

1. Installeer de 389 directory server via yum. De Fedora Directory server heet nu 389-ds.
Voor Centos is dit:
Installeer de server en de clients:
2. Voer het installatiescript uit vanuit een root console:
    Het doorlopen van het installatie script
    2.1. Would like to continue with set up? [yes]
       Druk op enter
    2.2. Do you agree with the license terms? [no]
       Voer Yes in
    2.3. Would you like to continue? [no]:
       Voer Yes in
    2.4. Choose a setup type [2]:
       Kies voor de standaard optie 2 (Typical Installation), om de setup te doorlopen.
       De typical installation is de standaard en meest genomen setup mode. Deze mode helpt extra informatie te verschaffen bij de directory service, zoals suffix en de configuratie directory informatie, terwijl de procedure snel doorheen het setup-proces gaat.
    2.5. Computer name [computernaam]:
       Druk ENTER om de standaard waarde te aanvaarden (dit is de volledige naam van de localhost).
       Deze hostname wordt gebruikt om de Directory Server instantienaam , de administration domain en de basissuffix te creëren. Zorg ervoor dat deze naam verwijst naar een geldig IP-adres en dat dit IP-adres overeenkomt met de hostname.
    2.6. System User [ldapuser] en System Group [ldapuser]:
       Geef het user ID en group onder welke je de Directory Server wenst te draaien.
          NOTE: If you enter root for the System User name, the Administration Server cannot start. The Administration Server runs as a component of the Apache server, and the HP-UX Apache-based Web Server does not allow the Apache server to run with the user ID root.
    2.7 Do you want to register this software with an existing cofiguration Directory Server [no]?
       Druk op enter
    2.8 Configuration directory server administrator ID [admin]:
       Druk op ENTER om de default waarde te gebruiken of geef zelf een ID in. Geef daarna een paswoord in.
    2.9. Administration Domain[computername]:
       Druk op ENTER om de default waarde te gebruiken of geef ze manueel in.
    2.10. Directory server Network port [389]::
       Druk op ENTER om de default waarde te gebruiken.
    2.11. Directory server Identifier [...]::
       Druk op ENTER om de default waarde te gebruiken.
    2.12. Suffix[dc=...]::
       Druk op ENTER om de default waarde te gebruiken (Let erop dat voor elk deel in je computername gescheiden door een punt een dc=DeelVanComputername bestaat.
    2.13. Directory Manager DN [cn=Directory Manager]::
       Druk op ENTER om de default waarde te gebruiken of geef het manueel in. Geef daarna een paswoord in.
    2.14. Password::
       Geef hier een wachtwoord in en bevestig het daarna.
    2.15. Administration port number [9830]::
       Druk op ENTER. Dit poortnummer wordt gebruikt om de instantie te gebruiken.
    2.16.Are you ready to set up your servers? [yes]:
       Dit is het einde van de installatie procedure, druk hier dus ENTER.
Indien er iets fout gelopen is tijdens de installatie, voer dan volgend commando uit:
3. Maak dit toegankelijk voor SSL
       Als je fouten krijgt ga je naar de site zelf https://github.com/richm/scripts/tree/master%2Fsetupssl2.sh?raw=true en zoek je daar in de lijst van scripts naar setupssl2.sh. Kopieer het script en paste het in het reeds aangemaakte setupssl2.sh script
       #./setupssl2.sh /etc/dirsrv/slapd-(computernaam)
4. Zowel administation server als directory server zouden nu moeten geïnstalleerd zijn en draaien
5. Download nu de migrationtools via yum:
6. de lokale users importeren in de LDAP database via commando:
De url om in te voeren in de 389-console login is vaak: http://localhost:9830. (Indien de melding wordt gegeven dat de server niet gestart is, geef dan het commando /etc/init.d/slapd start in.)
7. Start de 389-console via het commando 389-console. Als deze niet wil opstarten voer dan volgende commando's uit: service dirsrv start en service dirsrv-admin start. Ga naar de directory server en voeg daar een nieuwe gebruiker toe (bij keuzelijst kies voor "people") zelf users aanmaken in de 389-console: ENABLE POSIX USER ATTRIBUTES !!!!!! (dit is hét euvel der euvels, seriously) en zelf een UID toekennen (speelt geen role) en home directory instellen

#### Configuratie van de clients

Vanuit een root console:
Kies er voor om LDAP te gebruiken als authenticatiemethode en MD5 als wachtwoordtype
Geef vervolgens het IP adres van de LDAP server in. Vergeet niet om er ldap:// voor te zetten Vul daarna het domain dat je bij de configuratie van de LDAP server hebt gebruikt in.
De nodige configuratiebestanden zijn nu bijgewerkt

### Labo-opdracht

Configureer een RedHat-gebaseerd Linux-systeem om LDAP-authenticatie te centraliseren.
* Voeg op de machine waarop de LDAP-server zal draaien een gebruiker ldapuser toe
* Zet een LDAP-server op die gebruikersinformatie bijhoudt
* Configureer een andere pc zodat die bij inloggen de LDAP-server zal aanspreken voor de wachtwoordcontrole
* Test dit door op de "client"-pc in te loggen als ldapuser
Je mag 389 Directory Server gebruiken voor het uitvoeren van de opdracht. Merk op dat je de software niet moet downloaden van de website. De applicatie zit in de repositories, dus een eenvoudige yum install volstaat.

## SNMP
### Inleiding

Niet aan iedere server wordt een toetsenbord en een scherm gekoppeld, dus is het handig deze van op afstand te kunnen beheren en bekijken. SNMP wordt veelal gebruikt om bij apparaten zoals servers en switches van op afstand toezicht te kunnen houden en ze te beheren. SNMP geeft de data van de server weer in de vorm van variabelen. Via een management applicatie zoals Nagios kan je die gegevens opvragen, bekijken en met sommige managers beheren.

### Leerdoelen

* Het Simple Network Management Protocol (SNMP) en de functie ervan kennen
** Volgende gerelateerde termen kennen en begrijpen: agent, manager, fetch/store operaties, Management Information Base (MIB), Structure of Management Information (SMI) tree
** Net-snmp kunnen installeren onder Fedora of CentOS als agent en als manager, vanuit de manager informatie opvragen aan een agent
** Geavanceerde SNMP software kennen: Nagios, ZenOSS, OpenNMS

### Wat is SNMP

SNMP maakt gebruik van het applicatie protocol om een server op afstand te monitoren en te beheren.
* manager: monitoring / beheer applicatie op de sysadmin's computer (= client)
* agent: applicatie die draait op de server
Je hebt 2 operaties:
* fetch: een waarde verkrijgen van de server (monitor)
* store: een waarde instellen (control)
Management Information Base (MIB)
MIB is een databank die alle objecten bevat die SNMP kan raadplegen. Ieder object heeft zijn unieke naam (Object ID, OID) en een definitie. Dit maakt het eenvoudig om een 'fetch & store' operaties uit te voeren. Alle MIB variabelen om protocollen zoals UDP, TCP, IP, Ethernet, ARP en apparaten zoals bridges, switches en printers zijn aanwezig. Maar de databank kan eenvoudig worden uitgebreid om nieuwe netwerk protocollen of nieuwe hardware apparaten te kunnen implementeren.
Structure of Management Information tree (SMI)
Bevat de structuur van de OID's. Dit is vastgelegd in de SNMP standaard.

### Installatie SNMP op de agent

Installatie SNMP op de client (de server die je wil volgen op afstand).

#### Instellen SNMP

Een backup maken van het configuratiebestand, en vervolgens het bestand legen.
Je hebt verschillende mogelijkheden wat betreft configuratie en beveiliging.
* Minimaal en onveilig (SNMPv1)
* Beperkte toegang voor vertrouwde hosts (SNMPv1&2)
* Beveiligde verbinding (SNMPv3)
Een SNMP user aanmaken met behulp van net-snmp-config

#### Testen SNMP
### Installatie van een manager

Er zijn verschillende software pakketten om de server op te volgen, voorbeelden zijn Zenoss en Nagios.

#### Zenoss
##### Installatie

Installeer eerst MySQL als dit nog niet gebeurd is.
Er mag default geen wachtwoord ingesteld zijn, indien dat wel het geval is voer dit commando uit:
Installatie van andere benodigde software.
Download en installeer de Zenoss software.
Iptables aanpassen.
Firewall herstarten.
Zenoss starten.

##### Testen

Surfen naar poort 8080 en de Zenoss pagina zou zichtbaar moeten zijn.
Daar wordt je gevraagd om een nieuw account aan te maken. De standaard username is "admin", het wachtwoord "zenoss".

#### Nagios
##### Installatie

Email verificatie, voor als je alerts wilt ontvangen.
Account aanmaken voor web interface.
Je kan nu per host, een generieke config file maken in de map /etc/nagios/objects en deze inladen in nagios.cfg. Voor de opzet van de nieuwe config file kan je localhost.cfg als voorbeeld gebruiken.

##### Testen

Bereikbaar via: http://localhost/nagios/.
Als je problemen hebt bij het inloggen, kijk je best eens de nagios.cfg file na. Verifiëer dat je username effectief op je gekozen username staat.
Om je config te testen op eventuele fouten kan je in commandline het volgende uitvoeren
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

### Methode Kevin Van den Bossche en Nicolas Van de Casteele

Deze methode implementeert zowel v1, v2c als v3. Deze methode is deels gebaseerd op bovenstaande tutorial. Werkt op Fedora 14.

#### Installatie en configuratie SNMP

gedit snmpd.conf

#### SNMP testen

V1 testen:
V2C testen:
V3 testen:

#### Extra: syslocation en syscontact

Je kan zelf ook variabelen definiëren, wij gaan in dit geval syslocation en syscontact instellen.
Lokaal testen

#### Nagios

Installatie
Test

## Bibliografie

DHCP
* Bronvermelding inleiding + algemene uitleg: Leerboek Linux Deel 3 - Linux in een netwerk (Sander van Vugt)
SNMP
* https://www.it-slav.net/blogs/2008/11/11/install-and-configure-snmp-on-rhel-or-centos/
* https://www.net-snmp.org/
* https://www.webaj.com/how-install-zenoss-1-1-2-centos-5-0-server-and-network-monitoring.htm
* https://heanet.dl.sourceforge.net/project/zenoss/Documentation/zenoss-3.0.x-docs/zendocs-3.0.3/Zenoss_Core_Installation_04-102010-3.0-v05.pdf