DNS

DNS (Domain Name System) on Internetin nimipalvelujärjestelmä, joka muuntaa luettavat ja vertauskuvalliset nimet tietokoneosoitteiksi. Se koostuu useista järjestelmistä, joita kutsutaan nimipalvelimiksi. Nimipalvelujärjestelmää hyödyntävät monet sovellukset, kuten esimerkiksi verkkoselaimet ja sähköpostisovellukset. Sovelluksesta tulee nimipalvelujärjestelmän asiakas silloin, kun se tarvitsee nimen muuntamista. Asiakkaana sovellus lähettää pyynnön nimipalvelimelle, joka etsii vastaavan osoitteen ja palauttaa sen. Jos nimipalvelin ei kykene vastaamaan pyyntöön, muuttuu itse nimipalvelin toisen nimipalvelimen asiakkaaksi, kunnes löytyy pyynnön palauttava palvelin.

Jokainen DNS-tietokantaan tehty kirjaus sisältää kolme kohtaa: verkkotunnuksen eli domain-nimen, tietueen tyypin ja arvon. Tietueen tyyppi kertoo, miten arvo tulee tulkita. Se voi esimerkiksi ilmoittaa, että arvo tarkoittaa IP-osoitetta. Esimerkiksi kirjoitettaessa www.yksityisyydensuoja.fi selaimen osoiteriville hakee tietokoneeseen konfiguroitu nimipalvelin verkkotunnuksen tiedon muilta nimipalvelimilta, jotta löydetään lopulta IP-osoite ja tietokone, joihin kyseessä oleva domainnimi on liitetty. Tässä tapauksessa kyseessä on IP-osoite 146.185.130.206, ja tätä voidaan kokeilla myös toisin päin, eli laittamalla pelkästään 146.185.130.206 selaimen osoiteriville.

Verkkotunnukset ovat hierarkkisia siten, että tärkein osuus nimestä on oikealla. Muut vasemmalla puolella olevat segmentit määrittelevät puolestaan esimerkiksi organisaation yksittäisiä koneita. Nimipalvelujärjestelmä ei määrittele eri segmenttien määrää. Sen sijaan se määrittelee arvot tärkeimmille segmenteille, joita kutsutaan ylätason verkkotunnuksiksi (engl. top-level domain, TLD). Osa ylätason verkkotunnuksista on yleisluontoisia tunnuksia (engl. generic top-level domain, gTLD), mikä tarkoittaa, että ne ovat yleisesti käytettävissä olevia. Osa taas on rajattu erityisille ryhmille tai valtioille. Esimerkiksi yksityisyydensuoja.net on yleisluontoinen tunnus, ja yksityisyydensuoja.fi on Suomen maatunnusta käyttävä verkkotunnus. Verkkotunnusten eteen laitettava www-tunnus tarkoittaa, että tunnuksen omaava tietokone jakaa dokumentteja HTTP-protokollalla eri asiakasohjelmille. Tunnus siis viittaa käytettävään palveluun ja on lähinnä ihmisiä helpottamaan laadittu käytäntö.

Nimipalvelinten merkitys korostuu verkkosivuja ylläpitäessä, mutta yksityisyyden suojan kannalta kotikäyttäjänkin on syytä ymmärtää niiden toiminta. Käyttöjärjestelmät nimittäin sisältävät nimipalvelun asiakasohjelmiston, joka aktivoituu verkko-osoitteita selvittäessä. Asiakasohjelmisto lähettää tällöin nimipalvelukyselyt eteenpäin automaattisesti haetulle tai manuaalisesti lisätylle nimipalvelimelle, joka tekee varsinaiset nimipalveluselvitykset. Normaalisti tällaisena nimipalvelimena toimii käyttäjän Internet-palveluntarjoajan oma nimipalvelin. Tämä merkitsee sitä, että operaattori näkee erikseen myös kaikki nimipalveluselvityspyynnöt, joista voidaan nähdä suoraan millä verkkosivuilla käyttäjä on käynyt. Voit katsoa mitä DNS-palvelimia käytät ja kuinka hyvä suojaus niissä on tekemällä DNS leak testin ja Gibson Research Foundation DNS-testin.

