2.4. Luk sikkerhedshullerne

Når installationen af RedHat er færdig er et varieret udvalg af serverprogrammer aktive, og det er både programmer, du ønsker at bruge, og programmer, du ikke aner, hvad bruges til.

Jo flere programmer, du har kørende, jo flere potentielle veje ind i din server er der for en cracker. Derfor skal vi nu have slået alt fra. Og derefter kan du så åbne for de programmer, du skal bruge, efterhånden som du får dem sat rigtigt op!

RedHat starter programmer op på to måder; dels via startop-scripts i /etc/rc.d/init.d/, og dels via superserveren Inetd/Xinetd.

I det følgende vil vi gennemgå sikringen af de to måder hver for sig.

I version 7.0/7.1 af RedHat er superserveren Inetd udskiftet med Xinetd. Det følgende afsnit henvender sig derfor kun til brugere af RedHat 6.2.

2.4.1. Sikring af Inetd

Superserveren Inetd fungerer ved at lytte på en masse forskellige UDP/TCP porte og så starte andre programmer, hvis der kommer nogle forespørgsler. Inetd styres af en enkelt konfigurationsfil (/etc/inetd.conf) og to filer, der bestemmer hvilke maskiner der må bruge hvilke servere (/etc/hosts.allow og /etc/hosts.deny).

Åbn først /etc/inetd.conf i en teksteditor. Filen består af en lang række linier af typen:

ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   in.proftpd

Linierne er bygget op på den måde, at første ord er den service linien svarer på (her FTP), og sidste ord er det program, der startes.

Nogle af linierne starter med # og andre ikke. De linier, der ikke starter med #, er aktive serverprogrammer! Start sikringen af din server med at sætte # foran ALLE linier i /etc/inetd.conf, gemme filen og køre:

[root@gnuskole /root]# /etc/rc.d/init.d/inet restart

for at få ændringerne til at træde i kraft. Senere skal du så fjerne # fra linierne når du vil aktivere de enkelte serverprogrammer.

Filerne /etc/hosts.allow og /etc/hosts.deny udgør et adgangsbegrænsnings-system, der giver dig mulighed for at bestemme, hvilke maskiner, der skal have adgang til hvilke serverprogrammer.

Det fungerer på den måde, at Inetd først kigger i /etc/hosts.allow for at se efter kombinationen

serverprogram : maskinnavn

Hvis det findes, gives adgang uanset hvad der står i /etc/hosts.deny. Hvis kombinationen ikke findes i /etc/hosts.allow kigger Inetd i/etc/hosts.deny. Hvis kombinationen findes der, nægtes der adgang. Hvis kombinationen ikke findes i nogen af filerne gives der adgang.

Fra start har alle altså ret til alt. Det første du bør gøre er at åbne /etc/hosts.deny i en teksteditor og indsætte linien

ALL : ALL

ALL er en variabel, der altid passer. Med denne tilføjelse har ingen altså lov til noget som helst, med mindre du giver lov til det i /etc/hosts.allow. Derefter åbner du /etc/hosts.allow og tilføjer:

ALL : localhost

Så kan du stadig bruge serverprogrammerne fra serveren selv. Fremover skal du huske at skrive aktive serverprogrammer og de maskiner, der må bruge dem, ind i /etc/hosts.allow.

2.4.2. Sikring af Xinetd

Med udskiftningen af Inetd med Xinetd har RedHat taget et skridt i retning af større sikkerhed. Xinetd styres dels af filen /etc/xinetd.conf, dels af opsætningsfiler for de enkelte services, som er placeret i kataloget /etc/xinetd.d.

I filen /etc/xinetd.conf findes afdelingen defaults, der sætter standardværdier, som gælder hvis ikke andet er nævnt i de enkelte services filer i kataloget /etc/xinetd.d.

Vi foreslår, at du begrænser antallet af samtidige processer for den enkelte server til et passende (rigeligt) antal (fx 60) for på den måde undgå DOS-angreb. Det gøres ved at tilføje linien:

instances  = 60  

I xinetd afløser linien only_from (eller no_access) /etc/hosts.allow og /etc/hosts.deny. Vi anbefaler, at du sætter dine netværksadresser ind i filen /etc/xinetd.conf som:

only_from  = 127.0.0.1 195.181.xxx.xxx/28 195.181.35.xxx/29 osv.

x'erne udskiftes med dine faktiske IP-adresser.

Måden at opgive subnetmasken på kan drille lidt; formen 195.181.xxx.xxx/255.255.255.240 duer ikke!. Omsætning mellem den lange måde at angive subnetmaske på (som man får fra Sektornet) og den korte, der skal bruges her, er beskrevet i "Friheden til systemadministration" under Klasseløst internet.

Dette udelukker som standard alle udenfor huset fra at bruge services der styres af Xinetd. De services, du ønsker alle maskiner skal kunne nå, skal så have tilføjet linien:

only_from  = 0.0.0.0

til deres respektive opsætningsfiler i kataloget /etc/xinetd.d. Skal færre have adgang begrænses antallet af maskiner og/eller netværk tilsvarende.

Yderligere hjælp til tuning af Xinetd findes med:

[root@gnuskole /root]# man xinetd.conf

En af de nye ting er også, at Xinetd kan kontrolleres fra programmet chkconfig (se næste afsnit). Det giver dig et endnu bedre overblik over de servere du tilbyder.

2.4.3. Sikring af selvstændige serverprogrammer

De serverprogrammer, der ikke startes fra Inetd, startes som selvstændige serverprogrammer via nogle start-scripts, der ligger i kataloget /etc/rc.d/init.d/. Hvilke der startes i hvilket runlevel styres af symbolske links i /etc/rc.d/rcX.d/, hvor X er tallet for de 7 runlevels.

Til at kontrollere hvilke serverprogrammer der startes op i hvilke runlevels findes der et fint værktøj, der hedder chkconfig. Du kan læse mere om det i [nørd@gnuskole /nørd]# man chkconfig.

Start med at danne dig et overblik over hvilke servere der startes i hvilke runlevels:

[root@gnuskole /root]# /sbin/chkconfig --list

Du fik sikkert en længere liste som den følgende i hovedet

nfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off

Alle de serverprogrammer, der indeholder 3:on, startes, når maskinen starter op normalt. Find ud af, hvad disse programmer gør, og slå dem fra du ikke skal bruge. De kan nemt slås fra med:

[root@gnuskole /root]# /sbin/chkconfig programnavn off

De slås tilsvarende til med:

[root@gnuskole /root]# /sbin/chkconfig programnavn on

Det er lidt af et detektivarbejde at finde ud af, hvad de enkelte programmer gør, men i starten af mange af startscriptene i kataloget /etc/rc.d/init.d/ findes der en kort beskrivelse, der måske kan hjælpe.

Her er fx beskrivelsen fra keytable:

# description: This package loads the selected keyboard map as set in \
# /etc/sysconfig/keyboard.  This can be selected using the kbdconfig \
# utility.  You should leave this enabled for most machines.

Lad os beholde den on!

Der er også en beskrivelse af programmerne i starten af deres man-sider. Prøv

[root@gnuskole /root]# man programnavn

også.

Endelig kan du se i /usr/share/doc/ (/usr/doc/ i RH 6.2) om du kan finde dokumentation af funktionen der.

Følgende programmer bør du lade køre: