De vanligaste servertjänsterna och säkerhetsaspekter på dessa

Den absolut vanligaste typen av attack är att utnyttja buggar i serverprogram. Se därför till att alltid ha den senaste versionen av de servertjänster du använder. Om det inte absolut är nödvändigt kör servertjänsten som någon annan användare än root. Begränsa tillgången till de servertjänster som inte hela världen måste ha access till.

Programmet inetd används för att starta olika servertjänster i samband med anrop från en klient. Vilka tjänster som startas från inetd ser du i filen /etc/inetd.conf.

Inetd

Stäng av alla servertjänster som inte måste vara igång. Titta i /etc/inetd.conf och sätta ett # före varje tjänst som du absolut inte måste ha. Är du osäker prova att kommentera bort tjänsten med ett #-tecken i början på raden. Ingenting går sönder bara för att du tar bort en tjänst ur inetd.conf. Är det någonting viktigt som slutade fungera vet du vilken tjänst det var.

I nyare system är inetd ersatt med xinetd, se nedan.

Alla tjänster som skickar kommandon, lösenord och data i klartext ska alltid undvikas. Till dessa hör telnet, ftp, pop (pop2, pop3), imap m.fl. Det är väldigt enkelt att avlyssna trafiken och uppsnappa lösenord och data.

Finger kan användas av crackers för att ta reda på vilka användare som finns på datorn och kan underlätta för dem för att bryta sig in i din dator. Stäng därför helst av finger.

Här är ett exempel på några tjänster som kanske kan få vara kvar.

# Exempel på en inetd.conf
#
discard stream  tcp     nowait  root    internal
discard dgram   udp     wait    root    internal
#
# Mail
smtp  stream  tcp     nowait  root    /usr/sbin/tcpd    sendmail -bs
#
#
#slut på inetd.conf

I exemplet ovan körs sendmail och ident via en tcpwrapper. En tcpwrapper ser till att uppkopplingsförsök loggas och den sköter dessutom om accesskontroll d.v.s. bestämmer via /etc/hosts.allow och /etc/hosts.deny vilka datorer som ska få komma åt en viss tjänst.

/etc/hosts.allow och /etc/hosts.deny

I filen /etc/hosts.allow och /etc/hosts.deny begränsas vilka datorer och eller domäner som ska få komma åt de respektive tjänsterna som körs via tcpwrappern. En /etc/hosts.allow kan typiskt se ut enligt följande där endast datorerna och domänerna i listan kommer åt sendmailservern på datorn. En lista kan vara en fullständig domänadress till en dator eller en domän där alla datorer inom den domänen får använda tjänsten. Domänen .und.ida.liu.se innebär att alla alla studentdatorer på IDA vid Linköpings universitet får komma åt en tjänst. För mer information om /etc/hosts.allow och /etc/hosts.deny se manualsidan hosts_access(5) (fås enklast fram med: man 5 hosts_access )

#
# Ett exempel på en /etc/hosts.allow
# servertjänst: lista på datorer
# servertjänst är namnet på programmet
#
sendmail: winona.rydnet.lysator.liu.se, mailhost.lysator.liu.se, mail.student.liu.se, samantha.lysator.liu.se
in.identd: .lysator.liu.se, .und.ida.liu.se, .ctrl-c.liu.se
#
#

Mailservrar, som sendmail, bör för de flesta privatpersoner begränsas i sin tillgänglighet så att ingen kan utnyttja några eventuella säkerhetshål i serverprogrammet eller använda det för att reläa spam-mail. För andra organisationer kan det vara svårt att begränsa tillgängligheten eftersom det då inte går att ta emot e-post från omvärlden. Se alltid till att ha senaste versionen av sendmail installerad eller använd eventuellt någon annan e-postserverprogramvara för den externa e-postservern ut mot omvärlden. I övrigt se avsnittet om SMTP längre ned.

xinetd

I nyare system är inetd ersatt med xinetd som är lite mer flexibel än inetd. För xinetd finns det en fil per tjänst och de brukar ligga i katalogen /etc/xinetd.d/

För att stänga av en tjänst ändra i filen för den aktuella tjänsten och sätt disable till yes.

Exempel: telnet ska stängas av. Ändra i filen /etc/xinetd.d/telnet och sätt disable = yes. Xinetd kommer därefter att inte starta telnet. Hela filen kan då t.ex. se ut enligt nedan.

# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream        
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = yes
}
Kom ihåg att starta om xinetd så att den på nytt läser in sin konfiguration efter att någonting har ändrats i någon konfigurationsfil.

netstat

