Digitaalisten jalanjälkien piilotusta

Mielessäni on jo pitkään vellonut ajatus kaiken kotoani lähtevän ja sinne tulevan verkkoliikenteen piilottamisesta palveluntarjoajalta sekä liian uteliailta valvontaohjelmilta. Ajan puutteen vuoksi olen toistaiseksi tyytynyt SSL tunneloituun HTTP proxyyn, kaiken liikenteen piilottamisen on ollessa lähinnä hämärä ajatus, »teen sen sitten joskus».

Muutamia päiviä sitten kummastuneena lueskelin painavaa asiaa suomalaisen lakitoimiston torrent-verkkojen seuraamisesta, ja pahaa-aavistamattomien amerikkalaisen mainstream elokuvien lataajien rahastamisesta. Mielestäni rahan kiristäminen torrent-lataajalta on sekä moraalitonta että silkkoa kusetusta, mutta se ei sinänsä kuulu tähän tarinaan. Kyseisen lakitoimiston harjoittama kiristys ja valvonta sai osaltani vauhtia verkkoliikenteen salaamiseen, vaikken sinänsä kopiosuojatusta tavarasta olekaan suuremmin kiinnostunut.

Kaiken verkkoliikenteen salaamiseen on helppo ja toimiva keino, Virtual Private Network, eli tuttavallisemmin VPN. VPN on tarkoitettu etäkoneen, yleensä työaseman, liittämiseksi vaikkapa yrityksen verkkoon vahvasti salattuna siten, että yrityksen sisäverkon palvelut ovat etätyöaseman käytettävissä. Etätyöläisten väline siis. VPN on täten oivallinen väline itsensä anonymisointiin verkon valvovien silmien alla. Homman toimimiseen tarvitaan kuitenkin se yritys johon työasema liitetään. Yrityksen ei tietystikään tarvitse olla oikea firma, vaan tavallinen VPN palvelua pyörittävä palvelinkone jossain päin maailmaa riittää.

VPN palvelin- ja asiakasohjelmia on lukuisia, myös kaupallisia, mutta minä haluan käyttää kokonaan omaa asennusta sekä palvelin- että asiakaspäässä. Hyvä, monipuolinen ja toimiva, sekä ennenkaikkea turvallinen VPN ohjelmisto on OpenVPN, joka tarjoaa samassa paketissa sekä palvelin- että asiakasohjelman. Palvelinohjelma toimii omalla palvelimellani jossain Saksanmaalla, eli verkossa kuleksiessani näytän vahvasti saksalaiselta.

Palvelin ja OpenVPN

Palvelimeni käyttöjärjestelmänä toimii FreeBSD, koska se on nopea, turvallinen ja selkeästi paras valinta palvelinpään hommiin. Turvallisuus on ensiarvoista julkisessa internetissä olevalle koneelle, joka tekee FreeBSD:stä selkeästi parhaan valinnan. VPN palvelimeksi tarvittava OpenVPN ohjelmisto on asennettavissa FreeBSD:n repositoryistä joten asentaminen on hyvin helppoa ja käy yhdellä komennolla:

 $ pkg install openvpn

Näin. Muuta ei tarvita, paitsi tietysti palvelinohjelman konfiguroiminen pelikuntoon, joka vaatii jonkinlaista tuntemusta verkkoliikenteestä, eikä tietosuojamaisesta ajattelustakaan haittaa ole. Omassa asennuksessani tietoliikenne palvelimen ja asiakasohjelman välillä tietysti salataan, mutta asiakasohjelmalta vaaditaan myös kirjautuminen palvelinkoneelle. Palvelimella täytyy siis olla käyttäjätunnus VPN putkeen kytkeytyvälle käyttäjälle.

