Yritys kuvata kotini verkkorakennetta

Verkkoni runko alkaa olemaan kunnossa. Pystyn sylkäisemään verkon, reititykset ja serverit muutamassa tunnissa. Tämä näkyy siinä, että kotiverkossani on nyt 7-10 verkkoa. Osaan pääsee sisäverkosta (intranet), osaan pääsee kiinni vain koneilta, jotka ovat kiinni kahdessa eri verkossa ja sitten on yksi erikoisverkko, joka ei lähtökohtaisesti ole kiinni missään muussa verkossa.

Tässä on ensivedokseni siitä miltä verkkoni näyttävät. En ole 100% tyytyväinen tähän, sillä tämä ei välitä kunnolla tietoa siitä miten reititykset menevät, mutta tämä lienee hyvä alku. (psst, klikkaa kuvaa nähdäksesi se isompana) Osa työasemista on kuvattu virtuaalisina, sillä ne ovat virtuaalisia. Suurin osa servereistä on virtuaalisia, mutta en tässä vaiheessa lähtenyt metsästämään niille omaa ikonia. Käytännössä vain intranetissä ja MökkiLAN-verkossa on fyysisiä koneita.

Leivo Network 2.0

Iso tiedosto äkkiä jakoon kaverille

Tuli vastaan tilanne missä minun piti jakaa iso tiedosto kaverille. Tiedosto on sen verta kookas, että pikaratkaisu “tuuppaa se Dropboxiin” ei tullut kyseeseen. Sitä paitsi tälläisessä ratkaisussa se tiedosto siirrettäisiin kahdesti. Ensin minun toimesta pilveen ja sitten kaverin toimesta hänen koneelle. Moinen on tehotonta.

Seuraava vaihtoehto: “tuuppaa se omalle julkiselle serverille”. Ihan hyvä vaihtoehto, olen tehnyt tätä aikaisemmin, mutta jälleen kerran kyseessä on tehoton operaatio.

Seuraava vaihtoehto :”jaa se suoraan kotoa”. Nyt tehokkuus on kohdallaan ja toinen talon nettiyhteyksistä voidaan pyhittää tälle operaatiolle, jolloin oma netin käyttö ei kärsi tästä. Kotona on palvelinta pieni verkko täynnä, joten jollain niistä voi äkkiseltään jakaa tiedoston. Web serverillä bitti jakoon, helppoa, hauskaa, ei välitä mikä laite kaverillla on tiedostonsiirtoa varten! Lighttpd on tämän hetken web serverialustani. Siispä hommiin.

Lighttpd vhost

Ensinnäkin, kyseinen palvelin tarjoaa kotiverkon “intranet-sivustoa”, joten sinne piti tehdä vhost.eri porttiin, jotta kotiliikenne ei häiriinny. conf.d -hakemistoon uusi tiedosto fileshare.conf ja sisällöksi

$SERVER["socket"] == "0.0.0.0:500" {
  server.document-root = "/mnt/DATA/fileshare"
  dir-listing.activate = "enable"
}

Hakemistolistaus sallittu, asialle pyhitetty hakemisto. Kuunnellaan portissa 500, jotta a) muut ei löydä serveri perusskannauksilla b) omat HTTPS konffikset ei mene sekaisin.

En tietenkään halua, että kuka tahansa tuonne pääsee, jos vaikka joku vahingossa tuon löytää, joten salasanasuojaus.

Lighttpd salasanasuojaus

Meidän pitää ladata laajennuksia ja tehdä vähän määrittelyjä. Käsin tehdään, joten 05-auth.conf luoden.

server.modules  += ( "mod_auth" )
auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/lighttpdpassword"

Universaali käyttäjienahallinta AD:n on vielä työn alla – rankasti, joten yksinkertainen tiedosto tarvitaan käyttäjiä varten. Tiedostoon pitää lisätä käyttäjät, selkokielisenä seuraavanlaisesti

käyttäjä:salasana

Ylimääräiset oikeudet pois tiedostosta

chmod 640 /etc/lighttpd/lighttpdpassword

ja sitten korjataan hieman tuota fileshare.conf tiedostoa

$SERVER["socket"] == "0.0.0.0:500" {
  server.document-root = "/mnt/DATA/fileshare"
  dir-listing.activate = "enable"
  auth.require = ( "/" =>
    (
      "method" => "basic",
      "realm" => "Password protected area",
      "require" => "user=käyttäjä"
    )
  ) # auth require
}

Ja näin, nyt olin jo useita sekuntteja tyytyväinen ratkaisuuni. Sitten tajusin, että eihän tuolla käyttäjätunnuksella ja salasanalla tee mitään ilman HTTPS yhteyttä! SSL pitää virittää paikalleen.