Gör netstat -a | more och titta på utdata från netstat. Det är avsnittet Active Internet connections (including servers) som är intressant att titta på. I detta avsnitt är det rader med LISTEN som är de man ska titta nogrannt på. Visar den till exempel en rad:
tcp        0      0 *:www                   *:*                     LISTEN
innebär det att en servertjänst ligger och väntar (LISTEN) på uppkopplingar på www-porten. Då vet vi att en servertjänst är igång och väntar på uppkopplingar.

Rader med ESTABLISHED visar etablerade (pågående) förbindelser. Här har vi en uppkopplad ssh-förbindelse mellan annan-burk och minburk.

tcp        0      0 minburk.liu.se:22 annan-burk.liu.se:1022 ESTABLISHED

lsof

lsof är ett program som finns i modernare Linux-distributioner. lsof kan visa samma information som netstat plus mycket mer. Främst används den till för att visa vilka processer som läser/skriver till olika filer/kataloger och för att se vilka servertjänster som har öppna nätverksportar. Gör lsof -i (som root) för att lista alla nätverksservertjänster som väntar på uppkopplingar och för att visa alla etablerade nätverksförbindelser. Notera att du på ett system med en 2.4-kärna behöver lsof 4.51 eller nyare för att lsof -i ska fungera.

Olika servertjänster

Nedan följer en lista över några vanliga tjänster och en liten kort beskrivning för var och en av dem.

systat

systat används för att ge tillgång till statusinformation om datorn. Bland informationen som visas finns vilka som är inloggade. systat är en TCP-baserad tjänst som lyssnar på port 11. Undvik att ha tjänsten igång och tillgänglig från nätet. Ju mer information det går att få ut från en dator ju lättare blir det att bryta sig in på den.

FTP

FTP används för att hämta och skicka filer över nätet. Ska du ha en FTP-server igång bör du konfigurera den så att den endast tillåter anonym FTP och se till så att den är begränsad till en mycket begränsad area på hårddisken. FTP skickar användarnamn och lösenord i klartext över nätet och bör inte användas av användare för att logga in och hämta eller lämna filer. Vanliga användare bör använda SSH eller något annat krypteringssytem. Om du inte absolut måste ha igång FTP stäng av den. Flera ftp-servrar har varit blivit kända under årens lopp för sina säkerhetsproblem. Se alltid till att ha den senaste versionen av ftp-server-programvaran. FTP är en TCP-baserad tjänst som upprättar en kommandoförbindelse till port 21. Till detta tillkommer en datakanal. Se avsnittet om Introduktion till hur de vanligaste nätverkstjänsterna fungerar för utförligarebeskrivning av hur FTP-förbindelser upprättas.

telnet

telnet används för att upprätta terminalförbindelser till datorn. All trafik inklusive användarnamn och lösenord skickas i klartext över nätet. Använd inte telnet och stäng av servertjänsten. Använd istället SSH eller något annat system för krypterade förbindelser. telnet är en TCP-baserad tjänst som lyssnar på port 23.

SMTP

SMTP står för Simple Mail Transfer Protocol och används för att skicka e-post till en e-postserver och för att skicka e-post mellan e-postservrar. Se till att din e-postserver inte kan användas för att reläa vidare, skicka vidare, e-post. E-postservrar som tillåter vidareskickning av e-post är populära att använda för att skicka ut oönskad e-post, så kallkad SPAM. För att kontrollera om din e-postserver tillåter vidareskickning gör följande:

telnet din-epostserver.din.domän  25
Trying 192.168.17.42...
Connected to din-epostserver.
Escape character is '^]'.
220 din-epostserver ESMTP Sendmail 8.9.3/8.9.3; Sat, 4 Mar 2000 11:07:57 +0100
HELO din-arbetsstations-namn
250 din-epostserver Hello din-arbetsstation [192.168.17.7], pleased to meet you
MAIL FROM: kalle@domän
250 kalle@domän... Sender ok
RCPT TO: nisse@någonannansdomän
250 nisse@någonannansdomän... Recipient ok (will queue)
quit

Ovan svarar e-postservern med 2xx på vår RCPT TO som är till en adress på en annan domän. 2xx innebär att e-postservern godkände vårt kommando vilket i det här fallet innebär att den reläar, skickar vidare e-post. Hade den sagt 5xx och ett felmeddelande hade den inte godkänt vårt kommando och inte skickat vidare, reläat brevet. Den som reläar trafik riskerar att hamna på svarta listor och kommer därmed inte att kunna skicka eller ta emot e-post från många organisationer i omvärlden.