DNS.WATCH nimipalvelimet: 84.200.69.80 / 2001:1608:10:25::1c04:b12f ja 84.200.70.40 / 2001:1608:10:25::9249:d69b
CensurfriDNS DNSSEC-tuetut nimipalvelimet: 89.233.43.71 / 2002:d596:2a92:1:71:53:: ja 91.239.100.100 / 2001:67c:28a4::
Swiss Privacy Foundation nimipalvelimet: 77.109.148.136 / 2001:1620:2078:136:: ja 77.109.148.137 / 2001:1620:2078:137::
Digitalcourage e.V. nimipalvelin: 85.214.20.141
Chaos Computer Club nimipalvelin: 213.73.91.35

Sensuurivapaita nimipalvelimia tarjoavat mm. DNS.WATCH, CensurfriDNS, Swiss Privacy Foundation, Digitalcourage e.V. ja Chaos Computer Club. Näiden lisäksi OpenNIC ja CloudNS tarjoavat omia sensuurivapaita nimipalvelimiaan, joiden osoitteet löytyvät kyseisiltä verkkosivuilta. Sensuurivapaiden DNS-palveluiden käyttö on suositeltavaa, koska niitä ylläpitävät aktiivisesti tietoturvasta ja yksityisyydensuojasta kiinnostuneet henkilöt. Myös kaupallisia VPN-palveluita käytettäessä on hyvä vaihtaa nimipalvelimet joihinkin edellä mainituista, yksityiskohtaista logia pitämättömistä nimipalvelimista, ellei VPN-palveluntarjoaja tarjoa omia julkisia nimipalvelimiaan.

Käyttöjärjestelmät käyttävät lisäksi hosts-nimistä tekstitiedostoa DNS-hakujensa tukena. DNS-asiakasohjelmat lukevat hosts-tiedoston sisällön käynnistyessään ja käyttävät sen merkintöjä hyödykseen. Kyseisen tiedoston avulla voidaan estää haluttujen verkkotunnuksien käyttö ohjaamalla ne reitittymään takaisin käytettävään laitteeseen eli IP-osoitteeseen 127.0.0.1 (localhost). Windows-käyttöjärjestelmistä hosts-tiedosto löytyy tiedostojärjestelmän osoitteesta %SystemRoot%\system32\drivers\etc\hosts, macOS-käyttöjärjestelmistä polusta /private/etc/hosts ja Unixin kaltaisista käyttöjärjestelmistä /etc/hosts tai /etc/hosts.deny. Tiedostoon voisi lisätä esimerkiksi 127.0.0.1 yksityisyydensuoja.fi, jolloin osoitteeseen menevät pyynnöt ohjautuisivat takaisin omaan koneeseen, eikä tällöin tietoja lähetetä kyseiseen osoitteeseen. Käytännössä tämä siis merkitsee sitä, että yksityisyydensuoja.fi-verkkosivulle ei enää päästä. Tällä tavoin voidaan estää mm. kohdennettuja mainoksia tarjoavia tai haittaohjelmia levittäviä sivustoja. Hyvän mainoksia blokkaavan hosts-listauksen tarjoaa esim. MVPS HOSTS.

DNS-asetusten vaihtaminen

DNS-asiakasohjelmiston nimipalvelimet voidaan asettaa ja vaihtaa joko reitittimen tai käyttöjärjestelmän verkkoyhteyden määrityksistä. Graafista käyttöliittymää hyödyntävät ohjeet DNS-palvelinten vaihtamiseen reitittimille, Windowsille, Linuxille ja macOS:lle tarjoaa mm. Comodo ja OpenNIC. Asetukset voidaan kuitenkin vaihtaa myös komentoriviltä käsin.