Lighttpd SSL

Onneksi SSL on helppoa ja varmenteet pala kakkua. Rykäisin omasta CA:sta pihalle 3 vuoden SSL varmenteen ja muokkasin fileshare.conf:n olemaan seuraavanlainen

$SERVER["socket"] == "0.0.0.0:500" {
  server.document-root = "/mnt/DATA/fileshare"
  dir-listing.activate = "enable"
  auth.require = ( "/" =>
    (
      "method" => "basic",
      "realm" => "Password protected area",
      "require" => "user=käyttäjä"
    )
  ) # auth require
  # SSL part
  ssl.engine  = "enable"
  ssl.pemfile = "/etc/lighttpd/public.crt"
  ssl.ca-file = "/etc/lighttpd/ca.pem"
}

Näin. Muistetaan, että varmennetiedostoista poistetaan ylimääräiset oikat myös. Huomioidaan että oman varmenteen varmennetiedoston rakenne on <varmenne><avain> ja CA varmenteiden varmennetiedoston rakenne on <sub CA><root CA>.

Nyt vain tuntia myöhemmin meillä on web serverin runkokonffis millä voidaan jakaa turvallisesti kavereille bittiä kun tarve tulee. Sitten tajusin, että voin tehdä tämän vielä paremmin. Voin korjata SSL asetukset kuntoon samantein kun tälläistä nyplään. On hyvä kotiservereilläkin välttää CRIME ja BEAST hyökkäykset ja kukapa ei haluaisi täydellistä taaksepäin suojaavaa salausta?

Onneksi tämä työ oli tehty minun puolesta jo etukäteen, joten pikagooglaus vie minut tälläiselle sivulle. Läppästään nämä omaan konffikseen ja rock and roll!

Lighttpd SSL done right

Lopullinen konfiguraatiotiedosto on siis

$SERVER["socket"] == "0.0.0.0:500" {
  server.document-root = "/mnt/DATA/fileshare"
  dir-listing.activate = "enable"
  auth.require = ( "/" =>
    (
       "method" => "basic",
      "realm" => "Password protected area",
      "require" => "user=käyttäjä"
    )
  ) # auth require
  # SSL part
  ssl.engine  = "enable"
  ssl.pemfile = "/etc/lighttpd/public.crt"
  ssl.ca-file = "/etc/lighttpd/ca.pem"
  ssl.use-sslv2 = "disable"
  ssl.use-sslv3 = "disable"
  ssl.use-compression = "disable"
  ssl.honor-cipher-order = "enable"
  ssl.cipher-list = "AES256+EECDH:AES256+EDH"
}

Huomaattehan, että ssl.cipher-list on tiukka, vanhat laitteet ei vältsisti toimi tämän kanssa. Sitten enää puhkotaan reijät pariin reitittimeen ja homma rock and roll! Näin on serveripuoli laitettu kuntoon. Sitten se viimeinen askel on toimittaa salasanat ja tunnus ystävälle.

Kotitunnusten toimittaminen

Ensimmäinen vaihtoehto, luonnollisesti, olisi salattu sähköposti, mutta sitä harvempi harrastaa joten tieto pitää toimittaa hajautettua kanavaa pitkin, jotta sähköpostin salakuuntelijat ei saa selville miten sinne päästään.

SMS: salasana
email: osoite

ja etukäteen sovittu käyttäjätunnus 🙂 tai sitten kaveri kyselee perään jos ei tiedä.

VMware ESXi:n asennus kun 4 GB ei riitä

Tarkoitukseni on rakentaa yhdestä pöytäkoneesta ESXi virtualisointialusta, jossa välitän virtuaalikoneelle näytönohjaimen. Tarvitsen NVIDIA:n näytönohjaimia tiettyihin CUDA operaatioihin (hash:n laskeminen). Haluan säilyttää koneen normaalin käyttötarkoituksen, joten ESX asennetaan 2 GB USB-tikulle (tiukka minimi on muuten 1GB).

Kyseessä on vanha kone, jossa on 4GB muistia, ESXi 5.5:n minimivaatimusten mukaisesti. Vaan kun asennusohjelma on päässyt pitkälle, se ilmoittaa että

RAM

No perse! Mites tämä korjataan? Muuttamalla ESX:n vaatimuksia, seuraten tämän tyypin ohjeita: http://simon-simonnaes.blogspot.fi/2012/09/installing-esxi-5-on-less-than-2gb-ram.html

Tarkka tiedoston nimi 5.5:ssa on

upgrade_precheck.py
oikea rivi muuttaa on MEM_MIN_SIZE (4 * 1024) mitään –32 osuutta ei enää ole. Tästä aiheutui se minun ongelmani :-). Nyt on 2 GB USB-tikulla VMware ESXi 5.5 valmiina jatkotestejä varten. Nyt vain levytilaa sille ja homma on OK.

