 |
 |
 |
 |
Cursus Linux |
|
go to : Index - Vorige - Volgende |
|
|
|
|
Les 18 |
Security |
|
|
|
|
|
|
|
|
|
Linux is "by default" vrij goed beveiligd voor zowel local als remote exploits. Beveiligingslekken doen zich meestal voor op het programmaniveau. Een server is immers even veilig als zijn zwakste schakel. |
|
Local exploits zijn beveiligingslekken waarbij een normale gebruiker op één of andere manier er in slaagt iets te doen op het systeem waarvoor hij/zij geen rechten heeft. Deze vorm is minder erg omdat locale gebruikers niet anoniem zijn (men kan gemakkelijk de schuldige opsporen).
De meeste systemen worden ook maar gebruikt door één persoon of meerdere personen die elkaar vertrouwen. Deze vorm van exploit is enkel belangrijk indien men locale gebruikers heeft die men niet kan vertrouwen. |
|
Remote exploits zijn aanvallen op netwerkservices van een computer. Men probeert door bufferoverflows of programmafouten toegang te krijgen tot het systeem. Deze vorm van exploits zijn heel belangrijk voor computers die verbonden zijn met het internet (of een ander netwerk waar men de remote computers niet kan vertrouwen). Zit je in een locaal netwerk waar je de anderen kan vertrouwen, dan moet je je hierover ook geen zorgen maken. |
>
|
De grootste bron van beveiligingslekken bevindt zich in de services. Er is niet veel dat een exploit op een service met beveiligingslek kan tegenhouden. Er zijn wel enkele dingen die kunnen helpen: |
- Gebruik enkel services die écht nodig zijn (zet de andere af via bijvoorbeeld
Linuxconf - Control - ControlPan - Control Service Activity).
Hoe minder services je hebt draaien hoe gemakkelijker het is om te patchen/upgraden.
- De services die je hebt draaien in het oog houden. Indien er een beveilingingslek wordt ontdekt onmiddellijk patchen/upgraden.
- In de recentere Linuxdistributies draaien remote services meestal als een gebruiker met weinig of geen rechten. Op die manier zal als de service wordt gekraakt de kraker niet meer toegang krijgen dan de service zelf (rechten waarmee een kraker niet veel kan mee doen dus). Indien je zelf programma's schrijft/compileert, denk dan hieraan.
|
|
Indien local exploits belangrijk zijn voor jouw systeem, volg dan net zoals bij de remote exploits de bugs&patches. |
|
BELANGRIJK !
Kies altijd voor moeilijk te raden paswoorden!
De meeste inbraken gebeuren nog altijd via slecht gekozen paswoorden.
Gebruik dus nooit jouw geboortedatum, de naam van vriend(in), hond,... als paswoord.
Maak liefst gebruik van paswoorden waarin cijfers en speciale tekens zitten. |
|
Firewall |
Een bijkomend onderdeel in de beveiliging van een computer is een firewall. Hiermee kan je de beveiliging van de netwerktoegang beheren. Merk wel op dat een firewall in geen enkel geval een goede reden is om onveilige services te draaien! Indien je iemand toelating geeft om een service met een beveiligingsfout te gebruiken, dan zal de firewall tot niets dienen. |
|
Met een firewall kan je wel services afschermen van bepaalde computers of netwerken.
Je kan ook met behulp van routing een beveiliging maken die een intern netwerk afschermd van de buitenwereld (internet,...). |
|
De firewalls in Linux zijn bij iedere kernel versie aangepast geweest. Zo hebben we: |
- ipfwadm (kernel 2.0)
- ipchains (kernel 2.2)
- iptables (kernel 2.4)
|
De werking tussen ipfwadm en ipchains is ongeveer gelijkaardig. Het grootste verschil is de syntax. Om deze reden (en ook door de ouderdom van de 2.0 kernel) gaan we ipfwadm niet bespreken in deze documentatie.
In kernel 2.4 kan ipchains verder worden gebruikt in plaats van iptables.
Je moet hiervoor de ipchains.o driver laden. |
|
Opbouw IPCHAINS (en IPFWADM) |
De basis van ipchains is vrij logisch opgebouwd. Men heeft drie verschillende chains: |
- Input: binnenkomende pakketten worden hier opgevangen
- Output: pakketten die vertrekken vanaf deze computer worden hier verwerkt
- Forward: als onze computer een router is kunnen we hierin definiëren wat we willen routen
|
|
We kunnen ook de policy van zo'n chain wijzigen. Standaard staat de policy op ACCEPT (we laten alles door), maar we kunnen die ook op DENY zetten (alles weigeren). Dit is van belang als we een een firewall opbouwen. We kunnen dan kiezen voor "laat alles binnen, behalve x" of "laat niets binnen, behalve x". |
|
We kunnen ook de policy van zo'n chain wijzigen. Standaard staat de policy op ACCEPT (we laten alles door), maar we kunnen die ook op DENY zetten (alles weigeren). Dit is van belang als we een een firewall opbouwen. We kunnen dan kiezen voor "laat alles binnen, behalve x" of "laat niets binnen, behalve x". |
- ACCEPT: ontvang de data, zonder filtering (dit wordt vooral gebruikt als de policy op DENY staat)
- DENY: negeer de data die binnenkomt
- REJECT: informeer de remote host dat zijn verkeer werd geweigerd
- MASQ: voor het gebruik van NAT (Network Adress Translator). Wordt gebruikt bij het routen van verkeer vanaf een intern netwerk
- internet. De router gaat de binnengekomen pakketten aanpassen en doorsturen
- REDIRECT: doorsturen naar een andere poort/ander adres RETURN: de chain-policy beslis
|
|
In volgend diagram wordt werking van de chains voorgesteld. |
 |
