Archive for april, 2014

Redundans

2014/04/19

Jag och en polare på andra sidan gatan har lite löst funderat på hur man smidigast ska rigga en redundant väg ut på internet om ens internetuttag skulle dö en dag (vilket händer ibland).
Det är som så att man kan ställa dd-wrt i client-mode eller client-bridge-mode, skillnaderna mellan dessa två är att i det ena läget fungerar radiokretsen som WAN-interface och routern fortsätter att NATa nätet på insidan medan i det andra läget så handlar det snarare om att koppla ihop två lan-sidor via radiolänk.

Eftersom tanken är att länken ska fungera som fallback för båda uteslöts client-mode eftersom NAT skulle förhindra nätåtkomst då trafik från den ena sidan skulle räknas som att den kommer från utsidan och därmed blockeras.

Lite snabba funderingar och diskussioner ledde fram till att den troliga setupen blir att rigga två dd-wrt-enheter på lämpliga interface på insidan av våra respektive routrar. Sätta så att detta endast fungerar som ett länknät (svarta ip-adresser på ett litet subnät) och rigga routrarna så att de pingar lämplig host utanför default gateway hos isp och när den slutar svara koppla över och sätta polarens router som intern default gateway.

Nu finns det dock några problem med denna setupen.
Det första är att de båda fallback-interfacen kommer ha varandra som default (iaf för trafik som kommer från insidan) vilket kan leda till lite skojiga effekter såsom loopar.
Nästa problem är om nätet går ner för båda (vilket är det sannolikaste scenariot eftersom vi båda sitter på samma stadsnät, samma huvudplint, och samma ISP) eftersom båda routrarna då kommer peka på varandra som vägen ut.
Dessa båda problem är likartade och vi tror att det ska kunna lösas genom lämpligt routingprotokoll (OSPF ligger närmast till hands eftersom båda är ganska hemma i det).

Som avslutning funderas det även på om vi inte ska köra ipsec mellan de båda routrarna, trots att kopplingen inte går över öppna internet och radiolänken kommer vara wpa-krypterad. Varför? För att vi kan!

Annonser

Nätverksbyggnation

2014/04/04

Bytte ju som sagt ut min trogna Linksys wrt54gl mot en Cisco 1811 och en Cisco Air-Lap1131.
När man nu har såna grejer så är det rätt dumt att inte splitta upp lite, tidigare tryckte jag bara ut ett SSID och de som fick lösenordet till det kom åt allt som låg på nätverket. Iochmed mina nya leksaker bestämde jag mig för att speca upp två separata SSIDs; ett för mig (och vissa andra) och ett för gäster.
Tanken var att gästnätet bara skulle komma åt internet och inget av mina interna grejer.

Sagt och gjort; första steget blev att speca upp tre interna vlan:
Ett för ”infrastruktur” (management på router och ap samt andra tjänster).
Ett för mitt lan (mina klient-datorer och telefonen).
Ett för gäster.

Nästa steg blev att fixa ap’n så att den trycker ut de båda ssid’na och kopplar dem till rätt vlan. Efter en stunds meckande fick jag det till att funka som jag ville.

Sista steget visade sig vara det jobbiga; att begränsa access till interna grejer för gäst-nätet. Här blev det lite trial-and-error för att få rätt på ACL’n, men efter mycket om och men lyckades jag blockera åtkomst till klient och infrastrukturnätet. Problemet var att jag även blockerade access till internet och dhcp…
Ytterligare trial-and-error lät mig dock fixa så att det fungerar som jag hade tänkt mig.

Frågan är nu vad nästa steg blir… rigga snmp och galganet kanske?

GPG – crashcourse

2014/04/02

Nån form av inledning

Jag vet att jag har skrivit sånt här förut, men upprepning är alltid bra har jag hört.
Dessutom så känns det som att ämnet är något många känner att man borde göra, men det är ju så komplicerat och jobbigt och man vet inte hur eller varför egentligen så därför faller det i glömska.
Sen var det länge sen jag ordbajsade fritt…

Varför kryptering?