Virtualisointia Hyper-V:llä

Päivittäin leikin virtualisonitialustojen kanssa, joten ajattelin antaa Microsoftin Hyper-V:lle uuden mahdollisuuden. Edelliset yritykset alustan kanssa on mennyt metsään ja lujaa, mutta tällä kertaa ratkaisin palaset.

Voin sanoa, että alusta ei ole asennuksen suhteen lähelläkään VMWaren ESXi:tä, mutta kun sen saa pelittämään perushommat vaikuttavat yhtä helpolta. Tässä noottini miten yksittäinen laite saadaan Hyper-V alustaksi ja hallinta siihen kasaan:

Vaatimukset

  • Windows 8.1 työsema
  • Hyper-V asennusmedia
  • Ylimääräinen työasema, joka on Windows Server 2012 R2 yhteensopiva (64-bittiä, virtualisonti yms)

Asennus

Softan asennus on boottaa medialta ja jyrää levy. Tässä ei ole mitään kummallista. Se seuraava vaihe, tästä jotenkin hyödyllisen serverin saaminen on se varsinainen temppu.

Hyper-V:n Konfigurointi

  1. Aseta serverin nimi, aika, muut yleisasetukset kuntoon sikäli ne ovat pielessä
  2. Lisää paikallinen administrator käyttäjä, jollain kivalla salasanalla
  3. Salli etähallinta (helpottaa tulevaa copy-paste temppuilua) – Enable Remote Desktop
    • Miina nro 1, tämähän ei ole palomuurissa auki, joten se pitää erikseen sallia
      • Avaa cmd, kirjoita “powershell”
      • powershellissä
        • Enable-NetFirewallRule -DisplayGroup “Remote Desktop”
  4. Ota etäyhteys koneeseen
  5. Salli koneen varsinainen etähallinta (en ole vielä tarkistanut mitä näistä ei ehdottomasti tarvitse ajaa)
    1. avaa cmd, kirjoita “powershell”
    2. Powershellissä:
      • Enable-NetFirewallRule -DisplayGroup “Windows Remote Management”
      • Enable-NetFirewallRule -DisplayGroup “Remote Event Log Management”
      • Enable-NetFirewallRule -DisplayGroup “Remote Volume Management”
      • Set-Service VDS -StartupType Automatic
  6. Anna reboottia serverille.

Työaseman konfigurointi

  1. Hallintatyökalut tulee Windows 8.1:n mukana, ne pitää vain asentaa. Lisää Windowsin ominaisuus “Hyper-V Management tools”
  2. Miina nro 2, Hallintajärjestelmässä ei oe mahdollisuutta syöttää käyttäjätunnuksia, vaan yhteys muodostetaan tämän hetken käyttäjällä. Jos nykyinen käyttäjäsi ei täsmää serverin käyttäjään vaihtoehtoja on 2
    1. Muuta serverin käyttäjä identtiseksi
    2. Lisää omalle työasemalle sama käyttäjä kuin työasemalla
  3. Miina nro 3, hosts filu. Lisää serverin tiedot host filuun, muuten homma saattaa laueta virtuaalilevyjä lisätessä …
  4. Sikäli jouduit luomaan paikallisen käyttäjän, jolla ajaa Hyper-V Management ohjelmaa, sille kannattaa tehdä pikakuvake, jossa sisältönä on :
    • C:\Windows\System32\runas.exe /savecred /user:<käyttäjänimi> “mmc virtmgmt.msc”
  5. Miina nro 4, jos tämän jälkeen tulee “access denied” –virhe, tulee koneen DCOM asetuksia muuttaa hieman…
    1. aja dcomcnfg.exe ohjelma win+r käskyllä
    2. Mene Component Services –> Computers, sitten oikeaa nappia “My Computer” ja “properties”
    3. Esiin tulevasta ikkunasta mene COM- security taskulle
    4. Klikkaa edit limits Access Permissions osuuden alla
    5. Lisää ANONYMOUS-tunnukselle “remote access” like so:clip_image001

Ja nyt homma toimii! Ei muuta kuin säätämään! Smile

We at ghetto hosting…

image… we aim for the highest craftsmanship and the best possible work working environment.

Kun rahaa käytetään vähän ja kaikki on enemmän tai vähemmän närpitty kasaan metallijätelaatikoista, on jossain tilanteissa pakko vähän improvisoida. Puutalossa kun asun puuta on väistämättä käytettävissä. Verkkokalusto on vihdoin mahdollista siirtää kaapin sisään, mutta valitettavasti räkkihyllyjä minulla ei ole. Ripaa ja vaneerilevyä sen sijaan löytyy.

