Uitblinken in Network services
- August 18, 2016
- 0
De adoptie van Linux op de werkplek gaat veel minder snel dan we allemaal zouden willen. Maar in devices, in het datacenter van organisaties, bij hosting partijen en thuis als server doet Linux het wel uitstekend. Sterker nog, UNIX/Linux was al sterk in netwerkservices voordat Microsoft enige naam had.
Wat zijn het eigenlijk?
Eerst maar eens even een definitie. De term netwerkservice wordt steeds breder en er zijn meerdere definities, afhankelijk van hoe je hier naar kijkt (vanuit het OSI-model of de Internet Protocol Suite). Wij kijken er even iets minder academisch naar. Een netwerkservice is een stukje software dat op een computer draait, dat veelal wordt meegeleverd en geïmplementeerd is binnen een besturingssysteem en dat zijn diensten in de achtergrond aanbiedt. In de achtergrond – als daemon – wil zeggen, er zijn geen gebruikers die zelf met een GUI communiceren met de services. Alleen beheerders communiceren met de services voor beheer (instellingen, starten, stoppen en dergelijke). Hoe communiceren netwerkservices dan? Dat kan feitelijk op twee manieren: peer-to-peer en client-server, door middel van een specifiek voor de service ontwikkelt protocol.
Red Hat Services Configuration tool
Traditie van services
In de begin van het internet (je weet wel, nog vóór het www) waren netwerkservices vooral bedoeld om het netwerk en enkele elementaire zaken goed te laten draaien. Het aardige is dat al deze services nog steeds werken en hun diensten kunnen verrichten als je dat wilt. Hierbij kun je denken aan telnet en rlogin (op afstand inloggen), FTP en TFTP (file transfer), TFTP, BOOTP, PXE, DHCP en DNS (starten, adressering), SMTP (mail), NNTP (news), SNMP (netwerk management), whois, rwhois, finger (directory info opvragen), LPD (printen) en NTP of timed (tijdsynchronisatie).
Bij een peer-to-peer service communiceren ‘gelijkwaardigen’ met elkaar, dus twee dezelfde services op twee verschillende servers in het netwerk. Veel netwerkservices zijn client/server-gebaseerd, wat wil zeggen dat op het ene systeem de service als een achtergrondproces (daemon) draait dat staat te luisteren op een specifiek poortnummer en op het andere systeem is het een client. De client en server communiceren via het specifieke protocol. De client is een agent (in de achtergrond) of applicatie op een werkplek of server en kan een bediening hebben – grafisch of via de opdrachtregel – voor de gebruiker. Denk aan telnet, waarmee je inlogt op een systeem waar telnetd draait. Deze elementaire netwerkservices vormen al vele jaren een stabiele basis van het internet en bedrijfsnetwerken. Stel je eens een organisatie of internet voor zonder DNS, DHCP en daardoor eigenlijk zonder UNIX of Linux. Onmogelijk!
Security
Omdat netwerkservices continue luisteren op de TCP/UDP-poortnummers en hierdoor ook een potentieel gevaar vormen voor aanvallen, is het slim als beheerder om ongebruikte services uit te schakelen en draaiende services te blijven patchen indien nodig. Ook in de firewall van je thuisnetwerk of bedrijfsnetwerk kun je poorten blokkeren en zo communicatie van de service naar buiten of binnen verhinderen. Sommigen passen het standaard poortnummer aan, zodat de service via de andere poort wel kan communiceren, mits de client ook gebruik maakt van dat aangepaste poortnummer. Maar ja, met een poortscanner-app is dat ook simpel te vinden, dus veilig is ook dat niet. Er zijn services die je niet door je firewall naar buiten wil laten en er zijn diverse services gevoelig voor Buffer Overflow-aanvallen en DoS-aanvallen op de bekende poortnummers. Er zijn ook services die per definitie niet veilig zijn, denk bijvoorbeeld aan rlogin, rsh en telnet of FTP. Het authenticatieproces is immers niet versleuteld. Hiervoor zijn veilige alternatieven ontwikkeld, die we als opvolgers mogen beschouwen en aangeraden worden, zoals SSH of SFTP. Ander protocollen versleutelen de communicatie standaard niet, zoals NFS (Network File System) en SMB (Samba) om filesystemen via het netwerk aan te bieden en te benaderen. NFS en SMB vormen ook de basis voor veel multiprotocol SAN en NAS-servers.
YaST2 – Service manager
At your services
De netwerkservices vind je traditioneel terug in het bestand /etc/services. Dit bestand bevat een lange lijst met standaard services die je Linux-systeem kan bieden. Behalve de services (protocollen) zie je ook het poortnummer dat de service gebruikt en of het een UDP-poort (connectionless) of TCP-poort (connection oriented) betreft. Vaak zie je ook een korte beschrijving zodat je kan zien welke service het betreft. De lijst is lang niet compleet, optioneel is er van alles aan toe te voegen. Denk bijvoorbeeld aan databases die vaak een hele serie poortnummers en protocollen toevoegen voor communicatie tussen database servers onderling en databases clients met database servers. Kijk bijvoorbeeld eens op: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers.
Traditioneel gezien heeft de super-deamon, de internet Daemon /etc/inetd of de meer veilige opvolger /etc/xinetd de regie over een aantal netwerkservices. Het is een soort regelneefje dat verzoeken voor services ontvangt en die vervolgens doorstuurt naar de juiste service en deze opstart indien nodig. Het zorgt er dus voor dat netwerkservices on-demand gestart worden, in plaats van tijdens het opstarten van het systeem en specifiek aangeven welke hosts niet of juist wel de verbinding mogen initiëren. BSD-varianten hebben het altijd wat eenvoudiger gehouden. Je had eigenlijk maar drie scripts /etc/rc, /etc/rc.boot en /etc/rc.local waarbij met name de laatste door de beheerder gewijzigd wordt voor eigen of extra services. Op moderne BSDs vind je ook /etc/rc.d, /etc/defaults/rc.d, /usr/local/etc/rc.local en enkele andere bestanden. Als je Linux systeem start vanuit een script in /etc/rc.d. Daarbij wordt het configuratiebestand /etc/inetd.conf gelezen voor info over de services. Inetd start de daemons van de netwerkservices die je vindt in dat bestand op basis van verzoeken van clients en andere services om poortnummers. Maar er zijn ook netwerkservices die apart gestart worden, vaak al tijdens booten van je systeem. Die zijn niet noodzakelijkerwijze terug te vinden in /etc/inetd.conf terwijl ze wel in /etc/services zijn vastgelegd. Er kunnen zelfs services zijn die helemaal standalone gestart worden, ook één of meer poortnummers gebruiken die niet zijn vastgelegd in /etc/services, hoewel een beheerder dit bestand eigenlijk op orde zou moeten hebben.
Werk je met Mint, dan is inetd niet geïnstalleerd, maar wel snel toe te voegen. Hetzelfde geldt voor ander distro’s. De meeste Linux-distro’s zijn meer System V georiënteerd dan BSD en werken met de complexere runlevels bij het opstarten. Hier is er een init-proces dat /etc/inittab uitleest om vervolgens bij het juiste runlevel de services te starten, die zijn geordend in subdirectories onder /etc/rc.d. Mengvormen van de typische BSD of System V opzet komen ook voor. En nu init deels is vervangen door systemd (zie hierover het afzonderlijke artikel van Sander van Vught) en hier weer spin-offs vanaf komen om onderdelen van systemd weer op te splitsen, zijn het starten en stoppen van netwerkservices verre van evident. Ook door het inbouwen van compatibiliteitsmogelijkheden per distro wordt het er steeds minder logisch door.
YaST2 – Configureren internet superdaemon
Onbekend of onbemind
Naast de genoemde netwerkservices zijn er andere bekende netwerkservices, zoals CUPS (printen) waar ook Apple stevig op bouwt. Daarnaast heb je ook genoeg minder bekende services, zeker bij de beginners. Wat dacht je van portmap? Zonder deze service werken NFS en NIS niet goed. NFS is bekend – je mount er remote filesystemen mee – en NIS is weer wat minder bekend. NIS is lang geleden bedacht door SUN Microsystems om centraal gebruikers te kunnen authentiseren. Deze voorloper van de directory service werd destijds Yellow Pages genoemd. Vandaar dat de daemons nog yp in de benaming hebben (bijvoorbeeld yppasswdd, ypserv, ypxfrd). Wilde je als gebruiker je wachtwoord in de directory server veranderen, dan gebruikte je op de opdrachtregel yppasswd. Eigenlijk hoeven we niet in de verleden tijd te spreken, want dit kan – mits je systeem in het netwerk hiervoor goed is ingericht – nog steeds zo. Ken je de qotd (quote of the day) service? Eveneens een oudje met een laag poortnummer (17). Je vindt op internet nog steeds enkele servers die een dagelijkse quote leveren. En zo zijn moderne naast obscure en oude services vastgelegd.
Configureren
Veel UNIX en Linux varianten hebben een grafische tool om netwerkservices te configureren en anders is die wel te installeren. Je hoeft dan niet te weten in welk bestand onder de motorkap en runlevel je terecht komt. Red Hat kent bijvoorbeeld de Services Configuration Tool (redhat-config-services). Voor YaST – het Windows Control Panel, maar dan voor Linux – bestaat een plug-in Yast Service Manager, die we bij Suse en OpenSuse vinden. Op Mint zou je bum kunnen toevoegen, de Bootup Manager met sudo apt-get install bum.
Bootup Manager
Back to basics
Eigenlijk gaat niets boven lekker handmatig met vim te editten in /etc/services en internetdaemonconfiguratie /etc/inetd.conf en de andere bestanden die de netwerkservices op je server beïnvloeden. Ben je vooral met servers bezig, dan kun je ontsnappen aan het init vs systemd-geweld door bijvoorbeeld lekker te kiezen voor FreeBSD. Je zet open source in waar het ijzersterk in is: stabiele, goed presterende netwerkservices.