Jag började skriva om hur man installerar webmin på en Raspberry Pi och började skriva en massa om nätsäkerhet så jag beslöt att bryta ut den delen till en separat artikel. Jag är ingen säkerhetsexpert men jag kan ändå dela med mig av mina erfarenheter om grundläggande datasäkerhet. Jag har i mitt arbete stött på alla olika typer av intrång, jag tänker inte dra en lång historia om hur man gör sitt system supersäkert utan ett antal saker som man bör tänka på när man har datorer exponerade mot resten av världen.
Lite historia
Tidigare så satt de flesta datorer som hade ett IP-nummer direkt på nätet utan några åtkomstbegränsningar så risken för ett intrång skulle vara ganska stort om de skulle se ut så idag. Ofta har företag med högre säkerhetskrav sina datorer indelade i olika zoner. Oftast en intern zone och något som man brukar kalla DMZ (DeMilitarized Zone), i den zonen lägger man alla datorer som ska åtkomst utifrån och sedan har man två brandväggar en ut mot internet och en mot det interna nätet för att skydda det om någon av maskinerna i DMZ skulle bli hackad.
Idag exponeras oftast bara enskilda portar på maskiner som ska vara åtkommliga utifrån. De flesta hemanvändare har en router kopplat på bredbandsuttaget och sedan är alla datorer anslutna till den. Om man inte ändrat på något ska man inte ha åtkomst utifrån utan routers uppgift är att släppa igenom svar på paket som datorer på insidan skickat iväg.
Hemmaroutern
De flesta hemanvändare har en router kopplat på bredbandsuttaget och sedan är alla datorer anslutna till den. Hemmarouterns uppgift är att göra det möjligt att använda flera datorer samtidigt med endast ett officiellt IP-nummer. Det finns ett antal nummerserier som är definierade som lokala, dvs de får inte användas för externa kommunikation, de är
- 10.0.0.0 – 10.255.255.255
- 172.16.0.0. -172.31.255.255
- 192.168.0.0 – 192.168.255.255
Routern håller reda på vilken dator som skickade vilket paket och när svar kommer, ser till att rätt dator får svaret. Sättet att byta ut avsändare (lokalt IP) till en annan (externa IP) kallas NAT (Network Address Translation)
På så sätt skyddar routern alla datorer på insidan från att någon utifrån ska hacka sig in, vad den inte skyddar mot är om man hämtar skadliga filer/program från internet. Vad skaparen av programmet vill, är att kunna köra sitt program innanför din router, eftersom när det är innanför får programmet öppna upp en koppling mot en externa dator och sedan kan den exerna anslutningen göra olika saker inne på ditt nätverk. För att skydda sig mot sådant behöver man en brandvägg
Normat har router också till uppgift att dela ut lokala IP-adresser till datorer som ansluts (DHCP) , routern kombineras ofta med WIFI funktion så att man kan koppla upp enheter trådlöst.
Hur gör man då för att låta andra surfa t.ex på en webserver som man har hemma, man använder sig av en funktion som oftast kallas “Port Forwarding” i routern. Vad den gör är att definiera en port på det externa IP som ska skickas vidare till en maskin på insidan. I exemplet med webservern (om vi säger att den ha ip 192.168.1.20) att man definierar port 80 -> port 80 på IP-nummer 192.168.1.20
Det finns en funktion på många routrar som heter uPNP (Universal Plug and Play) där applikationer kan själv öppna i brandväggen kopplingar mellan sig själv och en port på det externa IPt. Detta är en ganska bra sak, man behöver inte själv öppna upp i routern och veta vilken port som det gäller. MEN detta öppna också upp för illasinnande applikationer att själv öppna upp en väg rakt igenom din router till programmet, så detta är en avvägning mellan bekvämlighet och säkerhet.
Brandväggen
Brandväggar finns inbyggda i alla moderna operativsystem och även i vissa hemmaroutrar. Brandväggens uppgift är att titta på alla paket som kommer in och ut till datorn/routern och bestämma om den ska tillåta det att passera. Man bör veta vad man gör då man går in och ändrar på dessa regler då man antingen kan öppna upp mer än man tänkte eller spärra för mycket. Troligtvis kommer jag att skriva en separat artikel om just iptables så jag kommer inte at gå in djupare på detta.
Root konto på datorn
Det finns en orsak att många Linux distributioner sätter upp ett annat konto än root som administrativt konto. Om du har t.ex port 22 (ssh) öppet mot internet på någon dator kommer du troligtvis se 1000-tals inloggningsförsök främst med användare root. Detta är därför att root kontot finns på alla Linux/Unix system. På raspbian är root kontot spärrat för inloggning som en säkerhetsdetalj, för att knäcka en användares lösenord måste man först känna till kontonamnet. På Ubuntu eller andra debian då man får ange namnet på det administrativa kontot under installationen, på Raspian heter alltid kontot pi så det gör den lite mindre säker.
Lösenord
Det viktiga är inte att byta lösenord 1 gång i veckan eller ha ett lösenord på 40 tecken, de viktiga är att inte ha löseord som går att gissa eller använda samma lösenord överallt. Lösenord baserade på vanliga ord knäcks ganska lätt, kan var namn på barn eller födelseår. Ett bra löseord bör innehålla minst tre av följande kategorier
- små bokstäver
- stora boksäver
- siffror
- andra specialteck (t.ex !,% ?)
och vara minst 8 tecken. Man bör undvika att ha samma lösenord på t.ex eposten som inloggningar på tjänster på nätet som innehåller information om din epostadress. Tjänster som man kan beställa i ditt namn eller betala (paypal, itune, ebay m.m) ska alla ha olika lösenord. Det finns en massa olika program på nätet som man kan ha t.ex på mobilen för att hålla reda på alla olika lösenord, själv använder jag jag Keeper, gratis men kostar $9.99/år för backup av informationen.
Raspbian
Jag har bara 2 saker som är sämre på Raspbian mot andra Linux distributioner och båda är gjorda för att förenkla för nybörjare. Detta är något man bara bör fundera på om man exponerar sin Raspberry Pi mot internet. Det första är att man använder ett känt användarnamn pi, men har man bara ett bra lösenord så är detta en mindre säkerhetsrisk. Den andra tycker jag är ett större problem, för att förekla har man tagit bort kravet på lösenord när man använder sudo. Oftast när man öppnar upp sudo utan lösenord kopplar man man oftast det till enskilda kommandon och inte generellt som är fallet i Raspbian. Från början körde man alla tjänster på en Unix maskin som användare root då detta var enklast, man hade åtkomst till allt. När man sedan blev hackad hade programmet tillgång till allt i system, t.ex lägga till nya användare m.m. Man började köra tjänster som egna användare med begränsad åtkomst, t.ex kör webserver apache som användare www-data och inte som root. Om man vill höja säkerheten så skulle jag ändra i /etc/sudoes så att man blir tvunget att känna till lösenordet för pi för att utföra kommandot. Man behöver inte skriva lösenordet varje gång man skriver sudo, utan systemet kommer ihåg lösenordet i 15 minuter sedan sista sudo. Om du vill höja säkerheten så gör du såhär, kör
1 |
EDITOR=nano sudo visudo |
och ändra raden (troligtvis den sista raden i filen)
1 |
pi ALL=(ALL) NOPASSWD: ALL |
så att det istället står
1 |
# pi ALL=(ALL) NOPASSWD: ALL |
Första gång du skriver sudo nästa gång kommer du att få upp följande
1 2 3 4 5 6 7 8 9 10 11 |
pi@rpi2 ~ $ sudo -s We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for pi: root@rpi2:/home/pi# |
Kör man däremot sudo igen inom 15 minuter får man inte frågan igen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
pi@rpi2 ~ $ sudo -s We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for pi: root@rpi2:/home/pi# exit exit pi@rpi2 ~ $ sudo -s root@rpi2:/home/pi# |
Bra artikel.
Några kommentarer dock.
Det är inte svårt att skapa en ny användare med
sudo adduser
samt lägga till samma grupper sompi
har medaddgroup
. Viktigast grupper ärsudo
ochadm
. Första för att få använda kommandotsudo
och det andra för att titta i logg-filer.Sedan låser man
pi
med ett annat kommando, tror det ärcngusr
eller något liknande. Se manualsidan föradduser
så listas kommandot i slutet av den,man adduser
.Det är privata IPv4-adresser du räknar upp, inte (länk)lokala. Dvs 192.168.0.0/16 är privat nät.
Det finns (länk)lokalt nät definierat för IPv4, 169.254.0.0/16. Så man bör vara noga med terminologin.
Alla hemmaroutrar har brandvägg, för NAT har inget med datorsäkerhet att göra. Vanligt missförstånd. Det går tekniskt att ta sig förbi NAT, svårt men det går.
Det är brandväggen som tillåter eller hindrar trafik in till och ut från routern själv. Samt den trafik som går genom routern. Så det finns tre grundläggande regler för brandväggar, INPUT, OUTPUT och FORWARD.
Grundinställningen med datorsäkerhet som visat sig fungera bäst är “stäng allt och öppna det som behövs”. Inte “öppna allt och stäng det som inte behövs”. Ja, det är stor skillnad på det. 😉
Det gäller serverprogramvara så väl som brandväggsregler.
Det är även brandväggen som har hand om NAT, vilket jag anser var ett misstag. Men nu är det så.
Som du skrev,
uPnP
är något som bör vara avstängt i hemmarouters.Port forward är säkrare än DMZ-host i routern, eftersom man bara skickar vidare en port till maskinen.
Men DMZ-host är användbart för exempelvis IP-telefoni eller liknande som använder många portar. Men då måste man skydda maskinen med en egen brandvägg.
När det sedan gäller brandvägg på Linux-maskiner, rekommenderar jag verkligen verktyget
ufw
. Detta eftersom den är enkel att konfigurera och kontrollera att den är korrekt. Samt den har stöd för IPv6. Ja, IPv6 kommer så det är lika bra att förbereda sig.Att att använda
iptables
ochip6tables
är svårt och därmed lätt att göra fel. Samt att man *måste* kunna ett antal RFC:er för att konfigurera brandväggen korrekt.(för Linux-brandvägg om maskinen skall fungera som router så använder jag helst
shorewall
ochshorewall6
, men det är onödigt krångligt för vanliga maskiner som inte har routerfunktion)Förstod först inte vad du menade med första stycket, men det är helt korrekt. Användare som man kan lista ut användarnamnet på ökar risken att bli hackar. Ska lägga till det, ska bara funder hur jag ska skriva det. på ett enkelt sätt.
Vi har alla våra system med no-login för root, endast sudo fungerar för att bli root just för att root finns normalt på ett linux system. Ubuntu och Debian har anammat en bättre säkerhet detta och skapar användardefinierade användare vid installationen och låter normalt root vara avstängt vilket försvårar intrång.
Ok, lokala/privata IP, jag var lite slarvig med namnen där men detta var riktat till sådana med inte så djup kunskap så budskapet gick nog hem men jag ska ändra så det står rätt.
Jag håller inte med om NAT, om man jämför en direktansluten maskin mot en som ligger bakom en NATad router så är säkerheten betydligt högre. Alla system går att kringgå och syftet var att visa att den faktisk minskar risken att få intrång initerat utifrån.
Att stänga ner allt och öppna upp portar som behövs är naturligtvis det bästa men ärligt, hur många hemanvändare skulle fixa att får allt att fungera själv. Hur många vet vilka portar som är kopplade till vilka applikationer. I bland är detta ett verkligt detektivarbete för att lista ut då de flesta applikationen bygger på en standard NAT och inte har något kapitel “Hur du ställer in din brandvägg”. Google och loggar är ibland de enda sättet att får det att fungera.
Jag kan inte se att port forward är säkrare, en DMZ har precis samma egenskaper. En DMZ innebär inte att man har alla portar öppna. DMZ innebär att du har dubbla brandväggar, en mot internet och en mot intranätet så jag anser att det är mycket säkrare. DMZ förhindrar inte att man använder port forward mot internet, fördelen är ju att man inte exponerar fler maskinen än nödvändigt mot nätet och dessa har begränsad åtkomst till alla andra. DMZ tog jag bara med för att vis hur man sätter ut med komplexa system, jag tror att få hemmaanvändare kör multipla VLAN med brandvägg hemma. De köper en hemmarouter, kopplar in den och ansluter sina maskiner, punkt.
På mitt jobb har vi nästan ett helt B-nät med kanske 100 VLAN där bara vissa har internetåtkomst och dessa har inte åtkomst till mer maskiner en de måste. Vi har enligt definitionen kanske 10 DMZ för olika funktioner för att minska risken med intrång mellan dessa och intranätet, 350 servrar, 5000 klienter anslutna med kabel och 1200 via wlan, med ett WAN över 5 orter i Sverige.
Jag gick inte in på lokala brandväggsregler eftersom jag ansåg att detta låg utanför syftet med denna artikel. Meningen med den var att ge en grundläggande förståelse för datasäkerhet.
Tack för synpunkterna.
Tack för svaret.
Det är bra att vara lite noga med terminologin, speciellt om man har med nybörjare att göra, så tack för att du tog till dig kritiken på ett bra sätt.
NAT handlar inte om säkerhet, det är bara en bieffekt. Det är bara designat för att låta flera maskiner dela på en publik IPv4-adress. Så nej, det är inte en säkerhetsmekanism.
Notera att jag skrev DMZ-host, vilket inte är ett DMZ-nät.
DMZ-host släpper genom alla portanrop (TCP, UDP, ICMP, IPv6overIPv4, samt resten som inte skickas vidare till någon enskild maskin eller hanteras av routern själv) in till den publika IPv4-adressen vidare till privata nätets DMZ-maskin. Så då måste den maskinen hantera och skyddas på alla portar. Dvs en brandvägg är lämplig, eller tom nödvändig på en sådan maskin. Man vill exempelvis inte göra CIF (Samba) eller NFS tillgänglig från internet.
Att skicka vidare en handfull portar gör att den maskinen som vidarebefodras till bara behöver hantera de portarna. Så att installera en brandvägg på den maskinen är inte lika stort behov av.
Att veta vilka portar som enskilda applikationer använder av förenklas iom att
ufw
har konceptet applikationer. Så den frontendan tilliptables
ochip6tables
är mycket lämplig att använda i en maskin som är satt att vara DMZ-maskin, även för nybörjare.