Genom alla tider har människor haft behov av att kunna skydda meddelanden av olika slag och av olika anledningar, från ganska oskyldiga saker som kärleksbrev till statshemligheter.
De flesta anser att brev är privata och att endast mottagaren har rätten att bestämma vem som får se innehållet, när telegrafen infördes så blev det ganska vanligt att gemene man utnyttjade enklare krypteringar för att inte telegrafisten skulle kunna ta del av meddelandets egentliga innehåll.
Bilden av ett brev i ett kuvert är något många ser framför sig när man pratar e-mail också, bilden brukar vara att brevet går från sändaren till mottagaren och att ingen på vägen läser det. Denna bilden är helt felaktig.
Att diverse säkerhetstjänster trålar internet efter information är belagt i dagsläget, men vad många inte tänker på är att andra aktörer såsom google, hotmail och yahoo samt mer ljuskygga organisationer gör samma sak för att kartlägga våra vanor och informationsmönster i olika syften. Och även om våra e-mail inte innehåller några hemligheter så är de privata och endast för mottagarens ögon.

Så för att skydda information och se till att endast rätt personer kan läsa den får man ta till kryptering. Dock så lider kryptering av ett stort problem nämligen; hur tusan ska man kunna överföra nyckeln som låser upp informationen till mottagaren på ett säkert sätt?
Lösningen är att man skapar ett system med två nycklar där den ena används för att kryptera informationen och den andra för att dekryptera den, istället för en som används till båda sakerna. Nyckeln som används för kryptering kan spridas till vem som helst medan nyckeln för dekryptering behålls hemlig.

Så vad gör GPG?

Krypterar information. Bland annat…
Det längre svaret är att GPG är ett såkallat hybridsystem som krypterar informationen med en slumpmässigt skapad symmetrisk nyckel (alltså en nyckel som både krypterar och dekrypterar), denna slumpmässiga nyckel krypteras sedan med mottagarens publika nyckel och läggs till som ett huvud till informationen. Mottagaren kan sedan dekryptera den slumpmässiga nyckeln och därefter dekryptera resten av informationen.
Varför gör man det då så komplicerat?
Jo, systemen som utnyttjar två nycklar är extremt långsamma jämfört med systemen med en nyckel (sist jag såg siffror på det handlade det om tiopotenser i skillnad). Men problemet med systemen med en nyckel är just hur man överför nyckeln till mottagaren.

Vidare så ger tvånyckelsystemen en annan fördel; man kan skapa digitala signaturer med dem. Grundteorin här är att man istället för att kryptera informationen med mottagarens publika nyckel så krypterar man med sin egna privata nyckel. Detta får till följd att alla (som har personens publika nyckel) kan dekryptera informationen och på så vis konstatera att någon med tillgång till den privata nyckeln är den som är avsändare av meddelandet.

Jaja, så var får jag tag på GPG?

Man hoppeliskuttar till http://www.gnupg.org/, klickar på download och scrollar lite.

Hur skapar jag en nyckel?

Det är nu det kommer börja bli rörigt, eftersom det skiljer sig en del åt för olika plattformar men jag tänker göra ett försök…
Kommandorad (*nix, men troligen de andra också)
Den mest rakt på metoden, inget fancy och lull-lull. Dock kanske skrämmande för en del.
1. Öppna en kommandotolk på valfritt sätt.
2. Om gpg finns i din sökväg behöver du inte göra något, annars får du ta dig till rätt katalog.
3. Skriv följande:

gpg --gen-key [enter]

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)

Den eviga frågan är här vilken man ska välja, val 1 och 2 är jämförbara säkerhetsmässigt (det finns några quirks med val 2, men de är inte direkt allvarliga) och det finns prestandamässiga skillnader mellan dem i olika fall. Val 1 är dock standard så man kan lika väl köra på det. Den som är intresserad kan alltid googla ”gpg rsa vs. elgamal” och fundera själv ;)

1[enter]

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

1024 bitar räcker troligen om man vill vara säker, 2048 räcker definitivt, men med dagens processorer finns ingen anledning att inte köra på max.

4096[enter]

Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
n = key expires in n days
nw = key expires in n weeks
nm = key expires in n months
ny = key expires in n years
Key is valid for? (0)