Leikkasin näppärästi parit rivat toimimaan vaakatasona, joiden päälle heitetään vaneerilevy verkkolaittelle. Koko setti on sen verta korkealla, että yhdellä mukana tulleella 4U:n kokoisella peitelevyllä saan sen nätisti jemmattua silmiltä, sen jälkeen kun peruskaapelointi ja laitteiden asennus on saatu tehtyä. Sitä ennen joudun kestämään omaa rumaa rakennelmaani.

Huomasin melko nopeasti, että hylly ei ole kovin vakaa. Kellarista onneksi löytyy minun paljon rakastamia kulmarautoja. Kaikki ne osoittautuivat väärän mittaisiksi, mutta olivat sentään oikeaan aikaan oikeassa paikassa, joten päädyin käyttämään yhtä niistä. Lopputulos on silmiähivelevän kaunis:

image

Ei kun kaapeloimaan Smile

Intra versio 3

Olen kolme viikkoa tuherrellut ja kaapeloinut, ihmetellyt sekä uudelleen tehnyt intrasuunnitelmaani. Tällä hetkellä intrani näyttää mielestäni hyvältä. Pääasiallinen ongelma on tekemisen priorisointi. Hacklabin kanssa tekisi mieli leikkiä, hakkerointihan oli se mitä haluan seuraavaksi opetella. Matka sinne on kuitenkin pitkä ja täynnä opettelemista – hirveästi opettelemista. Miksi? Koska ajatteluni menee suurinpiirtein näin:

– Haluan lisätä powershell skriptillä sisäiset CA:ni luotetuiksi Firefoxiin. Mitä tarvitaan?

1) Selvästi alempi ympäristö, sillä käytössä olevia “tuotantokoneita” ei sotketa harjoittelulla.

Mitä alempaan ympäristöön tarvitaan?

1.1) Tarvitaan ainakin testiAD ja ainakin yksi testityöasema. En oikeastaan haluaisi testiAD:ta intraan pyörimään, se ei vaan ole siistiä rakenteellisesti.Tarvitaan siis testiverkko.

Mitä testiverkkoon tarvitaan?

1.1.1) Testiverkon voisi tehdä täysin virtuaalisesti ja sitä varten rakentaa erillinen virtuaalinen reititin, jotta intrasta pääsee näppärästi kyseiseen verkkoon. Toisaalta VLAN:t on “aina” kiinnostanut minua ja nyt kun kerran verkkoa tarvii taas segmentoida miksi en samantein opettelisi sitä? Tehdään osittain fyysinen verkko, joka erotetaan VLAN:n avulla omaksi segmentiksi. Tästä on sitten riemua kun Wiresharkin kanssa ihmettelen verkkoliikennettä – minulla on VLAN liikennettä sitten katsottavana.

Paria viikkoa myöhemmin olen saanut rakennettua testiympäristön, joka on oman VLAN takana ja reititys toimii hienosti. Nyt itse powershell –skriptin tekoon? Näemmä ei. Windows ei lähtökohtaisesti aja allekirjoittamattomia powershell skriptejä. En halua rikkoa turvallisuusasetuksia joten, opetellaan allekirjoittaminen. Mitä allekirjoittamiseen tarvitaan?

2) Selvästi varmenne/varmenteita, mikä itsessään tarkoittaa CA:ta. Koska kyseessä on kehitysympäristö, tuotannon CA:t ei käy. Mitä tarvitaan CA:n luomiseen?

2.1) Luonnollisesti testi root CA tarvitaan, koska homma tehdään oikein.

2.2) Uusi Windows pohjainen Sub-CA, joka olisi rajattu ja tehty oikein sopivilla profiileilla. Tähän löytyykin jo pikkasen kokemusta, mutta homma on ISO.

2.3) Jos kerran vaivaudun skriptit allekirjoittamaan, samantein voisin opetella vähän versionhallintaa. GIT on kuulemma kova juttu…

Näin äkkiseltään nähdään, että tehdäkseni skripti, jolla saan Firefoxiin CA:n luotetuksi olen suunnitellut ja vain osin toteuttanut helvetin koneen, kuluttanut aikaa viikkoja, enkä ole vielä lähelläkään skriptiä. Mutta kun tämä on valmis moisen skriptin tekeminen, testaaminen ja käyttöönotto pitäisi olla helppoa. Isoa kuvaa ajatellen koko tämä paketti tietenkin antaa siihen tulevaan hacklabiin lisää sillä esimerkiksi VLAN-liikenteen tarkkaileminen on nyt mahdollista. Osaan tehdä alkeellisia VLAN konfiguraatioita reitityksellä ja kaikkea :-).