Windows

Avaa komentokehote järjestelmänvalvojana (paina Windows-näppäintä, kirjoita cmd, paina ctrl + alt + enter). Seuraavissa esimerkeissä käytetään Swiss Privacy Foundationin nimipalvelimia. Voit vaihtaa ne haluamiksesi esim. ylempänä olevan listauksen mukaan.

Listaa verkkoyhteydet nähdäksesi mille lisäys tehdään: netsh interface ip show config
Lisää nimipalvelin verkkoyhteydelle (vaihda tarvittaessa Local Area Connection): netsh interface ip set dns “Local Area Connection” static 77.109.148.136
Lisää seuraava nimipalvelin verkkoyhteydelle: netsh interface ip add dns “Local Area Connection” 77.109.148.137

macOS

Etsi käytettävän verkkoyhteyden nimi: sudo networksetup –listallnetworkservices
Korvaa verkkoyhteys omalla nimellään sekä haluamillasi DNS-palvelimilla: sudo networksetup -setdnsservers <verkkoyhteys> DNS1 DNS2
Esimerkiksi: sudo networksetup -setdnsservers Wi-Fi 77.109.148.136 77.109.148.137

Linux

Väliaikainen muutos onnistuu muokkaamalla resolv.conf-tiedostoa.
sudo nano /etc/resolv.conf
Lisää esimerkiksi:
nameserver 77.109.148.136
nameserver 77.109.148.137

Pysyvämmät muutokset on helpointa tehdä graafisesta käyttöliittymästä, koska komentoriviltä käsin moni asennettu paketti ja asetus voi vaikeuttaa asiaa. Usein NetworkManager-ohjelma vaihtaa nimipalvelin asetukset, jonka vuoksi kannattaa katsoa sen konfiguraatiosta dns-kohta: cat /etc/NetworkManager/NetworkManager.conf

DHCP-asiakasohjelmistosta:
sudo nano /etc/dhcp/dhclient.conf
lisää esimerkiksi: prepend domain-name-servers 77.109.148.136, 77.109.148.137;
Prepend käyttää ensisijaisesti annettuja nimipalvelmia, mutta jos ne eivät toimi niin se kokeilee DHCP-palvelimelta saatuja.
Nimipalvelimet voi pakottaa käyttämällä supersedea: supersede domain-name-servers 77.109.148.136, 77.109.148.137;

Staattisilla IP-tiedoilla:
Muokkaa /etc/network/interfaces-tiedostoa ja lisää sinne kohta nimipalvelimista
dns-nameservers 77.109.148.136  77.109.148.137

Dnsmasq
sudo apt install dnsmasq
sudo nano /etc/dnsmasq.conf

Lisää tiedostoon haluamasi nimipalvelimet alla olevan mukaisesti
server=77.109.148.136
server=77.109.148.137

Tallenna tiedosto ja käynnistä dnsmasq ja NetworkManager uudestaan
sudo service dnsmasq restart && sudo service network-manager restart

REDHAT/FEDORA/CENTOS
sudo nano /etc/sysconfig/network-scripts/ifcfg-et
Lisää tiedostoon
DNS1=77.109.148.136
DNS2=77.109.148.137

 

DNS-välimuistin tyhjentäminen

Jos koneen nimipalvelimia tai hosts-tiedostoa muuttaa, niin on hyvä huomioida, etteivät muutokset tapahdu yleensä automaattisesti. Osa käyttöjärjestelmistä tallentaa DNS-tietoja paikallisesti ja tällöin tietokoneen DNS-välimuisti pitää tyhjentää, jotta muutokset toimivat. Tämän lisäksi selaimet saattavat varastoida DNS-tietoja, jonka vuoksi nämä on myös hyvä tyhjentää. DNS-välimuistin tyhjennys onnistuu eri käyttöjärjestelmissä ilman koneen uudelleen käynnistämistä hieman eri tavoin.

Windows