SMTP är en TCP-baserad tjänst där servern lyssnar på port 25.

Ett exempel på en bra e-postserver med hög säkerhet är postfix.

Nameserver/DNS

En nameserver används för att göra uppslagningar mellan IP-adresser och domännamn. Vanligtvis behöver man inte köra någon egen server på klientdatorer utan det räcker med att använda någon nameserver som finns på nätet. För Linköpings universitet finns det ett flertal utmärkta nameservrar. Stäng av denna servertjänst på din dator om du inte använder den. Om du ska köra en nameserver se till att ha den senaste versionen av serverprogrammet bind då äldre versioner har kända säkerhetsproblem. DNS är en framförallt UDP-baserad tjänst som lyssnar på port 53. Vid zonöverföringar av hela namnzoner används istället TCP.

TFTP

TFTP står för Trivial File Transfer Protocol och är ett system för att överföra filer över nätet. TFTP används främst för att boota disklösa datorer. TFTP har ingen säkerhet och bör inte användas. TFTP är en UDP-baserad servertjänst som lyssnar på port 69.

finger

finger är en tjänst för att se vilka som är inloggade på en dator och för att få lite mer information om en användare. Det är alltid dumt att lämna ut mer information än nödvändigt till obehöriga. Stäng därför helst av finger. finger är en TCP-baserad servertjänst som lyssnar på port 79.

HTTP/WWW

En egen WWW-server kan vara trevligt att ha. Se dock till att köra en någorlunda ny och säker WWW-server. Se även över dina CGI-script så att de inte kan användas för att bryta sig in i din dator. Tänk på att det som webb-klienten skickar kan vara vad som helst och det ska CGI-scripten kunna klara av att ta emot utan att krascha. Om ditt CGI-script exempelvis vill ha ett användarnamn på max 80 tecken ska programmet inte krascha om det får ett namn som är mer än 80 tecken långt.
WWW är en TCP-baserad servertjänst som lyssnar på port 80.

Några gamla klassiska CGI-script som har varit kända för sina säkerhetshål är handler, phf och test-cgi. För var och en av dessa skapa ett cgi-script som istället skickar ett meddelande till dig med e-post om att någon har försökt och som skickar ett svar till den som försökte att det inte gick.

Exempel:

#!/bin/sh

/usr/lib/sendmail användare@dator.domän.liu.se <<EOF
To: användare@dator.domän
Subject: Warning: PHF probe from $REMOTE_ADDR ($REMOTE_HOST)

Warning:

Remote PHF probe from $REMOTE_ADDR ($REMOTE_HOST).
EOF

echo "Content-Type: text/plain"
echo ""
echo "Request failed. Please contact the computer system administrators"
echo "at domän for more information."

exit 0

Ett annat exempel på en tjänst som körs ovanpå en webbserver är phpBB. Den har under åren haft flera säkerhetsproblem. Om du kör phpBB se alltid till att köra den senaste säkra versionen.

POP

POP används för att hämta e-post från en e-postserver. Då allt skickas i klartext bör den inte användas. Om POP ska användas använd då APOP eller kör POP ovanpå SSL. POP är en TCP-baserad servertjänst som lyssnar på port 109 (pop2), port 110 (pop3), eller port 995 (POP3 över SSL). Undvik att köra en publikt tillgänglig POP-server.

IMAP

IMAP används för att hämta e-post från en e-postserver. Då allt skickas i klartext bör den inte användas. Om IMAP ska användas se till att köra den ovanpå SSL för att få en krypterad förbindelse. Undvik att köra en publikt tillgängllig IMAP-server. IMAP är en TCP-baserad förbindelse som lyssnar på port 143 (imap2), port 220 (imap3) eller port 993 (IMAP över SSL).

Portmapper

Portmapper används tillsammans med RPC, Remote Procedure Call, vilket är olika servertjänster för att utföra lite olika saker, t.ex. för att NFS-montera hårddiskar över nätverk. Kör helst inte en publikt tillgänglig portmapper. Äldre versioner av portmappern har kända säkerhetsproblem. För att se vilka servertjänster som portmappern sköter kontakten med omvärlden för kör kommandot rpcinfo. Exempel:

[root@datorn /root]# rpcinfo -p 192.168.17.42
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100011 1 udp 796 rquotad
100011 2 udp 796 rquotad
100005 1 udp 806 mountd
100005 1 tcp 808 mountd
100005 2 udp 811 mountd
100005 2 tcp 813 mountd
100003 2 udp 2049 nfs

Ovan ser vi att portmappern lyssnar på port 111, rquotad på port 796, mountd på port 806, 808, 811 och 813 och slutligen nfs på port 2049.
Portmappern använder TCP och UDP och lyssnar på port 111.

