Linux Security HOWTO

v1.1.1, 17 maart 2000

Dit document is een algemeen overzicht van beveiligingskwesties waar een beheerder van Linux systemen mee geconfronteerd wordt. Het behandelt een algemene beveiligingsfilosofie en een aantal specifieke voorbeelden van hoe je je Linux-systeem beter tegen indringers kunt beveiligen. Ook zijn er verwijzingen naar materiaal en programma's die betrekking hebben op beveiliging. Verbeteringen, constructieve kritiek, toevoegingen en correcties worden dankbaar geaccepteerd. Stuur je reactie alsjeblieft naar beide auteurs, met "Security HOWTO" als onderwerp.

Inleiding Dit document behandelt enkele van de belangrijkste kwesties die betrekking hebben op beveiliging in Linux. Algemene filosofie en via het netwerk ontstane middelen worden besproken. In een aantal andere HOWTO documenten worden ook beveiligingskwesties behandeld en naar deze documenten wordt verwezen als dat nodig is. Dit document kan niet zo bijgewerkt zijn dat alle nieuwe beveiligingslekken erin genoemd worden, aangezien er voortdurend nieuwe beveiligingslekken worden ontdekt. Dit document zal je vertellen waar je moet zoeken naar dergelijke up-to-date informatie en zal je enkele algemene methoden geven om te voorkomen dat zulke beveiligingslekken plaats hebben.

Nieuwe versies van dit document Nieuwe versies van dit document zullen periodiek worden gestuurd naar comp.os.linux.answers. Ze zullen ook worden toegevoegd aan de diverse sites die zulke informatie archiveren, waaronder: Bovendien zul je normaal gesproken dit document ook moeten kunnen vinden op de Linux World Wide Web home page via: Tot slot zou de meest recente versie van dit document ook in verschillende formaten beschikbaar moeten zijn op: of of
Overzicht Dit document zal enkele procedures en veelgebruikte software om je te helpen je Linux systeem veiliger te maken proberen uit te leggen. Het is belangrijk om, voordat we beginnen, eerst enkele basisbegrippen te bespreken en een basisbeveiliging te creëren.

Wat is het nut van beveiliging? In de altijd veranderende wereld van globale datacommunicatie, goedkope Internetverbindingen en het hoge tempo van software ontwikkeling, wordt beveiliging een steeds belangrijker onderwerp. Beveiliging is nu een basisvereiste, omdat globale informatica inherent onveilig is. Als je gegevens bijvoorbeeld van punt A naar B op het Internet gaan, zou het onderweg via diverse andere punten kunnen gaan, hetgeen andere gebruikers de gelegenheid geeft het te onderscheppen en het zelfs te wijzigen. Zelfs andere gebruikers op je systeem kunnen opzettelijk jouw gegevens veranderen in iets dat je niet bedoelde. Onbevoegde toegang tot je systeem kan verkregen worden door indringers, ook bekend als "crackers", die dan geavanceerde kennis gebruiken om zich als jou voor te doen, informatie van je te stelen of je zelfs de toegang tot je eigen middelen te ontzeggen. Als je je afvraagt wat het verschil is tussen een "Hacker" en een "Cracker", bekijk dan Eric Raymond's document "How to Become A Hacker", beschikbaar op .
Fysieke beveiliging De eerste laag van beveiliging waar je rekening mee moet houden is de fysieke beveiliging van je computersystemen. Wie heeft directe fysieke toegang tot je machine? Zouden ze dat ook moeten hebben? Kun je je machine beschermen tegen hun geknoei? Zou je dat ook moeten doen? Hoeveel fysieke beveiliging je nodig hebt op je systeem is erg afhankelijk van je situatie en/of budget. Als je een thuisgebruiker bent, zul je waarschijnlijk niet veel nodig hebben (alhoewel je misschien je machine wilt beschermen tegen het geknoei van kinderen of hinderlijke familieleden). Als je in een laboratorium bent, zul je aanzienlijk meer nodig hebben, maar gebruikers moeten wel hun werk kunnen doen op hun machines. Veel van de volgende paragrafen bieden uitkomst. Als je in een kantoor bent, kun je wel of niet je machine beveiligen na kantoortijd of als je weg bent. Bij sommige bedrijven leidt het onbeveiligd achterlaten van je computer tot ontslag. Voor de hand liggende fysieke beveiligingsmethoden als sloten op deuren, kabels, afgesloten kasten en videobewaking zijn allemaal goede ideeën, maar vallen buiten de strekking van dit document. :)

Computersloten Veel moderne PC-kasten bieden een voorziening om ze "op slot te doen". Gewoonlijk zal dit een socket aan de voorkant van de kast zijn, waarmee je met een bijgeleverd sleuteltje de computer op slot kunt zetten of van het slot kunt halen. Kastsloten kunnen helpen voorkomen dat iemand je PC steelt of de kast opent en je hardware rechtstreeks manipuleert/steelt. Soms kunnen ze ook voorkomen dat iemand je computer opnieuw opstart vanaf z'n eigen floppy of andere hardware. Deze kastsloten doen verschillende dingen al naar gelang de ondersteuning in het moederbord en de wijze waarop de kast is gemaakt. Op veel PC's is het zo gemaakt dat je de kast moet openbreken om hem open te krijgen. Op enkele andere laten ze je geen nieuwe toetsenborden of muizen aansluiten. Raadpleeg de voorschriften van je moederbord of kast voor meer informatie. Dit kan soms een erg bruikbare voorziening zijn, ondanks dat de sloten gewoonlijk van erg lage kwaliteit zijn en makkelijk kunnen worden gesloopt door aanvallers met slotenmakersgereedschap. Sommige machines (voornamelijk SPARC's en Mac's) hebben een oog aan de achterkant waar je een kabel door kunt halen, zodat aanvallers de kabel moeten doorknippen of de kast moeten slopen om erin te kunnen komen. Een hangslot of een combinatieslot erdoor is een afschrikwekkend middel voor iemand die je machine wil stelen.
Lokale beveiliging Het volgende waar we naar gaan kijken is de beveiliging van je systeem tegen aanvallen van lokale gebruikers. Zeiden we zojuist lokale gebruikers? Ja! Toegang verkrijgen tot een lokaal gebruikersaccount is een van de eerste dingen die indringers op een systeem proberen op hun weg naar het misbruiken van het root account. Met een lakse lokale beveiliging kunnen ze hun normale gebruikerstoegang "upgraden" naar een roottoegang door gebruik te maken van een verscheidenheid aan bugs en minnetjes ingestelde lokale diensten. Als je ervoor zorgt dat je lokale beveiliging waterdicht is, zal de indringer nog een hindernis moeten nemen. Lokale gebruikers kunnen ook een hoop schade aanrichten op je systeem, zelfs (juist) als ze inderdaad diegene zijn die ze zeggen dat ze zijn. Het verstrekken van accounts aan mensen die je niet kent of van wie je geen achtergrondinformatie hebt, is een erg slecht idee.