Valitse käynnistysvalikosta Suorita ja kirjoita cmd ja enter (Windows-näppäin + R -> cmd). Kirjoita avautuneeseen komentorivikehotteeseen ipconfig /flushdns, jolloin DNS-välimuisti päivittyy. Tämän jälkeen DNS-palvelimien tiedot voidaan tarkistaa esimerkiksi komennolla nslookup localhost. Vastaukseksi pitäisi saada tällöin muutetut palvelimet.

macOS

Avaa pääte ja kirjoita komento käyttöjärjestelmän version mukaan. Sulje selaimet ja tarpeen vaatiessa tyhjennä selainten välimuistit ja evästetiedostot.

OS X 10.10.4, 10.11, 10.12 (Yosemite, El Capitan, Sierra): sudo killall -HUP mDNSResponder
OS X 10.10-10.10.3 (Yosemite): sudo discoveryutil mdnsflushcache
OS X 10.9 (Mavericks): dscacheutil -flushcache;sudo killall -HUP mDNSResponder
OS X 10.7 tai 10.8 (Mountain Lion, Lion): sudo killall -HUP mDNSResponder
OS X 10.5 tai 10.6 (Leopard, Snow Leopard): dscacheutil -flushcache
OS X 10.4 (Tiger) tai vanhempi: lookup -flushcache

Linux

Useimmat Linuxit eivät oletusarvoisesti tallenna DNS-tietoja välimuistiin ja sen vuoksi tämä yleensä vaatii käyttäjältä erillisen ohjelmistopaketin asentamista tai päälle kytkemistä. Toisin sanoen, jos et ole asentanut erillistä nimipalvelinsovellusta, niin todennäköisesti DNS-välimuistia ei ole olemassa eikä siksi tarvitse tyhjentääkään. Muista kuitenkin poistaa selaimen tallentamat tiedot.

Hosts-tiedoston muuttamisen jälkeen (vaihda eth0 tarvittaessa):
ifconfig eth0 down && ifconfig eth0 up
Nscd: sudo service nscd restart tai sudo /etc/init.d/nscd restart
Dnsmasq: sudo service dnsmasq restart tai sudo /etc/init.d/dnsmasq restart
BIND: sudo rndc restart tai sudo /etc/init.d/named restart

 

DNSSEC

DNSSEC (Domain Name System Security Extensions) on nimipalvelinjärjestelmän laajennus, joka suunniteltiin suojelemaan Internetin käyttäjiä väärennetyltä DNS-tiedolta. Se todentaa nimipalvelimet salausavaimilla ja auttaa siten rakentamaan luottamuksen nimipalvelimen vastauksiin. Esimerkiksi ilman DNSSEC-laajennusta Internet-operaattorin nimipalvelin voitaisiin kaapata ohjaamaan verkkopankin kävijät hyökkääjän luomalle näennäissivustolle. Tällä tavoin käyttäjä ei todennäköisesti huomaisi mitään eroa, ja hyökkääjä voisi varastaa kaiken käyttäjän syöttämän tiedon ja hyödyntää niitä samanaikaisesti esimerkiksi tyhjentämällä käyttäjän pankkitilin.