Här finns lite olika skolor hur man bör/kan tänka. Värt att notera är att nyckeln inte slutar fungera helt när den gått ut, man kan dekryptera saker och man kan verifiera signaturer med en utgången nyckel. Man kan dock inte signera eller kryptera med en utgången nyckel.
Mitt upplägg är att jag har en ”huvudnyckel” som inte går ut, som används för att signera andra nycklar (mer om det senare), med ett antal subnycklar (kommer nog mer om det också) som har en livslängd på ett år.

0[enter]

Key does not expire at all
Is this correct? (y/N)


y[enter]

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
”Heinrich Heine (Der Dichter) ”


Real name: otyg test [enter]
Email address: otyg@gallowsground.lan [enter]
Comment: Testkey [enter]

You selected this USER-ID:
”otyg test (Testkey) ”

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?


O[enter]

You need a Passphrase to protect your secret key.

Se till att skapa en bra lösenfras, som du kan komma ihåg… Och spara den nånstans säkert!
Tappar du bort den så är det kört, det finns INGET sätt (för oss dödliga, och troligen inte för de odödliga heller) att knäcka nycklarna så tappas lösenfrasen bort så är nycklarna oanvändbara (eller ja, den publika kan användas…).
Efter lösenfrasen skapas nyckeln, och till det behövs en massa slump så programmet kommer be dig skriva på tangentbordet och annat för att den ska kunna samla tillräckligt med underlag till slumpgeneratorn. Därefter är nycklarna klara att användas.

Jag kommer återkomma hur man gör ovanstående i gui-varianterna (gpg4win främst eftersom jag inte har tillgång till nån Apple-maskin) när jag riggat miljö för det.

Vad gör jag med mina nycklar nu då?

Den hemliga skyddar du med ditt liv och ser till att ta backup på, filen heter secring men man kan exportera en specifik hemlig nyckel också på ungefär samma sätt som med den publika nyckeln vilket jag kommer gå igenom nedan.

Den publika sprider du antingen helt öppet eller till specifika personer, helt beroende på tycke och smak.
Att sprida den publika nyckeln fritt för vinden är löjligt enkelt, man skickar upp den till en s.k. nyckelserver (det finns en drös och majoriteten av dem synkar mellan varandra). Såhär går man tillväga för att skicka nycklarna till en server:

gpg --send-keys [nyckel-id]

Nyckel-id visades när du skapade din nyckel, men kan även tas fram med kommandot gpg –list-key som genererar nåt liknande det nedan:

pub 2048R/1EC847E0 2011-08-21
uid otyg [otyg@gallowsground.lan]

I ovanstående fall är nyckel-id 1EC847E0 eller 0x1EC847E0.

Om man nu av en eller annan anledning inte vill sprida sin nyckel till vemsomhelst så kan man exportera den till en fil som kan skickas till personen (såhär kan man även exportera sina privata nycklar) på följande sätt

gpg -a --export [nyckel-id] > [filnamn]

Flaggan a gör att saker trillar ut som ASCII och därmed kan skickas på valfritt sätt utan problem.
Det som trillar ut är något i stil med

—–BEGIN PGP PUBLIC KEY BLOCK—–
Version: GnuPG v1.4.11 (GNU/Linux)

mQSuBFLgyIsRDADT0Xa9fYM+GGRLenwJC8b6OwhCnEh6coqsLrWi+MRbNWRQqLvF
(…)
7K3vIpoIqTnh1M/4kCxjfQ==
=OF6I
—–END PGP PUBLIC KEY BLOCK—–

Hur kryptera/dekryptera/signera/kontrollera signatur?

Återigen så blir det kommandorad, och det blir att hantera filer på disk (gpg4win gör att man kan högerklicka och kryptera/dekryptera/signera/kontrollera en fil vet jag).
För att kryptera en fil är något av kommandona

gpg -e -r [mottagare] [fil]
gpg -ae -r [mottagare] [fil]

som gäller. Det senare ger en ASCII-fil medan det förra ger en binärfil som kan ställa till problem vid överföring.
För att signera en fil gör man något av följande

gpg -[a]s [fil]
gpg --clearsign [fil]
gpg --detach-sign [fil]

