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ä.

Leave a Reply