DNSSEC allekirjoittaa digitaalisesti DNS-kyselyiden tiedot käyttämällä julkisen avaimen salausta. Verkkotunnusten haltijat luovat omat salausavaimensa, antavat julkiset avaimensa domain-rekisterinpitäjälleen, joka vuorostaan siirtää ne vyöhykeoperaattorille julkaistavaksi. Tämän lisäksi verkkosivuilla vierailevan käyttäjän on käytettävä DNSSEC-tukevaa nimipalvelinta, joka pystyy lukemaan salausavaimet. Vaikka DNSSEC tarjoaa tehokasta suojaa ja toimii hyvin normaalin DNS-käytön lomassa, on sen ongelmana sen suppea käyttö. Vain harvat verkkosivustot ja nimipalvelinten ylläpitäjät tarjoavat DNSSEC-ominaisuutta, eikä käyttäjä voi yksin tehdä asialle mitään. Silti on parempi vaihtaa omat nimipalvelimet DNSSECiä tukeviksi, koska tällöin estetään uhat edes niissä verkkosivuissa, jotka tarjoavat tämän mahdollisuuden. Voit kokeilla, onko käytössäsi DNSSEC-tukeva nimipalvelin Viestintäviraston testillä tai Verisignin testillä. Viestintävirasto tarjoaa myös testin, jolla voidaan katsoa, tukeeko verkkosivu DNSSECiä. Voit myös asentaa DNSSEC Validator -laajennuksen selaimeen, jolloin näet heti sivuilla käydessäsi, tukeeko sivu DNSSECiä.

 

DNSCrypt

DNSCrypt on asiakkaana toimivan laitteen ja resolverina toimivan nimipalvelimen yhteyden salaamisen mahdollistava työkalu. Yksinkertaisemmin sanottuna se salaa DNS-kyselyt lähiverkon ja nimipalvelimen välillä. Tämän vuoksi se estää käyttäjän vierailemien www-osoitteiden vakoilua ja MITM-hyökkäyksiä. DNSCrypt ei korvaa DNSSECiä, vaan ne huolehtivat tietoturvan eri osa-alueista ja täydentävät toisiaan. Yksinkertaistettuna: DNSSEC pitää huolen siitä, ettei käyttäjää voida huijata huomaamatta väärälle sivustolle, ja DNSCrypt pitää huolen siitä, etteivät ulkopuoliset näe, mitä sivustoja käyttäjä kirjoittaa selaimensa osoitepalkkiin. Kumpikaan näistä ei myöskään korvaa HTTPS-yhteyksiä tai salaa kokonaisvaltaisesti verkkoliikennettä tarkkailulta. Yksityisyyttään varjeleva joutuukin käyttämään eri asioita samanaikaisesti, ja DNSCrypt kuuluu olennaisena osana siihen. Listauksen vapaasti käytettävistä, DNSCryptiä tukevista palvelimista löydät täältä.

Windows

DNSCryptin käyttöönottaminen onnistuu helpoiten asentamalla Simple DNSCrypt-ohjelman. Sovelluksen avulla saat DNSCryptin helposti käyttöön tai pois käytöstä. DNS-palvelinten vaihtaminen onnistuu myös helposti ja tällainen tarve tulee kyseeseen erityisesti silloin, kun määritelty palvelin on alhaalla eikä siksi verkkosivujen selvityspyynnöt onnistu.

Ohjelmasta valitse ensin käytettävä verkkosovitin. Jos et tiedä tai osaa etsiä sitä, voit täpätä kaikki mahdolliset. Tämän jälkeen valitse haluamasi DNSCrypt-tarjoaja listasta. Protokollana käytetään normaalisti UDP:ta. Joissain tapauksissa kuitenkin palomuuri tai operaattorin asetukset saattavat estää UDP-protokollan käytön ja tällöin yhteys ei toimi. Siinä tapauksessa vaihda prokolla hitaampaan TCP:hen. Lopuksi tarkasta, että DNSCrypt toimii tekemällä DNS Leak Test.

macOS

MacOS:lle on tehty oma DNSCrypt proxy –asiakasohjelmansa, joka toimii OS X 10.8 (Mountain Lion)-, OS X 10.9 (Mavericks), OS X 10.10 (Yosemite) ja OS X 10.11 (El Capitan) ja macOS 10.12 (Sierra) -versioilla. Ohjelman voit ladata täältä.

Linux (Ubuntu/Mint/Debian)