Oma palvelinkonfiguraationi näyttää suunnilleen samalta kuin allaoleva konfiguraatiotiedosto, hieman riisuttuna tosin. En voi tarpeeksi painottaa internetistä copy-pastattujen konfiguraatiotiedostojen ja skriptien turvattomuutta, eli tässä tarinassa esitetyt konffikset sekä skiriptit ovat tarkoitettu ainoastaan esimerkeiksi eikä niitä pidä asentaa omaan installaatioon ymmärtämättä niiden toiminnallisuutta.

Sertifikaatit

Sertifikaattien luomiseen OpenVPN:n mukana tulee EasyRSA PKI härveli, jonka pitäisi helpottaa sertifikaattien kanssa puljaamista. Tästä voidaan olla montaa mieltä. Valmista PKI infraa en kuitenkaan halua käyttää, vaan teen ennemmin itse omaan käyttöön paremmin sopivan tavan luoda sekä palvelin- että asiakas sertifikaatit. Tähän tarkoitukseen tein nopeasti kasan OpenSSL:ää käyttäviä skriptejä, joiden toiminnallisuus on ympäripyöreästi sepostettu alla. Käytän omassa asennuksessani 4096 bittisiä RSA avaimia. Vähempikin ehkä riittäisi, mutta tietosuojan suhteen ei koskaan voi olla liian varma.

Palvelimen asennusvaiheessa pitää ensin tietysti luoda CA sertifikaatti (ca.crt) ja siihen liitetty salainen avain (ca.key), sekä itse palvelimen sertifikaatti (server.crt) ja sen salainen avain (server.key). Skriptissäni CA sertifikaatin luontiin käytettävät komennot näyttävät tältä:

 openssl req -new -config ca.conf -keyout ca.key -out ca.req
 openssl ca -config sign.conf -extensions X509_ca -days 365 -create_serial -selfsign \
           -keyfile ca.key -in ca.req -out ca.crt

Ylläolevien komentojen tarvitsemat OpenSSL konfiguraatiot (ca.conf ja sign.conf) puolestaan näyttävät tältä:

Tässä sign.conf:

Palvelimen julkisen sertifikaatin ja yksityisen avaimen luontiin skriptini käyttää alla olevia komentoja:

 openssl req -new -config server.conf -keyout server.key -out server.req
 openssl ca -config sign.conf -extensions X509_server -in server.req -out server.crt

Ja taas, skriptissä tarvittava OpenSSL konfiguraatiotiedosto (server.conf) näyttää tältä:

Asiakaspää, eli client, tarvitsee tietysti myös allekirjoitetun sertifikaatin sekä yksityisen avaimen, jotka luodaan skriptillä jonka keskeiset komennot näyttävät osapuilleen tältä:

 openssl req -new -config client.conf -keyout client.key -out client.req
 openssl ca -config sign.conf -out client.crt -in client.req

Ylläolevien komentojen tarvitsema client.conf taas näyttää tältä:

Sertifikaattien luonnin ja palvelinohjelman käynnistämisen jälkeen OpenVPN palvelu on käytettävissä. Asiakas sertifikaatit pitää vielä kopioida työasemalle, ja palvelimelle luoda VPN:n asiakaskäyttöä varten käyttäjätunnus.

Asiakas ja OpenVPN

Jotta työasemakoneen liikenne myös reitittyy VPN palvelimelle, tulee työaseman verkkoliikenne ohjata VPN tunneliin. Jos työasemana sattuu olemaan FreeBSD, kuten allekirjoittaneella, käy se kernelin net.inet.ip.forwarding muuttujan asettamisella ykköseksi. Käytän myös satunnaisesti Linux työasemaa, ja Linuxissa verkkoliikenteen ohjaaminen VPN tunneliin vaatii palomuurin NAT säännön:

 $ iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE

Näin. Tämän jälkeen ei tarvitse juurikaan huolehtia palveluntarjoajien tai Mordorin valvovista silmistä, sen enempää kuin muustakaan nykyään niin valitettavan yleisestä verkkoliikenteen kyttäilystä.

~ Jani Salonen, 22.1.2017