och uppger sin lösenfras. Den första ger en binär signatur av filen, om inte a-flaggan tas med, den andra ger en ascii-signatur av filen och den tredje ger ett separat ”certifikat” för filen. Dom mer tekniska skillnaderna mellan varianterna lämnar jag till den intresserade läsaren att utforska. Generellt så använder jag clearsign när jag bara signerar och -[a]es när jag krypterar och signerar.

För att dekryptera eller kontrollera en fil skriver man bara

gpg [filnamn.ändelse].{asc,sig,gpg}

Är den krypterad kommer du få frågan om din lösenfras, är den signerad kommer det visas av vem den är signerad och i båda fallen kommer en ny fil skapas som saknar ”extraändelsen”.

…mottagarens nyckel?

Hur får man då tag på en mottagares nyckel?
Precis som i fallet med att sprida sin egen nyckel kan man antingen plocka den från en exporterad fil som man har fått från personen, eller genom att hämta den från en nyckelserver.
Har man fått den exporterade nyckeln i en fil är operationen enkel.

gpg --import [filnamn]

För att hämta nycklarna från en nyckelserver kör man följande

gpg --recv-key [nyckel-id] --keyserver [nyckelserver]

För att hitta en persons nyckel kan man köra kommandot

gpg --search-keys [namn email] --keyserver [nyckelserver]

som även importerar den.
Slutligen så kan man importera den direkt från en url med kommandot

gpg --fetch-keys [url]

Men hur fasen vet jag att det är person Xs nyckel jag har?

Det korta svaret är: det vet du inte om du har hämtat den från en nyckelserver, e-mail eller url.
Men för att kunna avgöra ifall man kan lita på att en nyckel kommer från den person som man tror att den tillhör så kan andra personer signera en nyckel, och om tillräckligt många personer som du litar på bevisligen har signerat en nyckel så kan man anta att den nyckeln tillhör en person de litar på.
Ett exempel som tillämpar en annan modell är SSL-certifikaten som man använder när man surfar säkert, dessa är hierarkiskt signerade av en rot-auktoritet som säger att den litar på utfärdarna av certifikaten som säger att de litar på de som vill ha sina certifikat signerade.
Tillitsmodellen i gpg är decentraliserad och du väljer själv ifall du litar på en publik nyckel eller ej, och du väljer själv att berätta för omvärlden att du litar på en nyckel eller ej. Om man litar på att en nyckel kommer från den som den verkar komma ifrån så signerar man den, exporterar och skickar till ägaren av nyckeln (som sedan väljer ifall den vill publicera den signerade nyckeln eller ej). På detta sättet byggs ett nät av tillit upp runt en nyckel, dock så är många signaturer på en nyckel inte samma sak som att nyckeln är att lita på.
Tanken är snarare att man ska kunna hitta en kedja från en okänd nyckel till en person som man litar på, den där six degree of separation-grejen.
Så hur signerar man en nyckel då? Såhär:

gpg --sign-key [nyckel-id]
gpg -a --export [nyckel-id]

Den sista är bara om man vill skicka den till ägaren till nyckeln så att hän vet att ytterligare en person litar på nyckeln.

Check… Låter jobbigt… Kan man göra det roligt?

Jadå, man kan dra ihop en nyckelsigneringsfest och beroende på antalet deltagare kan man göra det hur jobbigt (och roligt) som helst. Grundbulten här är att alla ska kunna identifieras och kunna kopplas med deras nyckel-id och nyckel-fingeravtryck, sen kan man antingen på plats signera varandras nycklar eller göra det i hemmets lugna vrå.
För mer info och idéer hur det ska gå till; se dessa sidor!

Ok, fint. Men hur får jag skiten att funka med min mejlklient/gmail/whatever?

Det är här det riktigt jobbiga börjar. Det finns plugins till de flesta mejlklienter som är mer eller mindre användarvänliga, till Thunderbird (och derivat) rekommenderar jag EnigMail, gpg4win tror jag har en del plugins eller integrationer till Outlook och windows mail, men det enklaste är att googla.
Kör man webmail som gmail eller hotmail så får man leta reda på plugins till webbläsaren som kan sköta operationerna via klipp-klistra, WebPG är ett sådant plugin till Firefox och Chrome(/ium) som jag har använt med skiftande resultat.
Fattigmansversionen är att skriva det man vill i lämplig editor, kryptera/signera till ascii-armoured och klippa ut och klistra in manuellt.

