root@pcp:~# nmap 192.168.5.1Hoofdregel 1: Vertrouw niets en niemand!Dit klinkt heel erg, maar aan de hand van een aantal voorbeelden zal het nut van deze regel worden aangetoond. Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
Zoals u ziet, laat dit programa al zien welke poorten er bij een systeem openstaan .root@pcp:~# finger root@192.168.5.1 [192.168.5.1/192.168.5.1] Welcome to Linux version 2.2.19 at pcp ! 11:08 up 9 days, 22:13, 2 users, load average: 0.41, 0.29, 0.16 Login: root
Name: root
Zo weet u in twee stappen dat het betreffende systeem Linux versie 2.2.19 gebruikt en kunt u op het internet bekende bugs opzoeken om deze te gebruiken. Een hekje (#) in /etc/inetd.conf en dit was wat moeilijker te achterhalen geweest.Voorzorgsmaatregelen Bovenstaande anekdotes zijn maar een paar voorbeelden van het brede arsenaal dat systeemkrakers tot hun beschikking hebben. Maar gelukkig kunt u ook wat doen. Een aantal van deze maatregelen komen hier aan de orde.telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Dit betekent dat in /etc/services een regel staat met de term 'telnet'. In het bestand staat:telnet 23/tcp # Telnet telnet 23/udp # Telnet Sterker nog, als er een pakket binnenkomt op poort 23 en het is een TCP- of UDP-pakket, dan wordt de dienst 'telnet' gestart.# See tcpd(8) and hosts_access(5) for a description # #(ALL EXCEPT in.fingerd) EXCEPT in.identd: # ALL : (save_finger -l @%h 2>&1| \ # /bin/mail -s "%d-%h %u" root) & #portmap: ALL ALL: LOCAL ALL: .dsinet.org in.telnetd: .selwerd.nl Hierin betekend 'ALL: LOCAL' dat alle poorten toegankelijk zijn voor alle diensten vanaf hetzelfde systeem.# See tcpd(8) and hsts_access(5) for a description #http-rman : ALL EXCEPT LOCAL ALL: ALL Dit is tevens de beste instelling. Alle verbindingen van alle systemen worden geweigerd. Omdat er eerst gecontroleerd wordt in het bestand /etc/hosts.allow betekent dit, dat als men daar niet in staat vermeld, men geen rechten heeft tot willekeurig welke server.root@pcp:~# find / -perm -u=s -print U kunt het systeem zodanig configureren dat dit regelmatig wordt gecontroleerd.root@pcp:~# rpm -qa |xargs rpm -Vv .M...... /etc/news ......G. /home .M...UG. /opt/fsuite/home ....L... /usr/X11R6/lib/X11/app-defaults .M...... /usr/lib/news <uitvoer afgebroken> Zoals u ziet, is dat een behoorlijke lijst aan bestanden die afwijken van de orginele rpm-versie. De letters voor de bestandsnamen verduidelijken meer over de afwijking:root@pcp:~# ssh jan@somehost.nl jan@somehost.nl's password: Last login: Thu Aug 30 12:10:34 2001 Have a lot of fun... You have new mail. jan@somehost.nl:~$ Het ssh-programma zorgt voor een versleutelde telnet-sessie met een ander systeem en is de methode waarmee een beheerder meerdere systemen kan beheren zonder dat hij bang hoeft te zijn dat iemand zijn wachtwoord van het netwerk plukt.root@pcp:~# ssh-keygen Initializing random number generator... Generating p: ....................++ (distance 284) Generating q: ........................................++ (distance 652) Computing the keys... Testing the keys... Key generation complete. enter file in which to save the key (/root/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification as been saved in /root/.ssh/identity. Your public key is: 1024 37 <heel veel nummers> <heel veel nummers> root@pcp Your public key has been saved in /root/.ssh/identity.pub Zoals u ziet, moet u twee keer een ontcijferzin intypen. Dit is een voor u makkelijk te onthouden zin zoals: "Dit is mijn geheim." Vervolgens wordt een publieke (in ~/.ssh/identity) en en geheime sleutel (in ~/.ssh/identity.pub) aangemaakt. De bovenstaande <heel veel nummers> is in werkelijkheid een hele lange regel cijfers. U kopieert nu deze regel naar uw bestand ~/.ssh/authorized_keys op het systeem waar u op wilt kunnen inloggen. Als u daarna 'ssh' opstart, kunt u zonder wachtwoord op te geven inloggen. Wel moet u natuurlijk uw 'passphrase' intypen.root@pcp:~# ssh localhost Enter passphrase for RSA key 'root@pcp': Last login: Thu Aug 30 12:24:10 2001 from localhost Have a lot of fun... You have mail. root@pcp:~# Host security Shadow passwordsjan@pcp:~$ su Password: root@pcp:~# Als u achter de opdracht een minteken (-) zet, wordt de root-shell als login-shell opgestart. De opstartbestanden zoals /etc/profile worden dan doorlopen. Zo kunt u ook inloggen onder een andere gebruikersnaam ('su - koos'). Beperk het gebruik van die sessie tot het minimum. Als u uw systeem verlaat (ook als u 'even' naar het toilet gaat), moet u de toegang tot het werkstation blokkeren. Gebruik 'xlock' onder X-windows en 'vlock' of 'screen' op een terminal.User level security Limietenjan@pcp:~$ ulimit -a core file size (blocks) 0 data seg size (kbytes) unlimited file size (blocks) unlimited max locked memory (kbytes) unlimited max memory size (kbytes) unlimited open files 1024 pipe size (512 bytes) 8 stack size (kbytes) 8192 cpu time (seconds) unlimited max user processes 256 virtual memory (kbytes) unlimited jan@pcp:~$ Hieruit blijkt dat het maximumaantal processen dat deze gebruiker mag starten 1024 is, oftewel het maximum van het systeem. Met de volgende opdracht wordt dit aantal drastisch gereduceerd:ulimit -u 200 De betreffende gebruiker kan nu maximaal 200 processen starten. Deze regel opnemen in /etc/profile is dus voor dit probleem een aanrader. Zo kunt u ook de hoeveelheid CPU-tijd (optie '-t'), de maximale hoeveelheid virtueel geheugen (optie '-v') enzovoort aanpassen.Login In dit deel van het hoofdstuk volgen nog een paar tips rond het loginproces.root@pcp:~# last |less jan pts/0 piii-800 Thu Aug 30 10:54 still logged in root tty1 Wed Aug 29 09:39 - 15:41 (06:01) koos tty2 Wed Aug 29 00:47 - 00:47 (00:00) root tty1 Wed Aug 29 00:44 - 00:47 (00:02) root tty6 Wed Aug 29 00:44 - 00:47 (00:03) jan :0 console Wed Aug 29 00:42 still logged in jan :0 console Wed Aug 29 00:30 - 00:40 (00:10) root tty1 Wed Aug 29 00:30 - 00:44 (00:14) ... jan tty2 Tue Aug 28 16:46 - 21:03 (04:16) jan tty1 Tue Aug 28 16:44 - 21:36 (04:52) reboot system boot 2.2.19 Tue Aug 28 16:43 (1+20:31) ... root tty2 Sun Aug 26 22:09 - down (00:04) jan pts/1 piii-800 Sat Aug 25 12:38 - 12:46 (00:08) jan pts/0 piii-800 Sat Aug 25 12:31 - 12:46 (00:14) jan :0 console Sat Aug 25 12:20 - 22:11 (1+09:51) Hieruit valt af te leiden dat er een aantal usersessies vanaf het netwerk zijn geweest vanaf het systeem 'piii-800'. Daarvan duurt de langste sessie nog steeds voort :). Het betrof een sessei vanaf het netwerk omdat een pseudo-tty (pts) werd gebruikt. Op het systeem is op de virtuele console 6 de gebruiker root ingelogd. Gebruiker 'koos' is op virtuele console 2 ingelogd. Het systeem is voor het laatst geboot op 28 augustus.jan@pcp:~$ who jan :0 Aug 29 00:42 (console) jan pts/0 Aug 30 10:54 (piii-800) jan@pcp:~$ acroot@pcp:~# ac -p koos 0.06 jan 190.20 root 161.35 total 351.61 root@pcp:~# Zoals u ziet, is de gebruiker 'jan' iemand die het systeem vaak gebruikt. Het programma 'ac' hoeft niet standaard aanwezig te zijn. Het wordt meestal geinstalleerd als onderdeel van de boekhoudsoftware. |
||||||||||||||||||||||||||||||||
|
Inleiding Een firewall is een systeem dat fungeert als gateway in een netwerk en daarmee twee netwerken met elkaar verbindt. De firewall is het deel dat zorgt dat niet alle pakketten van netwerk A naar netwerk B kunnen. Op deze manier wordt bijvoorbeeld voorkomen dat iemand vanaf het internet een telnet-sessie kan starten op uw, via het ISDN aangesloten, gateway systeem.Configuratie De basisroot@pcp~# ipchains -L Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ anywhere anywhere n/a Chain output (policy ACCEPT): root@pcp~# Zoals u ziet, is er maar een regel ingesteld en dat is de FORWARD-chain. Het betreft hier de optie 'masquerading'. De volgende opdracht zet masquerading aan op uw systeem. Dit is wat u vaak als eerste zult willen doen.ipchains -A forward -j MASQ Natuurlijk kunt u het hierbij laten en uw systeem verder helemaal open laten staan voor eventuele nieuwsgierige derden. Als het een gatewaysysteem betreft, wilt u waarschijnlijk toch enige mate van beveiliging hebben.ipchains -F ipchains -X De eerste regel maakt alle chains leeg en de tweede regel verwijderd alle niet-standaard chains (dus alles behalve INPUT, OUTPUT en FORWARD).ipchains -P input DENY # Default rule is deny, no we are NOT paranoid ipchains -P forward DENY ipchains -P output DENY Bovenstaande opdrachten betekenen dat de policy van deze chains betekent dat alle pakketten worden geweigerd. Dit komt overeen met de basisregel 1 van het beveiligingsbeleid. Alles uit, tenzij...ipchains -A input -j ACCEPT -i lo # Accept connections from ourselfs ipchains -A output -j ACCEPT -i lo # Accept outgoing from ourselfs Deze regels voegen aan de INPUT- en OUTPUT-chain de actie ACCEPT toe voor alle pakketten die vanaf de loopback-interface komen. Dit betekent dat u alleen netwerkdiensten van het systeem kunt gebruiken als deze via de loopback-interface worden gegeven. Andere netwerkgebruikers komen voor een gesloten deur.ipchains -A $DIRECTION -j $ACTION -p $PROT -i $SRC_IF -s $SRC_IP \ $SRC_PORT -d $DST_PORT <t> Via de inhoud van het /etc/services-bestand vindt u het gebruikte protocol en het poortnummer van deze diensten.ftp-data 20/tcp # File Transfer [Default Data] ftp-data 20/udp # File Transfer [Default Data] ftp 21/tcp # File Transfer [Control] ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp Telnet telnet 23/udp Telnet Hierbij valt op dat bijvoorbeeld ftp-data via poort 20 gaat en zowel TCP als UDP kan gebruiken, terwijl ftp op poort 21 alleen maar TCP gebruikt. De poortnummers behoren thuis in de velden $SRC_PORT en $DST_PORT. Om een firewall goed te kunnen opbouwen is uitgebreide kennis van de protocollen onontbeerlijk. Het zou te ver gaan om deze uitgebreid te bespreken :) Een goede bron van informatie zijn de RFC's en STD's voor de verschillende protocollen.> www.telegraaf.nl Server: mail.bedrijf.nl Address: 10.1.1.1 Name: www.telegraaf.nl
> Nu u het IP-adres weet, kunt u in 'ipchains' de regel toevoegen waarmee u verkeer naar deze site blokeert.ipchains -A output -d 195.64.78.4 -j REJECT Natuurlijk gebruikt u een DNS-server en deze forward-verzoeken en krijgt U de antwoorden van deze forwarder retour en van niemand anders (LOCIP is uw eigen IP-adres, ippp0 is uw ISDN-interface):ipchains -A INPUT -i ippp0 -p UDP -s IP-adres-forwarder -d LOCIP dns -j ACCEPT U wilt ftp kunnen gebruiken (de verbindingen gebruiken poortnummers boven de 1023 en onder de 6000):ipchains -A INPUT -i ippp0 -p TCP -s 0.0.0.0/0 ftp-data -d LOCIP 1024:5999 -j ACCEPT ipchains -A INPUT -i ippp0 -p TCP -s 0.0.0.0/0 ftp-data -d $LOCIP 6010: -j ACCEPT ipchains -A INPUT -i ippp0 -p TCP -d $LOCALIP ftp -j ACCEPT. Voor uw eigen maatwerk is nalezing van de IPCHAINS-HOWTO een absolute aanrader.
|