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 ftp://ftp.kernel.org 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: http://www.kerneli.org
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.
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.
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.
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
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.
Deze optie geeft je informatie over de pakketten die je firewall
ontvangt, zoals afzender, ontvanger, poort enzovoorts.
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.
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
http://www.indyramp.com/masq
voor meer informatie.
Deze optie voegt ICMP masquerading toe aan de vorige optie, waarbij alleen
masquerading van TCP of UDP verkeer plaatvindt.
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
http://www.indyramp.com/masq voor meer informatie.
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.
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.
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. Voor 2.2.x kernels zijn veel van de opties hetzelfde, maar er zijn ook
een paar nieuwe ontwikkeld. Veel van de opmerkingen hier komen van
./linux/Documentation/Configure.help
, wat hetzelfde document is
waarnaar verwezen wordt als je de Help faciliteit gebruikt tijdens de
make config
fase bij het compileren van de kernel. Alleen de nieuw
toegevoegde opties worden hieronder opgesomd. Raadpleeg de 2.0 beschrijving
voor een lijst met andere noodzakelijke opties. De meest opmerkelijke
verandering in de 2.2 kernel series is de IP firewalling code. Het
ipchains
programma wordt nu gebruikt om IP firewalling te
installeren, in plaats van het ipfwadm
programma dat gebruikt werd in
de 2.0 kernel.
Voor de meeste mensen is het veilig om nee te zeggen tegen deze optie.
Met deze optie kun je een userspace filter verbinden met elke socket en
vaststellen of pakketten moeten worden toegestaan of afgewezen. Zeg nee,
tenzij je een erg specifieke noodzaak hebt en in staat bent om zo'n filter te
programmeren. Houd ook in de gaten dat ten tijde van dit schrijven alle
protocollen behalve TCP ondersteund werden.
Port Forwarding is een aanvulling op Masquerading, dat enige doorzending
van pakketten van buiten naar binnenin een firewall op vastgestelde poorten
toestaat. Dit kan nuttig zijn als je, bijvoorbeeld, een webserver achter een
firewall of masquerading host wil draaien en die webserver toegankelijk moet
zijn vanaf de buitenwereld. Een externe client stuurt een verzoek naar poort
80 van de firewall, de firewall stuurt dit verzoek door naar de webserver, de
webserver behandelt het verzoek en de resultaten worden via de firewall naar
de originele client verstuurd. De client denkt dat de firewall machine zelf de
webserver draait. Dit kan ook gebruikt worden voor het verdelen van de
belasting als je een heleboel identieke webservers achter de firewall hebt.
Informatie over deze voorziening is beschikbaar op
http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (om op het WWW te
surfen heb je toegang tot een machine op het Internet nodig, die een programma
als lynx of Netscape heeft). Voor algemene informatie kun je kijken op
ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
Bij gebruik van deze optie kunnen user-space programma's een filter aan
elke socket verbinden en daardoor de kernel vertellen dat bepaalde soorten
gegevens wel of niet door de socket mogen gaan. Linux socket filtering werkt
voorlopig op alle soorten sockets behalve TCP. Zie het
tekstbestand ./linux/Documentation/networking/filter.txt
voor meer
informatie.
De 2.2 kernel masquerading is verbeterd. Het verschaft aanvullende
ondersteuning voor het vermommen (masquerading) van speciale protocollen etc.
Lees de IP Chains HOWTO voor meer informatie. Er zijn een paar block en character devices beschikbaar onder Linux die je ook behulpzaam kunnen zijn met de beveiliging.
De twee devices /dev/random
en /dev/urandom
worden
verschaft door de kernel om op elk tijdstip te kunnen voorzien in willekeurige
gegevens.
Zowel /dev/random
als /dev/urandom
zouden veilig genoeg
moeten zijn om te gebruiken voor het genereren van PGP sleutels, het aanroepen
van ssh
en andere applicaties waar veilige, willekeurige nummers
vereist zijn. Voor aanvallers moet het onmogelijk zijn het volgende nummer te
voorspellen gezien elke aanvangsvolgorde van nummers van deze bronnen. Er is
een hoop moeite voor gedaan om zeker te stellen dat de nummers die je van deze
bronnen krijgt, willekeurig in elke betekenis van het woord zijn.
Het enige verschil tussen de twee devices, is dat /dev/random
door
zijn voorraad willekeurige bytes heen raakt en je laat wachten tot er weer een
voorraad is aangemaakt. Merk op dat het op sommige systemen een blokkade voor
lange tijd kan opwerpen doordat er gewacht wordt op het invoegen van nieuwe
door de gebruiker gegenereerde entropie in het systeem.
Je moet voorzichtigheid betrachten voordat je /dev/random
gebruikt.
(Wellicht is het beste wat je kunt doen, het te gebruiken wanneer je
gevoelige sleutelinformatie aan het genereren bent en je de gebruiker vertelt
herhaaldelijk op het toetsenbord te slaan totdat je de melding "OK, genoeg"
geeft).
/dev/random
is hoge kwaliteit entropy, gegenereerd door het meten
van de interrupt tijden etc. Het blokkeert totdat er voldoende bits met
willekeurige gegevens beschikbaar zijn.
/dev/urandom
is vergelijkbaar, maar wanneer de opslag van entropie
op een laag pitje staat, zal het een cryptografisch sterk mengelmoesje van wat
er is terugsturen. Dit is niet zo veilig, maar het is voldoende voor de meeste
applicaties.
Je kunt de devices raadplegen door iets dergelijks te gebruiken:
root# head -c 6 /dev/urandom | mimencode
Dit zal acht regels willekeurige karakters op de console afdrukken, geschikt
voor wachtwoordgeneratie. Je kunt mimencode
in het metamail
package vinden.
Zie /usr/src/linux/drivers/char/random.c
voor een beschrijving
van het algoritme.
Met dank aan Theodore Y. Ts'o, Jon Lewis en anderen van Linux-kernel die mij (Dave) hiermee geholpen hebben.