Ident

När en klient upprättar en förbindelse med en server kan det hända att servern vill veta vilken användare på klientdatorn som ligger bakom uppkopplingen. För att ta reda på detta kopplar server upp sig mot Ident på klientdatorn. Ident/Auth är en TCP-baserad servertjänst som lyssnar på port 113. Det är sällan denna tjänst används.

NNTP

NNTP står för Network News Transport Protocol och används för att överföra Usenet News artiklar. Om du inte har väldigt gott om ledig disk vill du antagligen inte köra en egen newsserver. En vanlig newsserver i Linux och andra unixsystem är inn. News är en TCP-baserad servertjänst som lyssnar på port 119.

NTP

NTP står för Network Time Protocol och används för att tidssynkronisera datorer. Om du har ett eget atomur eller synkroniserar klockan mot någon tidsserver så behöver du ha denna igång. Om du synkroniserar klockan mot en eller flera tidsservrar se till att begränsa inkommande UDP-trafik in till port 123 så att bara tidsservrarna får skicka trafik till den. NTP är en UDP-baserad tjänst som lyssnar på port 123.

SNMP

SNMP står för Simple Network Management Protocol och används främst för övervakning och konfigurering av nätverksutristning. Genom att ha en SNMP-server igång går det att få reda på väldigt mycket om datorn. Kör därför ingen egen SNMP-server. SNMP är en UDP-baserad tjänst som lyssnar på portarna 161 och 162.

rexec

Rexec står för remote execution och används för att köra kommandon på en annan dator. Kör ingen sådan tjänst så att någon annan kan komma åt att köra program på din dator. Rexec är en TCP-baserad tjänst som lyssnar på port 512.

rlogin och rsh

rlogin och rsh används för att logga in och köra kommandon på en annan dator över nätet. Allt sker i klartext inklusive lösenord. Tillåt ingen att komma åt att göra det på din dator. Stäng därför av möjligheten till rlogin och rsh. Använd istället en krypterad tjänst som t.ex. ssh. rlogin och rsh är TCP-baserade tjänster som lyssnar på portarna 513 och 514.

Syslog

Syslog används för att logga saker och ting på fil. Många program använder syslog för att hantera loggningen. Vanligtvis vill man inte att andra ska få komma åt att skicka meddelanden till ens syslogserver från nätet. Syslog bör därför spärras med hjälp av brandväggsregler. Servern syslog ska dock vara igång för att få några loggar. Syslog är en UDP-baserad tjänst som lyssnar på port 514.

Printer/BSD lpd

BSD lpd är en skrivarserver. Om du inte absolut vill tillåta andra att komma åt och skriva ut på din skrivare spärra denna tjänst för andra. BSD lpd är en TCP-baserad tjänst som lyssnar på port 515.

RIP

RIP står i det här fallet för Routing Internet Protocol och används för att skicka routinginformation mellan routrar. Du vill inte ha denna tjänst igång på din dator. RIP är en UDP-baserad tjänst som lyssnar på port 520.

NFS

NFS står för Network File System och används för att komma åt och montera diskar från andra datorer över ett nätverk. Detta kan säkerhetsmässigt vara ett problem och bör undvikas. NFS är en UDP-baserad tjänst som lyssnar på port 2049.

X Window system

X Window system är det vanligaste fönstersystemet som körs på Linuxsystem. Du vill inte att någon annan över nätverket ska få komma åt dina fönster och avlyssna dina knapptryckningar och musrörelser etc. Spärra med brandväggsregler så att det inte går att komma åt fönstersytemet utifrån. X Window System är TCP-baserad och lyssnar på portarna 6000-60xy, typiskt 6000-6063.

Dessutom är det alltid bra att på de datorer som kör en X-server undvika att köra med xhost + för att höja säkerheten. Om du trots allt vill att fönster ska kunna visas på en annan skärm använd xhost - och använd xauth. En ännu bättre metod för att visa fönster på andra skärmar är att tunnla över ssh. Om du loggar in på en annan maskin med ssh sätts allt nödvändigt upp, under förutsättning att den andra maskinen tillåter X-tunnling, och det är bara att starta grafiska applikationer som därmed visas på din skärm.

För X-servern går det att stänga av helt att den ska lyssna på TCP-uppkopplingar genom att i filen /etc/X11/xinit/xserverrc lägga till raden:
exec X :0 -nolisten tcp

Copyright © 2010 Kjell Enblom.
This document is covered by the GNU Free Documentation License, Version 1.1