Das Ände

Helt ärligt så är jag inte särskilt nöjd med ovanstående textvägg, men jag hoppas att någon någonstans kommer finna den användbar på ett eller annat sätt.
För den som vill hitta åt min gpg-nyckel så finns den här.

Operation plast mot stål

2014/04/01

När jag blir stor ska jag ta itu och blogga mer regelbundet. Kanske skulle ta och sätta ett larm som plingar varje dag som säger att jag ska skriva nåt under en kvart eller så… Nåt att fundera över.

Hursomhelst så har jag ganska länge grumsat lite över att min trogna Linksys WRT54GL inte riktigt orkar trycka data som den ska, sitter man på en 100/10 lina känns det lite mjäkigt när man som mest kan kräma ut strax över 30Mbit/s neråt. Dock så har jag inte direkt prioriterat att köpa nytt, mest för ekonomins skull då man som student gärna lägger de där hundralapparna på annat istället för att byta något som faktiskt funkar.

För lite sedan när jag hjälpte till att rensa ut saker som skulle skrotas ur en teknikskrubb fick jag ögonen på en liten söt Cisco1811 samt en liten söt Cisco Airolink som tydligen skulle förpassas till de sälla teknikmarkerna. Efter att ha frågat ifall de verkligen skulle kasseras och ifall jag kunde ta hem dem till mig och fått positivt svar på båda frågorna började operation ”Byta plast mot stål” i min lägenhet.

Att återställa de båda prylarna till fabriksinställningar var inga direkta problem, förvisso har jag en CCNA-kurs i bagaget så jag har gjort det ett par gånger tidigare när folk glömt att rensa konfiguration i labbracken (och inte kört standarden Cisco/Cisco för inlogg) men även utan sådan så hade det gått lätt tack vare google.

Det som gav mig mest huvudbry var att få accesspunkten att leka snällt, mest för att jag aldrig har konfigurerat en sådan förut. Men efter några timmar fungerade den fint och jag släckte radiokretsen i linksysen. Fördelen med att ha en extern accesspunkt är att den kan placeras där den ger bäst täckning/fulhets kvot. I mitt fall hamnade den på översta hyllan bakom min whiskysamling.

Den punkten jag fasade mest för var nog den som gav mig minst problem, nämligen att sätta upp 1811 så att den lirade fint med NAT. Här tror jag dock att CCNA-kursen gjorde att det gick ganska snabbt och smärtfritt då jag redan från början hade rätt klart för mig hur jag skulle göra (dock väntar jag fortfarande på att nåt ska sluta funka, för att saker börjar fungera som man tänkt så snabbt är inte som det ska.).
Det som krånglade var DHCP-konfigurationen, hade jag haft en burk som kunnat agera DHCP-server så hade jag tagit den, men nu får 1811an köra även det och det är en rätt snårig konfiguration då jag vill ha fasta ip på mina egna grejer samtidigt som det är smidigt att slippa köra upp saker manullet på dem.
Lärdomen var väl att kolla på DHCP-bindings och sen dra slutsats om det är client-id eller hardware-address som man ska använda för host-konfigurationen.

Hursomhelst, när allt var uppsatt och jag fick internet igen så glad jag över till bredbandskollen för att se vilken skillnad en ”riktig” router gör mot en hemmarouter. Och jag kan säga att skillnaden är markant, från runt 30Mbit/s till strax över 95Mbit/s vilket gör mig ganska nöjd.

Frågan är nu vad jag ska använda Linksysen till…
Det förslag som ligger bäst till är att rigga den på lämplig plats och smäcka in det i det lediga router-interfacet på Ciscon och köra länknät mot en av mina grannar så att vi kan få redundant internetuppkoppling den vägen. Problemet med den setupen (ur redundanssynpunkt) är att båda sitter på samma stadsnät med samma internetleverantör, så om nätet går hos den ena så lär det slockna hos den andre…
Fast; då kan vi ju alltid lana utan att lämna lägenheterna ;)