Tarvittaessa asenna kääntäjät: sudo apt install build-essential
Lataa uusin Libsodium: wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.12.tar.gz
Lataa allekirjoitus: wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.12.tar.g...
Lataa tekijän gpg-avain: wget https://download.libsodium.org/jedi.gpg.asc
Lisää allekirjoitus avainnippuusi: gpg --import jedi.gpg.asc
Tarkista että allekirjoitus on ok: gpg --verify libsodium-1.0.12.tar.gz.sig
Pura, rakenna ja asenna:
tar -zxvf libsodium-*.tar.gz
cd libsodium*
sudo ./configure && sudo make
sudo make install
cd ..

Lataa uusin dnscrypt-proxy: wget https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.9.5.tar.gz
Lataa allekirjoitus: wget https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.9.5.tar.gz...
Tarkista allekirjoitus: gpg --verify dnscrypt-proxy-1.9.5.tar.gz.sig
Pura paketti: tar -zxvf dnscrypt-proxy-1.9.5.tar.gz
Mene kansioon: cd dnscrypt-proxy-1.9.5
Koosta lähdekoodista: sudo ./configure && sudo make
Asenna järjestelmään: sudo make install
Päivitä jaettujen kirjastojen linkitykset: sudo ldconfig
Asenna curl resolverilistan latausta varten: sudo apt install curl
Päivitä lista: sudo ./contrib/dnscrypt-update-resolvers.sh
Luo käyttäjä dnscrypt turvallisuussyistä: sudo useradd -r -d /var/dnscrypt -m -s /usr/sbin/nologin dnscrypt

Testaa DNSCryptin toimintaa:
Vaihda järjestelmäsi käyttämään dnscryptin osoitetta nimipalvelimenaan: sudo nano /etc/resolv.conf -> nameserver=127.0.0.2
Käynnistä DNSCrypt-proxy esimerkiksi komennolla: sudo dnscrypt-proxy -a 127.0.0.2:53 -u dnscrypt -R dnscrypt.eu-dk

Kun olet testannut että homma toimii, voit lopettaa dnscryptin päätteessä: ctrl + c
DNSCryptin manuaalin näet komennolla: man dnscrypt-proxy
Ja päivitetyn listan käytettävissä olevista, DNSCryptiä tukevista palvelimista löydät täältä.

Käynnistyskomentoon voi lisätä lisäksi -d tai --daemonize arvon, jolloin prosessi suoritetaan taustalla eikä päätettä tarvitse pitää auki. Tämän lisäksi sen voi lisätä myös /etc/rc.local -tiedostoon, jolloin se suoritetaan automaattisesti käynnistymisen yhteydessä.

sudo nano /etc/rc.local
Lisää alla oleva tiedostoon (ensimmäinen vaihtaa nimipalvelimen, olettaen että resolv.conf sisältää nameserver=127.0.1.1 arvon ja toinen käynnistää dnscryptin):
sudo sed -i ’s/127.0.1.1/127.0.0.2/g’ /etc/resolv.conf
sudo dnscrypt-proxy -a 127.0.0.2:53 -u dnscrypt -R dnscrypt.eu-dk -d
exit 0

Toinen vaihtoehto suorittaa dnscrypt järjestelmän käynnistyessä on käyttää crontabia.
crontab -e
2 (valitsee nanon editoriksi)
Lisää alla olevan kaltainen pätkä tiedoston loppuun
@reboot        dnscrypt-proxy -a 127.0.0.2:53 -u dnscrypt -R dnscrypt.eu-dk -d
@reboot        sudo sed -i ’s/127.0.1.1/127.0.0.2/g’ /etc/resolv.conf

Dnscryptiä voi käyttää myös systemctl-komennoin, kunhan ohjelma on rakennettu systemd:tä tukevana. Lisäksi on mahdollista käyttää konfiguraatiotiedostoa apuna, jolloin komennot lyhenevät. Jos haluat käyttää tällä tavoin, seuraa tekijän ohjeistusta. Tulevaisuudessa Dnscrypt voi hyvinkin löytyä suoraan käyttämäsi Linux-jakelun paketeista asennettavana, joten sitäkin kannattaa aika ajoin tsekkailla.