|
Opbouw IPTABLES |
IPTABLES is totaal verschillend van IPCHAINS. Inkomende pakketten die bedoeld zijn voor routing komen niet meer langs de input of output chain (zie diagram). |
 |
|
De forward chain is volledig gescheiden van input/output. |
|
Als we verder kijken in het "design" van IPTABLES zien we dat er boven de chains ook nog TABLES zijn. Iedere table heeft een eigen reeks van chains. Er zijn zo 3 standaardtables: |
- filter: de normale filters met input, output en forward chains
- nat: specifiek voor NAT. Bevat de chains prerouting, postrouting en output
- mangle: het wijzigen van pakketten. Bevat prerouting en output
|
|
De benamingen van wat we met de pakketten kunnen doen zijn lichtjes gewijzigd: |
- ACCEPT (zie ipchains)
- DROP: tegenhanger van DENY bij ipchains
- QUEUE: stuur het pakketje naar "userspace" (waar hopelijk een programma klaarstaat om het op te vangen)
- RETURN (zie ipchains)
|
Je kan ook nog altijd extensies zoals REJECT gebruiken, maar die worden nu gedefinieerd als optie. |
|
Een simpel voorbeeld |
Voor de precieze werking van ipchains of iptables kan je de man-pages raadplegen, maar we raden vooral de HOWTO's aan op http://www.linuxdoc.org of http://netfilter.samba.org. |
|
Zowel de ipchains als iptables syntax wordt in dit hoofdstuk beschreven. |
Om op te vragen welke rules actief zijn kan je volgende commando's gebruiken: |
ipchains -L
of
iptables -L |
|
Om de policy van een chain te wijzigen (bijvoorbeeld de input chain) gebruiken we: |
ipchains -P input DENY
of
iptables -P INPUT DROP |
|
Stel dat we één enkele poort willen blokkeren (blokkeren van poort 139 voor inkomend verkeer op een bepaalde ethernetkaart): |
ipchains -A input -i eth0 -p TCP -d 0/0 139 -j DENY
of
iptables -A INPUT -i eth0 -p TCP --destination-port 139 -j DROP |
|
Met de optie "-i" definiëren we voor welke netwerkkaart de rule geldig is (indien niet aangegeven is de rule geldig voor alle kaarten). Met de optie "-d" geef je een adres en poort op, omdat het ip-adres niet relevant is, definiëer je 0/0, wat alle adressen voorstelt (bij iptables moeten we geen adres gebruiken). "-j" zegt de netwerklaag wat er met het pakket moet gebeuren indien je een pakket ontvangt dat overeenstemt met de door jou opgegeven criteria. Met "-p" definiëren we het protocol, dit kan bijvoorbeeld ook UDP zijn. We kunnen ook de optie "-s" (source) gebruiken indien je wil filteren op afkomst van een pakket (in dit voorbeeld doen we dit niet). |
|
Voor het invoegen/verwijderen van rules kan je volgende opties gebruiken (zowel ipchains als iptables): |
- A: append, toevoegen
- D: delete, verwijderen
- R: replace, wijzigen
|
|
Indien je een hele table of chain wil leegmaken kan je volgende commando's gebruiken: |
ipchains -F of ipchains -F chain
iptables -F of iptables -F CHAIN |
|
GUI tools |
Uiteraard kan je de firewall ook wijzigen via GUI tools of automatische scripts. |
|
Je kan onder andere in Linuxconf zo'n configuratie vinden. De meeste distributies leveren zelf tools hiervoor (sommige hebben zelfs een configuratie bij de installatie).
De meeste tools die je hiervoor vindt kunnen ook routing configureren. |
|
De configuratie van de firewall vindt je in Config - Networking - Firewalling |
 |