Nieuwe accounts aanmaken Je moet ervan overtuigd zijn dat je gebruikersaccounts verschaft met slechts de minimale vereisten voor de taak die ze moeten doen. Als je je zoon (10 jaar) een account verschaft, zul je wellicht willen dat hij alleen toegang heeft tot een tekstverwerker of tekenprogramma, maar geen gegevens kan verwijderen die niet van hem zijn. Enkele goede vuistregels als je andere mensen rechtmatige toegang tot je Linux-machine toestaat: Geef ze het minimale aantal privileges dat ze nodig hebben. Weet wanneer/waar vandaan ze inloggen of waar vandaan ze zouden moeten inloggen. Verwijder niet gebruikte accounts. Het gebruik van hetzelfde gebruikers ID op alle computers en netwerken is aan te raden om het onderhoud van accounts te vereenvoudigen. Ook staat het een eenvoudigere analyse van loggegevens toe. Het aanmaken van groeps-gebruiker ID's zou absoluut verboden moeten zijn. Gebruikersaccounts zorgen ook voor verantwoordelijkheid en dit is bij groepsaccounts niet mogelijk. Veel lokale gebruikersaccounts die gebruikt worden bij een aanval zijn in geen maanden of jaren meer gebruikt. Omdat niemand ze gebruikt, zorgen ze voor een ideaal aanvalsvoertuig.
Beveiliging van bestanden en bestandssystemen Een paar minuten van voorbereiding en planning vooraf, voordat je je systemen online zet, kan helpen ze (en de gegevens die erop opgeslagen zijn) te beschermen.Er zou nooit een reden mogen zijn om toe te staan dat SUID/SGID programma's uitgevoerd mogen worden vanuit de home directory's van gebruikers. Gebruik de nosuid optie in /etc/fstab voor partities die beschrijfbaar zijn door anderen dan root. Je wilt misschien ook nodev en noexec toepassen op de home partities van gebruikers, evenals op /var, dus het uitvoeren van programma's is verboden, net als het creëren van character of block devices, wat trouwens toch nooit noodzakelijk zou moeten zijn. Als je bestandssystemen exporteert middels NFS, let er dan op dat je /etc/exports instelt met de meest beperkte toegang mogelijk. Dit houdt in dat je geen gebruik moet maken van wildcards, geen root schrijfpermissie toestaat en waar mogelijk read-only exporteert. Stel de bestandsaanmaak umask van je gebruikers zo beperkt mogelijk in. Zie . Als je gebruik maakt van een netwerk bestandssysteem zoals NFS om bestandssystemen te mounten, let er dan op dat je /etc/exports instelt met geschikte beperkingen. Kenmerkend is het gebruik van 'nodev', `nosuid' en misschien `noexec' wenselijk. Stel limieten in voor het bestandssysteem in plaats van het toestaan van unlimited, wat standaard is. Je kunt de limieten per gebruiker beheren door gebruik te maken van de resource-limits PAM module en /etc/pam.d/limits.conf. De limieten voor de groep users kunnen er bijvoorbeeld zo uit zien: @users hard core 0 @users hard nproc 50 @users hard rss 5000 Dit zegt: verbied het creëren van core bestanden, beperk het aantal processen tot 50 en beperk het geheugengebruik tot 5M per gebruiker. De /var/log/wtmp en /var/run/utmp bestanden bevatten de login records van alle gebruikers op je systeem. Hun zuiverheid moet behouden blijven, omdat ze gebruikt kunnen worden om te bepalen wanneer en waar vandaan een gebruiker (of een mogelijke indringer) je systeem is binnengekomen. Deze bestanden moeten ook 644 permissies hebben, zonder dat het invloed heeft op het normale systeemgebruik. Het onveranderlijke bit kan gebruikt worden om te voorkomen dat een bestand dat beschermd moet worden per ongeluk verwijderd of overschreven wordt. Het voorkomt ook dat iemand een symbolische link aanmaakt naar het bestand (zulke symbolische links zijn de bron geweest van aanvallen die betrekking hadden op het verwijderen van /etc/passwd of /etc/shadow). Zie de chattr(1) man pagina voor informatie over het onveranderlijke bit. SUID en SGID bestanden op je systeem vormen een mogelijk beveiligingsrisico en zullen nauwgezet in de gaten gehouden moeten worden. Omdat deze programma's speciale privileges toekennen aan de gebruiker die ze uitvoert, is het noodzakelijk om je ervan te verzekeren dat er geen onveilige programma's geïnstalleerd zijn. Een favoriet trucje van crackers is om SUID-root programma's te misbruiken en dan een SUID programma achter te laten als een achterdeur om de volgende keer binnen te komen, zelfs als het oorspronkelijke gat is gedicht. Zoek alle SUID/SGID programma's op je systeem en houd bij wat ze zijn, zodat je je bewust bent van enige veranderingen die kunnen duiden op een mogelijke indringer. Gebruik het volgende commando om te zoeken naar alle SUID/SGID programma's op je systeem: root# find / -type f \( -perm -04000 -o -perm -02000 \) De Debian distributie voert elke nacht een taak uit om te bepalen welke SUID programma's er bestaan. Het vergelijkt het dan met de uitvoer van de vorige nacht. Je kunt kijken in /var/log/setuid* voor deze log. Je kunt de SUID of SGID permissies op een verdacht programma verwijderen met chmod en ze dan terugzetten als je denkt dat dat absoluut nodig is. Bestanden met schrijfpermissie voor iedereen, in het bijzonder systeembestanden, kunnen een beveiligingslek zijn als een cracker toegang krijgt tot je systeem en ze aanpast. Directory's met schrijftoegang voor iedereen zijn bovendien gevaarlijk, omdat ze een cracker toestaan om naar wens bestanden toe te voegen of te verwijderen. Om alle bestanden met schrijfpermissie voor iedereen op je systeem te vinden, gebruik je het volgende commando: root# find / -perm -2 ! -type l -ls en verzeker je ervan dat je weet waarom deze bestanden schrijfpermissie hebben. Bij normaal gebruik zullen verscheidene bestanden schrijfpermissie voor iedereen hebben, inclusief enkele van /dev en symbolische links, dus middels ! -type l worden deze niet meegenomen door het voorgaande find commando. Bestanden die niemand toebehoren kunnen ook een indicatie zijn dat een indringer je systeem is binnengedrongen. Je kunt bestanden op je systeem die geen eigenaar hebben of tot geen enkele groep behoren, vinden met het commando: root# find / -nouser -o -nogroup -print Het zoeken naar .rhosts bestanden zou onderdeel uit moeten maken van je vaste systeembeheertaken, omdat deze bestanden niet toegestaan zouden mogen zijn op je systeem. Onthoud, een cracker heeft slechts één onveilig account nodig om mogelijk toegang tot je gehele netwerk te verkrijgen. Je kunt alle .rhosts bestanden op je systeem vinden met het volgende commando: root# find /home -name .rhosts -print Tot slot, voordat je de permissies op welke systeembestanden dan ook gaat wijzigen, moet je je ervan verzekeren dat je begrijpt wat je aan het doen bent. Verander nooit de permissies van een bestand, omdat het de makkelijkste manier lijkt om dingen werkend te krijgen. Bepaal altijd waarom het bestand die permissie heeft alvorens het te veranderen.

Umask instellingen Het umask commando kan gebruikt worden om de standaard manier waarop bestanden op je systeem aangemaakt worden te bepalen. Het is de achtste aanvulling van de gewenste bestandsmodus. Als bestanden worden aangemaakt zonder te letten op hun permissie-instellingen, kan de gebruiker onbewust lees- of schrijfpermissie geven aan iemand die deze permissie niet mag hebben. Kenmerkende umask instellingen bevatten 022, 027 en 077 (welke de meest beperkte is). Normaal gesproken wordt umask ingesteld in /etc/profile, zodat het van toepassing is op alle gebruikers op het systeem. Het bestandsaanmaak-mask kan worden berekend door de gewenste waarde af te trekken van 777. Met andere woorden, een umask van 777 heeft tot gevolg dat nieuw aangemaakte bestanden voor niemand lees-, schrijf- of uitvoerpermissies bevatten. Een mask van 666 heeft tot gevolg dat nieuw aangemaakte bestanden een mask van 111 hebben. Je kunt bijvoorbeeld een regel hebben die er zo uitziet:# Set the user's default umask umask 033 Let erop dat je de umask van root 077 maakt, wat lees-, schrijf en uitvoerpermissie voor andere gebruikers uitschakelt, tenzij het expliciet is gewijzigd met chmod. In dit geval zullen nieuw aangemaakte directory's 744 permissies hebben, verkregen door 033 af te trekken van 777. Nieuw aangemaakte bestanden die gebruik maken van de 033 umask, zullen permissies van 644 hebben. Als je Red Hat gebruikt en je houdt aan hun gebruiker- en groep-ID aanmaakschema (User Private Groups), is het alleen noodzakelijk om 002 voor een umask te gebruiken. Dit komt door het feit dat de standaard instelling één gebruiker per groep is.
Wachtwoordbeveiliging en -versleuteling Wachtwoorden zijn één van de belangrijkste beveiligingsmogelijkheden die vandaag de dag gebruikt worden. Het is belangrijk voor zowel jezelf als je gebruikers om veilige, niet te raden, wachtwoorden te hebben. Het merendeel van de meer recente Linux distributies levert passwd programma's die het je niet toestaan om een makkelijk te raden wachtwoord in te stellen. Zorg dat je passwd programma up to date is en deze mogelijkheden heeft. Een diepgaande verhandeling over versleuteling valt buiten de strekking van dit document, maar een inleiding is op z'n plaats. Versleuteling is erg nuttig, waarschijnlijk zelfs noodzakelijk tegenwoordig. Er zijn veel verschillende methoden om gegevens te versleutelen, elk met zijn eigen kenmerken. De meeste Unix systemen (en Linux is geen uitzondering) gebruiken primair een eenrichtingsverkeer versleutelingsalgoritme, genaamd DES (Data Encryption Standard) om wachtwoorden te versleutelen. Dit versleutelde wachtwoord wordt dan opgeslagen in (gebruikelijk) /etc/passwd (of minder gebruikelijk) /etc/shadow. Als je probeert in te loggen wordt het wachtwoord dat je intypt opnieuw versleuteld en vergeleken met de entry in het bestand waarin je wachtwoorden worden opgeslagen. Als ze overeenkomen moet het wel hetzelfde wachtwoord zijn en word je toegang verleend. Hoewel DES een tweerichtingsverkeer versleutelingsalgoritme is (je kunt een bericht coderen en decoderen, op voorwaarde dat je de juiste sleutels hebt), is de variant die de meeste Unix systemen gebruiken de "one-way". Dit betekent dat het niet mogelijk is om de versleuteling om te keren om zodoende het wachtwoord te verkrijgen vanuit de inhoud van /etc/passwd (of /etc/shadow).Aanvallen met brute kracht, zoals "Crack" of "John the Ripper" (zie paragraaf ) kunnen vaak wachtwoorden raden, tenzij je wachtwoord afdoende willekeurig is. PAM modules (zie hieronder) staan je toe om een andere versleutelingsroutine voor je wachtwoorden te gebruiken. (MD5 of iets dergelijks). Je kunt tevens Crack in je voordeel gebruiken. Overweeg het periodiek uitvoeren van Crack op je wachtwoord database om onveilige wachtwoorden te vinden. Neem vervolgens contact op met de overtredende gebruiker en vertel hem dat hij zijn wachtwoord moet veranderen.Kijk op voor informatie over het kiezen van een goed wachtwoord.

PGP en Public-Key versleuteling Public-key versleuteling, zoals dat gebruikt wordt voor PGP, gebruikt een sleutel voor het coderen en een sleutel voor het decoderen. Traditionele versleuteling gebruikt echter dezelfde sleutel voor het coderen en decoderen; deze sleutel moet bekend zijn bij beide partijen en zal dus op de een af andere wijze veilig van de een naar de ander overgebracht moeten worden. Om de noodzaak van het veilig overbrengen van de coderingssleutel te verlichten, gebruikt public-key versleuteling twee afzonderlijke sleutels: een publieke sleutel en een persoonlijke sleutel. Ieders publieke sleutel is beschikbaar voor iedereen om de codering uit te voeren, terwijl tegelijkertijd iedereen zijn of haar persoonlijke sleutel heeft om berichten, die gecodeerd zijn met de juiste publieke sleutel, te decoderen. Zowel public-key als private-key versleuteling hebben hun voordelen en je kunt over deze verschillen lezen in , genoemd aan het eind van deze paragraaf. PGP (Pretty Good Privacy) wordt goed ondersteund onder Linux. De versies 2.6.2 en 5.0 staan er bekend om dat ze goed werken. Voor een goed eerste-beginselen-boekje over PGP en hoe het te gebruiken, kun je de PGP FAQ bekijken: . Let erop dat je de versie gebruikt die geschikt is voor het land waar je woont. Als gevolg van exportbeperkingen door de regering van de VS, is het verboden om sterke versleuteling in elektronische vorm de landsgrenzen over te brengen. Exportcontroles worden nu beheerd door EAR (Export Administration Regulations). Ze worden niet langer bepaald door ITAR. Er is ook een stap-voor-stap gids voor het instellen van PGP onder Linux, beschikbaar op . Het is geschreven voor de internationale versie van PGP, maar het is makkelijk aan te passen aan de versie voor de Verenigde Staten. Je hebt mogelijk ook een patch nodig voor de recente versies van Linux; de patch is beschikbaar op . Er is een project waar gewerkt wordt aan een gratis re-implementatie van PGP met open source. GnuPG is een complete en gratis vervanging van PGP. Omdat het geen IDEA of RSA gebruikt, kan het zonder enige beperkingen gebruikt worden. GnuPG komt bijna overeen met . Zie de GNU Privacy Guard webpagina voor meer informatie: . Meer informatie over versleuteling kan gevonden worden in "The RSA cryptography FAQ", beschikbaar op . Hier vind je informatie over begrippen als "Diffie-Hellman", "public-key cryptography", "digital certificates", enz.
Beveiliging van de kernel Dit is een beschrijving van de opties voor het configureren van de kernel die met beveiliging te maken hebben, een beschrijving van wat ze doen en hoe je ze moet gebruiken. Omdat de kernel het gebruik van je computer op het netwerk beheert, is het belangrijk dat deze erg veilig is en niet in gevaar gebracht kan worden. Om enkele van de meest recente netwerkaanvallen te voorkomen, moet je proberen om je kernelversie actueel te houden. Je kunt nieuwe kernels vinden op of bij de leverancier van je distributie. Er is ook een internationale groep die een afzonderlijke uniforme coderingspatch verschaft voor de conventionele Linux kernel. Deze patch verschaft ondersteuning voor een aantal cryptografische subsystemen en zaken die niet kunnen worden toegevoegd aan de conventionele kernel vanwege exportbeperkingen. Voor meer informatie kun je hun webpagina bezoeken op:

Opties om 2.0 kernels te compileren De volgende opties zijn voor 2.0.x kernels van toepassing. Je zou deze opties moeten kunnen zien tijdens het configuratieproces van de kernel. Veel van de opmerkingen hier komen uit ./linux/Documentation/Configure.help. Dit is hetzelfde document als waarnaar verwezen wordt wanneer de Help faciliteit aangeroepen wordt tijdens de make config fase van het compileren van de kernel. Netwerk Firewalls (CONFIG_FIREWALL) Deze optie moet ingeschakeld zijn als je van plan bent om enige firewalling of masquerading op je Linux machine uit te voeren. Als het slechts gaat om een gewone client machine, is het veilig deze optie niet in te schakelen. IP: forwarding/gatewaying (CONFIG_IP_FORWARD) Als je IP forwarding inschakelt, wordt je Linux box wezenlijk een router. Als je machine aangesloten is op een netwerk, kun je gegevens doorsturen van het ene netwerk naar het andere en wellicht een firewall ondermijnen die daar was geplaatst om dit te voorkomen. Gewone dial-up gebruikers zullen dit uit willen schakelen en andere gebruikers moeten zich concentreren op de beveiligingsimplicaties als ze dit doen. Firewall machines zullen dit ingeschakeld willen hebben en samen met firewall software gebruiken. Je kunt IP forwarding dynamisch inschakelen door gebruik te maken van het volgende commando: root# echo 1 > /proc/sys/net/ipv4/ip_forward en het uitschakelen met het commando: root# echo 0 >/proc/sys/net/ipv4/ip_forward Houd in gedachten dat de bestanden in /proc "virtuele" bestanden zijn en de getoonde omvang van het bestand wellicht niet overeenkomt met de gegevensuitvoer hiervan. IP: syn cookies (CONFIG_SYN_COOKIES) Een "SYN Attack" is een "denial of service" (DoS) aanval die alle hulpbronnen op je machine verbruikt en je dwingt om opnieuw op te starten. We kunnen geen reden bedenken waarom je dit niet gewoon inschakelt. In de 2.2.x kernel series staat deze configuratieoptie alleen syn cookies toe, maar schakelt ze niet in. Om ze in te schakelen, moet je het volgende commando geven: root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies IP: Firewalling (CONFIG_IP_FIREWALL) Deze optie is noodzakelijk als je je machine gaat configureren als een firewall, aan masquerading gaat doen of je dial-up werkstation wil beschermen tegen het binnendringen van iemand via je PPP dial-up interface. IP: firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE) Deze optie geeft je informatie over de pakketten die je firewall ontvangt, zoals afzender, ontvanger, poort enzovoorts. IP: Drop source routed frames (CONFIG_IP_NOSR) Deze optie moet ingeschakeld worden. Source routed frames bevatten het gehele pad tot hun bestemming binnenin het pakket. Dit betekent dat de routers waar het pakket doorheen gaat het niet hoeven te inspecteren en het gewoon doorsturen. Dit kan ertoe leiden dat er gegevens je systeem binnenkomen die een potentieel beveilingslek kunnen zijn. IP: masquerading (CONFIG_IP_MASQUERADE) Als een van de computers op je lokale netwerk, waarvoor je Linux box als een firewall optreedt, iets wil versturen naar buiten, kan jouw box zich vermommen (masquerade) als die host. Dat wil zeggen, het stuurt het verkeer door naar de bedoelde bestemming, maar laat het eruitzien alsof het komt van de firewall box zelf. Zie voor meer informatie. IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) Deze optie voegt ICMP masquerading toe aan de vorige optie, waarbij alleen masquerading van TCP of UDP verkeer plaatvindt. IP: transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY) Hiermee kan je Linux firewall elk netwerkverkeer dat van het lokale netwerk afkomstig is en bestemd is voor een remote host transparant omleiden naar een lokale server, genaamd een "transparent proxy server". Dit zorgt ervoor dat de lokale computers denken dat ze praten tegen het remote eind, terwijl ze in feite verbonden zijn met de lokale proxy. Zie de IP-Masquerading HOWTO en voor meer informatie. IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) Gewoonlijk is deze optie uitgeschakeld, maar als je een firewall of een masquerading host aan het bouwen bent, zul je dit in willen schakelen. Wanneer gegevens van de ene host naar de andere worden gestuurd, wordt het niet altijd verstuurd als een enkel gegevenspakket, maar eerder wordt het gefragmenteerd in verschillende stukken. Het probleem hierbij is dat de poortnummers alleen in het eerste fragment opgeslagen zijn. Dit betekent dat iemand informatie aan de overblijvende pakketten kan toevoegen die daar niet hoort te zijn. Het kan ook een "teardrop attack" voorkomen tegen een interne host die hier zelf nog niet tegen gepatched is. Packet Signatures (CONFIG_NCPFS_PACKET_SIGNING) Dit is een optie, beschikbaar in de 2.2.x kernel series, die NCP pakketten zal voorzien van een kenmerk voor een betere beveiliging. Normaal kun je het uit laten staan, maar het is er als je het toch nodig hebt. IP: Firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK) Dit is een erg aardige optie waarmee je de eerste 128 bytes van de pakketten van een user-space programma kan analyseren, om zodoende te bepalen of je, gebaseerd op zijn deugdelijkheid, het pakket wilt accepteren of afwijzen.
Beveiliging van het netwerk Netwerkbeveiliging wordt steeds belangrijker omdat mensen steeds langer verbonden zijn met het netwerk. De beveiliging van het netwerk in gevaar brengen is vaak veel eenvoudiger dan het in gevaar brengen van de fysieke of lokale beveiliging en wordt steeds alledaagser. Er zijn een aantal goede tools die hulp bieden bij netwerkbeveiliging en steeds meer daarvan worden geleverd bij Linux distributies.

Packet Sniffers Een van de meest gebruikte manieren waarop indringers zich toegang tot meer systemen op je netwerk verschaffen is door het gebruik van een "packet sniffer" op een reeds in gevaar gebrachte host. Deze "sniffer" luistert op de Ethernet poort slechts naar dingen als passwd, login en su in de pakkettenstroom en logt dan het verkeer dat volgt. Op deze manier verkrijgen aanvallers wachtwoorden voor systemen waarop ze niet eens probeerden in te breken. Wachtwoorden die uit platte tekst bestaan zijn erg kwetsbaar voor deze aanval. Voorbeeld: Host A is gecompromitteerd. Aanvaller installeert een sniffer. Sniffer pikt een beheerder logging op naar host B, afkomstig van host C. Het verkrijgt het persoonlijke wachtwoord van de beheerder zodra er ingelogd wordt op B. Dan doet de beheerder een su om een probleem op te lossen. Ze hebben nu het root wachtwoord voor host B. Later laat de beheerder iemand telnet uitvoeren vanaf zijn account naar host Z op een andere site. Nu heeft de aanvaller een wachtwoord/login op host Z. Tegenwoordig hoeft de aanvaller niet eens meer een systeem te compromitteren om dit te doen: ze kunnen ook een laptop of pc het gebouw binnenbrengen en het systeem aftappen. Het gebruik van ssh of andere methoden om wachtwoorden te coderen dwarsboomt deze aanval. Zaken als APOP voor POP accounts kunnen deze aanval ook voorkomen. (Normale POP logins zijn hier erg kwetsbaar voor, zoals alles dat platte-tekst wachtwoorden over het netwerk verstuurt).
Beveiligingsvoorbereidingen (voordat je on-line gaat) Ok, dus je hebt je systeem gecontroleerd en bevonden dat het zo veilig mogelijk is en je bent klaar om het on-line te zetten. Er zijn een aantal dingen die je nu moet doen om je voor te bereiden op een aanval, zodat je de indringer snel kan uitschakelen, de zaak herstelt en weer draait.

Maak een volledige backup van je machine Een discussie over backupmethodes en opslag valt buiten de strekking van dit document, maar hier zijn een paar woorden over backups en beveiliging:Als je minder dan 650 mb aan gegevens op een partitie op te slaan hebt, is een kopie van je gegevens op een CD-R een goede manier (omdat het moeilijk is om er later mee te knoeien en het een hele tijd meegaat mits het juist wordt bewaard). Tapes en andere herschrijfbare media moeten gelijk tegen schrijven worden beveiligd zodra je backup klaar is en vervolgens worden geverifieerd om geknoei te voorkomen. Let erop dat je je backups bewaart op een veilige off-line lokatie. Een goede backup verzekert je ervan dat je je systeem kunt herstellen vanaf een bekend goed punt.
Wat te doen tijdens en na een inbraak Dus je hebt enkele van de adviezen hier (of ergens anders) opgevolgd en een inbraak geconstateerd? Het eerste dat je moet doen is kalm blijven. Overhaaste acties kunnen meer schade aanrichten dan de aanvaller zou hebben gedaan.

Een aanval op de beveiliging is aan de gang Het in de gaten krijgen van een aanval op de beveiliging die aan de gang is, kan een gespannen onderneming zijn. De manier waarop je reageert kan grote gevolgen hebben. Als de aanval die je ziet een fysieke is, bestaat de kans dat je iemand hebt opgemerkt die heeft ingebroken in je huis, kantoor of laboratorium. Je zou de plaatselijke autoriteiten in moeten lichten. In een laboratorium kun je misschien iemand opgemerkt hebben die probeerde een kast te openen of een machine opnieuw op te starten. Afhankelijk van je autoriteit en procedures kun je hem vragen daarmee te stoppen of contact opnemen met lokale beveiligingsmensen. Als je hebt geconstateerd dat een lokale gebruiker je beveiliging in gevaar tracht te brengen, is het eerste dat je moet doen je ervan vergewissen dat het inderdaad de persoon is die je denkt dat het is. Controleer de site waar vanaf hij inlogt. Is het de site waar vanaf hij normaal gesproken inlogt? Nee? Gebruik dan een niet-elektronische manier om contact te maken. Bel hem bijvoorbeeld op of loop naar zijn kantoor/huis en praat met hem. Als hij bevestigt dat hij verbinding heeft, kun je hem vragen om uit te leggen wat hij aan het doen was of hem vertellen dat hij ermee op moet houden. Als hij geen verbinding heeft en ook geen idee heeft waar je het over hebt, bestaat de kans dat dit incident verder uitgezocht moet worden. Bestudeer zulke incidenten en verzamel genoeg informatie voordat je enige beschuldiging uit. Als je een aanval via het netwerk hebt geconstateerd, is het eerste dat je moet doen (als je daartoe de mogelijkheid hebt) het verbreken van de verbinding met het netwerk. Als ze verbonden zijn met een modem, haal de stekker van het modem er dan uit; als je verbonden zijn via Ethernet, haal dan de Ethernet kabel los. Dit voorkomt dat ze nog meer schade aanrichten. Ze zullen het waarschijnlijk als een netwerkprobleem zien en niet als een signaal dat ze opgemerkt zijn. Als je de verbinding met het netwerk niet kunt verbreken (als je een drukke site hebt of je hebt geen fysieke controle over je machines), is de volgende stap om iets als tcp_wrappers of ipfwadm te gebruiken om toegang vanaf de site van de indringer te weigeren. Als je niet alle mensen vanaf dezelfde site als de indringer de toegang kunt weigeren, zal afsluiten van het gebruikersaccount de oplossing zijn. Houd er rekening mee dat het afsluiten van een account niet gemakkelijk is. Denk aan de .rhosts bestanden, FTP toegang en een host met mogelijke achterdeuren. Als je een van de bovenstaande dingen hebt gedaan (het netwerk afgesloten, toegang vanaf hun site geweigerd en/of hun account uitgeschakeld), moet je al hun gebruikersprocessen afsluiten en ze uitloggen. Je moet je site de komende paar minuten goed in de gaten houden, want de aanvaller probeert om weer binnen te komen. Misschien door gebruik te maken van een ander account en/of vanaf een ander netwerkadres.
BronnenEr zijn VEEL goede sites over de beveiliging van Unix in het algemeen en over de beveiliging van Linux in het bijzonder. Het is erg belangrijk om je te abonneren op een (of meer) van de beveiligings mailing lists en bij te blijven op het gebied van beveiligingsfixes. De meeste van deze lists zijn klein van omvang en erg informatief.

FTP SitesCERT is het Computer Emergency Response Team. Ze versturen vaak waarschuwingen voor recente aanvallen en fixes. Zie voor meer informatie.ZEDZ (voorheen Replay) () heeft archieven van vele beveiligingsprogramma's. Omdat ze zich buiten de VS bevinden, hoeven ze zich niet te houden aan de coderingsbeperkingen van de VS.Matt Blaze is de auteur van CFS en een goede beveiligingsadvocaat. Matt's archief is beschikbaar op tue.nl is een goede Nederlandse FTP site over beveiliging.
Verklarende woordenlijst authenticatie: Het te weten komen of de ontvangen gegevens hetzelfde zijn als de verzonden gegevens en of de beweerde afzender inderdaad de werkelijke afzender is. bastion host: Een computersysteem dat zwaar beveiligd moet zijn, omdat het kwetsbaar is voor aanvallen, meestal omdat het is blootgesteld aan het Internet en een belangrijk contactpunt is voor gebruikers van internationale netwerken. Het dankt zijn naam aan de geavanceerde verdedigingsprojecten op de buitenmuren van middeleeuwse kastelen. Bastions overzien kritieke verdedigingsgebieden, hebben meestal sterke muren, ruimte voor extra mankracht en het soms nuttige vat met kokend hete olie om aanvallers te ontmoedigen. buffer overloop: De algemene coderingsstijl is om nooit buffers die groot genoeg zijn toe te wijzen en niet te controleren op overlopen. Als zulke buffers overlopen, kan het uitvoerende programma (daemon of set-uid programma) worden verlokt tot het doen van andere dingen. Gewoonlijk gebeurt dit door het overschrijven van het retouradres van een functie om naar een andere locatie te verwijzen. denial of service: Een aanval die de hulpbronnen op je computer gebruikt voor dingen die het niet zou moeten doen en zodoende het normale gebruik van je netwerkbronnen voor legitieme doeleinden verhindert. dual-homed host: Een computersysteem voor algemene doeleinden dat op z'n minst twee netwerk interfaces heeft. firewall: Een component of set van componenten dat de toegang beperkt tussen een beveiligd netwerk en het Internet of tussen andere netwerken. host: Een computersysteem dat aangesloten is op een netwerk. IP spoofing: IP Spoofing is een complexe technische aanval die bestaat uit diverse onderdelen. Het is een beveiligingslek dat werkt door computers in een vertrouwensrelatie te laten denken dat je iemand bent die je in werkelijkheid niet bent. Er is een uitgebreid stuk geschreven over deamon9, route en infinity in Volume Zeven, uitgave 48 van Phrack Magazine. non-repudiation: De mogelijkheid die een ontvanger heeft om te kunnen bewijzen dat de afzender van bepaalde gegevens inderdaad de gegevens verstuurd heeft, zelfs wanneer de afzender later ontkent dat hij het ooit verstuurd heeft.pakket: Het basisonderdeel van communicatie op het Internet.pakket filtering: De actie die een apparaat onderneemt om selectief de gegevensstroom naar en vanaf een netwerk te beheren. Pakketfilters staan pakketten toe of blokkeren ze, gewoonlijk terwijl ze ze routen van het ene netwerk naar het andere (veelal vanaf het Internet naar een intern netwerk en vice versa). Om pakketfiltering tot stand te brengen, stel je regels op die bepalen welke soorten pakketten (degenen naar of vanaf een bepaald IP adres of poort) worden toegestaan en welke soorten geblokkeerd worden. perimeter netwerk: Een netwerk dat toegevoegd is tussen een beschermd netwerk en een extern netwerk, bedoeld om te voorzien in een aanvullende beveiligingslaag. Een perimeter netwerk wordt soms een DMZ genoemd. proxy server: Een programma dat de externe servers beheert ten behoeve van interne clients. Proxy clients communiceren met proxy servers, wiens relais clientverzoeken aan echte servers goedkeurt waarna het relais antwoord terug geeft aan clients. superuser: Een informele naam voor root.Veel gestelde vragen Is het veiliger om ondersteuning van stuurprogramma's direct in de kernel te compileren, in plaats van het een module te maken? Antwoord: Sommige mensen denken dat het beter is om de mogelijkheid tot het laden van stuurprogramma's voor apparaten middels modules uit te schakelen, omdat een indringer een Trojan module of een module die invloed kan hebben op de beveiliging van het systeem kan laden. Maar om modules te kunnen laden moet je root zijn. De module object bestanden zijn ook alleen beschrijfbaar door root. Dit betekent dat een indringer roottoegang nodig heeft om een module te plaatsen. Als de indringer roottoegang verkrijgt, zijn er meer serieuze zaken om je zorgen over te maken dan of hij al of niet een module kan laden. Modules zijn bedoeld voor het dynamisch laden van ondersteuning voor een bepaald apparaat dat zelden gebruikt wordt. Op server machines of firewalls bijvoorbeeld, is het erg onwaarschijnlijk dat dit gebeurt. Om deze reden heeft het meer zin om ondersteuning voor machines die opereren als een server direct in de kernel te compileren. Waarom mislukt het inloggen als root vanaf een remote machine altijd? Antwoord: Zie . Dit is bewust gedaan om te voorkomen dat gebruikers via telnet een verbinding als root tot stand proberen te brengen, hetgeen een ernstige beveiligingskwetsbaarheid is, omdat dan het root wachtwoord, in leesbare tekst, verzonden zou worden over het netwerk. Vergeet niet: mogelijke indringers hebben de tijd en kunnen programma's uitvoeren die automatisch naar je wachtwoord zoeken. Hoe schakel ik "shadow passwords" op mijn Red Hat 4.2 of 5.x Linux box uit? Antwoord: Om "shadow passwords" uit te schakelen, voer je pwconv uit als root. Nu zou /etc/shadow moeten bestaan en worden gebruikt door applicaties. Als je Red Hat 4.2 of hoger gebruikt, zullen de PAM modules zich automatisch aanpassen aan de verandering van het gebruik van het normale /etc/passwd naar "shadow passwords" zonder enige andere wijziging. Een stukje achtergrondinformatie: "shadow passwords" is een techniek om je wachtwoord in een bestand, anders dan het normale /etc/passwd bestand, op te slaan. Dit heeft verscheidene voordelen. Het eerste is dat het schaduw bestand, /etc/shadow, alleen leesbaar is voor root, in tegenstelling tot /etc/passwd, wat leesbaar moet blijven voor iedereen. Het andere voordeel is dat je als beheerder accounts kan vrijgeven af afsluiten, zonder dat iedereen de status van andere gebruikersaccounts weet. Het /etc/passwd bestand wordt dan gebruikt om gebruiker- en groepsnamen in op te slaan, die worden gebruikt door programma's als /bin/ls om het gebruikers ID naar de juiste gebruikersnaam om te zetten in een directoryweergave. Het /etc/shadow bestand bevat dan alleen de gebruikersnaam en zijn/haar wachtwoord en misschien informatie over het account, zoals wanneer het account vervalt e.d. Om "shadow passwords" in te schakelen, voer je pwconv uit als root. Nu zou /etc/shadow moeten bestaan en worden gebruikt door applicaties. Omdat je Red Hat 4.2 of hoger gebruikt, zullen de PAM modules zich automatisch aanpassen aan de verandering van het gebruik van het normale /etc/passwd naar "shadow passwords" zonder enige andere wijziging. Omdat je geïnteresseerd bent in het beveiligen van je wachtwoorden, zul je wellicht ook geïnteresseerd zijn in de totstandkoming van goede wachtwoorden op zich. Hiervoor kun je de pam_cracklib module gebruiken, die onderdeel uitmaakt van PAM. Het kijkt of je wachtwoord voortkomt in de "Crack libraries", om je te helpen met de beslissing of het te gemakkelijk te raden is door programma's die wachtwoorden kunnen kraken. Hoe kan ik de Apache SSL extensies inschakelen? Antwoord: Haal SSLeay 0.8.0 of hoger op vanaf . Bouw, test en installeer het! Haal de Apache 1.2.5 source op. Haal de Apache SSLeay extensies op vanaf . Pak het uit in de apache-1.2.5 source directory en patch Apache zoals beschreven in README. Configureer en bouw het. Je kunt ook proberen, dat veel kant en klare pakketten heeft en zich buiten de Verenigde Staten bevindt. Hoe kan ik gebruikersaccounts bewerken en toch de beveiliging behouden? Antwoord: De Red Hat distributie, speciaal Red Hat 5.0, bevat een groot aantal tools om de eigenschappen van gebruikersaccounts te veranderen. De pwconv en unpwconv programma's kunnen gebruikt worden om te wisselen tussen "shadow" en "non-shadowed" wachtwoorden. De pwck en grpck programma's kunnen gebruikt worden om te verifiëren of de passwd en group bestanden juist ingedeeld zijn. De useradd, usermod en userdel programma's kunnen gebruikt worden om gebruikersaccounts toe te voegen, te verwijderen en aan te passen. De groupadd, groupmod en groupdel programma's doen hetzelfde voor groepen. Wachtwoorden voor groepen kunnen met behulp van gpasswd aangemaakt worden. Al deze programma's zijn "shadow-aware" -- dat houdt in dat als je "shadow" inschakelt, ze /etc/shadow zullen gebruiken voor wachtwoordinformatie, anders doen ze dat niet. Zie de respectieve man pagina's voor aanvullende informatie. Hoe kan ik met behulp van Apache bepaalde HTML documenten met een wachtwoord beveiligen? Ik wed dat je niet wist van het bestaan van of wel? Je kunt informatie over het authenticeren van gebruikers vinden op evenals andere web server beveiligingstips van Conclusie Door je in te schrijven op de mailing lists voor beveiligingswaarschuwingen en bij te blijven, kun je een hoop doen met het oog op beveiliging van je machine. Als je je logbestanden in de gaten houdt en iets als tripwire regelmatig uitvoert, kun je zelfs nog meer doen. Een verstandig niveau van computerbeveiliging is niet moeilijk te onderhouden op een machine voor thuisgebruik. Meer moeite is vereist bij zakelijke machines, maar Linux kan zeker een veilig platform zijn. Dankzij het karakter van de ontwikkeling van Linux, komen beveiligingsoplossingen vaak veel sneller uit dan die voor commerciële besturingssystemen, wat Linux een ideaal platform maakt als beveiliging een vereiste is.Dankbetuigingen De informatie hier is verzameld uit vele bronnen. Dank aan de volgenden die zowel indirect als direct hebben bijgedragen:Rob Riggs S. Coffin Viktor Przebinda Roelof Osinga Kyle Hasselbacher David S. Jackson Todd G. Ruskell Rogier Wolff Antonomasia Nic Bellamy Eric Hanchrow Robert J. Berger Ulrich Alpers David Noha Pavel Epifanov Joe Germuska Franklin S. Werren Paul Rusty Russell Christine Gaunt lin A.Steinmetz Jun Morimoto Xiaotian Sun Eric Hanchrow De volgende personen hebben deze HOWTO vertaald in verschillende andere talen! Speciale dank aan hen allemaal voor hun hulp bij het verspreiden van het Linux woord .... Pools: Ziemek Borowski Japans: FUJIWARA Teruyoshi Indonesisch: Tedi Heriyanto Koreaans: Bume Chang Spaans: Juan Carlos Fernandez Nederlands: Nine Matthijssen