|
Een aanrader is zeker Bastille-linux, te vinden op http://www.bastille-linux.org. Dit is een soort wizard script die aan de hand van vrij gemakkelijke vragen een firewall opstelt. |
 |
|
Na even vlug opgezocht te hebben op http://www.freshmeat.net vind je nog enkele andere voorbeelden zoals:
fwbuilder (te gebruiken met iptables), http://www.fwbuilder.org |
 |
|
Het programma is geschreven in C++ en GTK, maar er zijn RPM bestanden verkrijgbaar met de reeds gecompileerde code. |
|
Een alternatief is Jfwadm. Dit is een configuratieprogramma voor ipchains dat geschreven werd in JAVA. Zie http://perso.libertysurf.fr/mickaelf/JFwadmin/ |
 |
|
Firewall Appliance |
Velen vinden het misschien handig om hun netwerk aan te sluiten op het internet, maar willen hun netwerk wel afgeschermen en beveiligen van de buitenwereld. Je kan dit door het installeren van een router/firewall, maar je kan ook een (oude) PC met Linux ombouwen tot router/firewall. |
|
In dit gedeelte is het enkel de bedoeling om te laten zien hoe een basisconfiguratie van zo'n router eruit ziet. |
|
Om een internetlijn te delen tussen meerdere gebruikers moet je NAT gebruiken (zie hoofdstuk IP). Door NAT kan je de private adressen op jouw netwerk laten vertalen door de router alsof ze van de router zelf komen. Hierdoor wordt het mogelijk om met meerdere computers gebruik te maken van één officieel internet adres. |
|
Je kan de configuratie altijd uitbreiden tot bijvoorbeeld een proxy-server die vaak opgevraagde pagina's bewaardt, maar dit is optioneel (op trage computers zet je best geen proxy-server). |
|
De hardware die je nodig hebt: |
- 1 PC, 386 of hoger (486 aangeraden)
- 16Mb RAM (met oudere distributies kan men zo laag gaan als 4Mb, maar dit is niet aan te raden).
- 2 netwerkkaarten
- internetconnectie (telenet, ADSL, huurlijn, dial-up,...) en een intern netwerk
|
|
Je zet eerst routing aan. Je kan dit in Linuxconf - Client Tasks - Routing and Gateways - Set Defaults - knop Enable Routing of de optie "net.ipv4.ip_forward=1" definiëren in /etc/sysctl.conf (enkel voor RedHat en afgeleide distributies). |
Je kan routing ook "at runtime" aanzetten door het commando "echo 1 > /proc/sys/net/ipv4/ip_forward" (bij deze methode gaat de informatie verloren bij een herstart van het systeem, dus hou er rekening mee dat je dit dan nogmaals moet uitvoeren). |
|
Vervolgens moet je bij iedere start van het systeem volgende commando's draaien (we nemen aan dat 192.168.20.0 het netwerkadres van jouw interne netwerk is): |
|
IPCHAINS |
Bij iptables moeten we een aparte table gebruiken in plaats van de forward chain |
iptables -P FORWARD DROP
iptables -A FORWARD -i eth1 -o eth0 -m state --state |
ESTABLISHED,RELATED -j ACCEPT
|
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -j |
MASQUERADE
|
|
eth0 = netwerkkaart aan LAN
eth1 = netwerkkaart aan internet |
|
Nota: Dit is enkel een skelet van een configuratie, bijkomende configuratie van de firewall is aangeraden. |
|
Er zijn ook GUI programma's die dit kunnen configureren (zie eerder in dit hoofdstuk). |
|
Interne PC's |
Op de interne PC's moet je het volgende configureren: |
- Default gateway = (interne) ip-adres van jouw router/firewall
- DNS = DNS adressen van jouw ISP (of die van een andere geldige DNS server)
- proxy server (enkel nodig bij Telenet omdat daar http-verkeer wordt geblokkeerd)
|
|
Voor meer gedetailleerde instructies mag je een bezoek brengen aan http://www.linuxdoc.org en zoeken naar de Masquarading HOWTO |
|
|
|
|
Index - Vorige - Volgende |
|
|
|
|