Raspberry Pi aikapalvelin – osa 2 / Tuunausta

Edellisessä Raspberry Pi aikapalvelinta käsittelevässä kirjoituksessa tehtiin käytännössä vain perusasiat. Palvelinta kannattaa toki hienosäätää enemmänkin omien tarpeiden mukaan. Kasasin tähän joitakin asioita mitä sille esimerkiksi voisi tehdä. Näitä ei toki ole pakko tehdä juuri näin eikä tässä(kään) ole lueteltu kaikkea mitä voisi tehdä. Varmaan näistä kuitenkin jotain ideoita saa oman aikapalvelimen säätöön. Tässä listaamissani toimenpiteissä on käytännössä poistettu turhaan resursseja syömästä sellaista mitä emme tarvitse ja säädetty palvelinta hieman turvallisemmaksi.

Tickless

PPS pulssin jitteriä voi yrittää pienentää säätämällä kernelin ”tickless” asetusta. (En tiedä mikä tälle olisi oikeaoppinen suomennos, joten mennään tällä.). Tämän toimenpiteen hyödyllisyys selvinnee kokeilemalla. Joillakin tästä on ollut hyötyä ja toisinaan taas ei.

Avaa /boot/cmdline.txt tiedosto:
sudo nano /boot/cmd.txt

Lisää tiedoston loppuun rivi:
nohz=off

Tämän linkin takaa löydät tarvittaessa lisätietoa aiheesta:
https://www.kernel.org/doc/Documentation/timers/NO_HZ.txt

Poistetaan DHCP:n asetuksista NTP määrittelyt.

Seuraavat muutokset kannattaa tehdä ettei DHCP toiminnot sotkisi aikapalvelimen toimintaa.

Avaa tiedosto /etc/dhcp/dhclient.conf komentoriviltä:
sudo nano /etc/dhcp/dhclient.conf

Poista ”request” riveiltä kohdat dhcp6.sntp-servers ja ntp-servers . Mikäli joukossa esiintyy muita ntp viittauksia, poista myös ne. Voit varuilta laittaa poistamasi kohdat talteen omalle rivilleen ja rivin alkuun # merkin (jolloin niitä ei lueta mukaan). Tallenna tiedosto.

Poista tiedosto /etc/dhcp/dhclient-exit-hooks.d/ntp kokonaan.
sudo rm /etc/dhcp/dhclient-exit-hooks.d/ntp

Poista myös /lib/dhcpcd/dhcpcd-hooks/50-ntp.conf tiedosto.
sudo rm /lib/dhcpcd/dhcpcd-hooks/50-ntp.conf

Poistetaan Avahi käytöstä

Avahi on eräänlainen apuohjelma verkkoliikenteeseen esimerkiksi tulostimia jne varten. Emme kuitenkaan tarvitse sitä mihinkään aikapalvelimessamme, joten laitetaan se pois päältä. Syötä seuraavat komennot komentoriville:

sudo systemctl stop avahi-daemon.service
sudo systemctl stop avahi-daemon.socket
sudo systemctl disable avahi-daemon.service
sudo systemctl disable avahi-daemon.socket

Tämä siis poistaa Avahin käytöstä, mutta ei itse asennusta. Myöhemmässä kohdassa on ohjeet sen poistamiseksi kokonaan.

Poistetaan WPA supplicant

Jos seurasit aikapalvelimen ohjetta myös WLANin osalta, joutaa myös WPA härpäkkeet pois taustalta pyörimästä. Se onnistuu komennolla:

sudo apt -y remove wpasupplicant

Poistetaan Bluez ja Triggerhappy

Jälleen pari pois joutavaa asennusta. Bluez liittyy Bluetoothiin ja sen otimme alkuperäisessä ohjeessa pois käytöstä. Triggerhappy on apuohjelma joka tarkkailee tiettyjä näppäimiä ja suorittaa niihin liittyviä toimintoja. Sekin joutaa tässä yhteydessä pois. HUOM! Triggerhappyn poistaminen saattaa aiheuttaa myös raspi-configin poistamisen. Jos näin käy, joudut asentamaan raspi-configin uudelleen (jos siis koet tarvitsevasi sitä). Jos haluat jättää jommankumman, voit luonnollisesti suorittaa vain sen rivin minkä haluat poistettavaksi. Autoremove poistaa lopuksi turhiksi jääneet liitännäiset mitä ei enää käytetä mihinkään.

sudo apt -y purge bluez
sudo apt -y purge triggerhappy
sudo apt -y autoremove

Poistetaan Avahi ja dhcpcd5

Avahin voi poistaa myös kokonaan komennolla:

sudo apt -y purge avahi-daemon

Ennen dhcpcd5 ohjelman poistoa pitää muuttaa hieman IP asetuksia. Raspissa määritellään nykyään IP asetukset dhcpcd:n kautta, mikä tarkoittaa käytännössä sitä että poiston jälkeen staattisen IP osoitteen määritystä ei voikkaan lukea enää sieltä mihin sen alkuperäisessä ohjeessa laitoimme. Sen vuoksi käydään ensin lisäämässä IP määritykset toiseen paikkaan mistä ne toimivat myös dhcpcd:n poistamisen jälkeen.

Avaa tiedosto /etc/network/interfaces :

sudo nano /etc/network/interfaces

Lisää seuraavat rivit:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
     address 192.168.x.x
     netmask 255.255.255.0
     gateway 192.168.x.x

Korvaa tietysti 192.168.x.x oman lähiverkkosi mukaisilla osoitteilla.

Nyt voimme poistaa dhcpcd5:n emmekä jää ilman IP osoitetta uudelleenkäynnistyksessä. Poistetaan asennus komennolla:

sudo apt -y purge dhcpcd5

Käynnistä uudelleen ja varmista, että yhteys Raspiin SSH:n yli edelleen toimii.

sudo reboot

Tehdään uusi käyttäjä ja poistetaan ”Pi” käyttäjä

Oletustunnukset kannattaa aina vaihtaa joksikin muuksi vähemmän arvattavaksi. Tässä kohtaa ”KÄYTTÄJÄ”:n tilalle luonnollisesti laitetaan keksimäsi uusi käyttäjätunnus. Älä käytä ääkkösiä ja keksi jokin sellainen nimi mitä hakkerit eivät helposti arvaa (ei siis admin tms).

Luodaan ensin uusi käyttäjä komennolla:
sudo adduser KÄYTTÄJÄ

Annetaan seuraavaksi uudelle käyttäjälle oikeudet käyttää sudoa (pääkäyttäjän oikeuksia).
sudo usermod -a -G sudo,dialout KÄYTTÄJÄ

Seuraavaksi määritellään ettei sudo komentoa käytettäessä tarvitse syöttää erikseen salasanaa. Saatat haluta tehdä tämän toisinkin, joten lue ensin molemmat vaihtoehdot ja valitse jompikumpi. Luodaan kansioon /etc/sudoers.d tiedosto 010_KÄYTTÄJÄ-nopasswd
sudo nano /etc/sudoers.d/010_KÄYTTÄJÄ-nopasswd

Tiedoston sisällöksi kirjoitetaan:
käyttäjä ALL=(ALL) NOPASSWD: ALL

Jos taas haluat että salasana kysytään sudoa käytettäessä, vaihda sisällöksi:
käyttäjä ALL=(ALL) PASSWD: ALL

Jälkimmäinen vaihtoehto on hieman epäkäytännöllisempi, mutta varmastikin turvallisempi mikäli avaat palvelimen internetiin päin.

Käynnistä tässä välissä Raspi uudelleen, kirjaudu uudella käyttäjällä ja testaa myös sudo:n toiminta. Jos kaikki näyttää toimivan, voit seuraavaksi poistaa ”Pi” käyttäjän. Tässäkin on taas kaksi vaihtoehtoa.

Jos haluat poistaa vain käyttäjän, mutta jättää kotikansion sisältöineen:
sudo deluser pi

Jos haluat poistaa sekä käyttäjän että tiedostot:
sudo deluser -remove-home pi

Palomuurin asetukset

Linuxin sisäänrakennettua palomuuria voidaan säätää iptablesin avulla. Tehdään tässä asetukset, jotka sallivat tulevat SSH ja NTP yhteydet eli vain ne mitä tässä palvelimessa tarvitsemme. Ulospäin lähteviä yhteyksiä sallitaan myöskin SSH ja NTP, sekä lisäksi HTTP ja DNS ohjelmistopäivityksiä ja nimipalveluiden toimintaa varten. Forward yhteyksiä ei sallita ollenkaan.

Näiden asetusten kanssa on syytä olla tarkkana ja tehdä asiat oikeassa järjestyksessä, jotta et sulkisi itseäsi ulos omalta palvelimeltasi. Samasta syystä tehdään asetukset ensin väliaikaiseen tiedostoon, josta suoritamme ne kaikki kerralla.

Tarkistetaan ensin onko muistissa ennestään jotain määrityksiä (ei pitäisi olla jos aloitit puhtaalta pöydältä). Komentoriville:

sudo iptables -L

Näkyviin pitäisi tula Input, Forward ja Output kejut joiden alla ei ole vielä tässä vaiheessa sääntöjä. Jos sääntöjä kuitenkin on, saat nollattua ne komennolla ”sudo iptables -F ”. Varmista kuitenkin ensin, että kaikkien kohtien ”policy” on oletuksena ”Accept” ennenkuin poistat mahdollisesti myös pääsyn SSH:lla. Jos Input tai Output kohdassa on ”Drop”, muuta ne ensin muotoon ”Accept” komennolla ”sudo iptables -P INPUT ACCEPT” ja ”sudo iptables -P OUTPUT ACCEPT”. Tämä siis siksi ettet menetä yhteyttä palvelimeen tässä vaiheessa. Tee tämän jälkeen sääntöjen nollaus.

Nyt voimme alkaa rakentamaan uusia sääntöjä. Avataan uusi tiedosto kotikansioon (korvaa KÄYTTÄJÄ omalla käyttäjänimelläsi).

nano /home/KÄYTTÄJÄ/iptables-asetukset

Laita tiedostoon seuraavat komennot

Huomaa, että yllä olevat ovat komentoriville tarkoitettuja komentoja eikä tätä tiedostoa voi ihan suoraan käyttää iptablesin asetustiedostona (vaikka se hyvin samalta näyttääkin).

Seuraavaksi syötetään tiedoston sisältönä olevat komennot seuraavasti:

sudo bash /home/KÄYTTÄJÄ/iptables-asetukset

Ota uusi yhteys SSH:lla palvelimeesi varmistaaksesi, että saat ainakin yhteyden edelleen. ÄLÄ käynnistä Raspia uudelleen vielä. Muuten menetät asetukset. Jos kuitenkin jäit ulos palvelimeltasi, niin siinä tapauksessa uudelleenkäynnistys voi auttaa palauttamaan pääsyn. Jos yhteys toimii, niin tarkista seuraavaksi onko asetukset menneet palomuuriin. Syötä komentoriville:

sudo iptables -L

Jos sait suunnilleen ylläolevan kuvan näköiset asetukset, hyvä.

Asetukset eivät kuitenkaan vielä ole pysyviä, vaan nollautuvat seuraavalla uudelleenkäynnistyksellä. Seuraavaksi kirjoitetaan niistä oikea asetustiedosto komennolla:

sudo sh -c ”iptables-save > /etc/iptables.rules”

Ylläoleva tallentaa asetukset /etc/iptables.rules tiedostoon. Tämän jälkeen pitää vielä kertoa Raspbianille, että lataa asetukset kyseisestä tiedostosta käynnistyksen yhteydessä.

Luo kansioon /etc/network/if-pre-up.d tiedosto iptables . Kyseisen kansion sisältö ladataan kun verkkokorttia käynnistellään. Komentoriville:

sudo nano /etc/network/if-pre-up.d/iptables

Ja sinne sisällöksi lyhyesti:

Tiedostosta pitää tehdä vielä suoritettava seuraavalla komennolla:

sudo chmod +x /etc/network/if-pre-up.d/iptables

Nyt asetusten pitäisi latautua automaattisesti seuraavalla käynnistyksellä. Kokeile käynnistää Raspi uudestaan ja sitten ”sudo iptables -L” nähdäksesi että asetukset ovat latautuneet.

SSH palvelimen konfigurointi

SSH palvelinta voidaan myös säätää turvallisemmaksi esimerkiksi määrittelemällä tietyt käyttäjät, jotka voivat kirjautua. Avataan asetustiedosto:

sudo nano /etc/ssh/sshd_config

Lisää uudet rivit (tai muokkaa olemassaolevia jos on):

AllowUsers KÄYTTÄJÄ1 KÄYTTÄJÄ2
PermitRootLogin no

Käyttäjä1 ja 2 korvataan tietysti niillä käyttäjätunnuksilla joille haluat sallia pääsyn. Rootina (pääkäyttäjänä) ei anneta kirjautua.

Asetukset kannattaa muutenkin käydä ajatuksen kanssa läpi, mutta älä muuta sellaista mistä et ole varma. Jos haluat olla oikein tiukkana turvallisuuden kanssa, voit ottaa koko SSH palvelimen pois käytöstä, mutta tällöin joudut tietysti tekemään kaiken konfiguroinnin Raspiin liitetyn näytön ja näppiksen avulla. SSH yhteyttä ei toki tarvitse silti avata reitittimestäsi internetiin päin, vaikka se sisäverkossa olisikin käytössä. Voit myös määritellä asetuksiin esimerkiksi mistä IP osoitteista yhteys sallitaan. Myös SSH:n portin voi vaihtaa johonkin vähemmän tunnettuun, mutta tämä ei välttämättä ole kovinkaan käytännöllinen ratkaisu.

Tee image SD kortista

Nyt kun aikapalvelimesi toivottavasti toimii eikä olla vielä saatu sitä kovin pahasti solmuun, voisi olla hyvä hetki tehdä image muistikortin sisällöstä. Linuxissa ja Macin OS X:ssä tämä onnistuu esimerkiksi komentoriviltä ”dd” komentoa käyttäen. Windowsille pitää asentaa sopvia ohjelma, esimerkiksi Win32 Disk Imager.

Jos jostain syystä Raspi menisi sekaisin, voi toimivan imagen sitten helposti palauttaa muistikortille eikä tarvitse tehdä kaikkea alusta asti uudestaan.

Muuta mahdollista

Jos haluat avata aikapalvelimeesi pääsyn internetistä päin, sinun pitää avata reitittimestäsi kyseinen portti ja ohjata se Raspin IP osoitteeseen. Muussa tapauksessa aikapalvelin on käytettävissä vain omassa lähiverkossasi, mikä tietysti varmaan useimmille meistä on riittävä vaihtoehto. Tarkemmin asia selviää reitittimen omista ohjeista.

Ennen aikapalvelimen avaamista julkiseksi, tarkista myös /etc/ntp.conf tiedostosta, että restrict -riveillä on määritelty ajan kyseleminen sallituiksi mutta ei konfigurointia. Myös esimerkiksi kyselyt versiotiedoista on syytä olla kielletty. Nykyisissä versioissa näin pitäisi olla oletuksena, mutta asia on hyvä varmistaa. Tarkempia tietoja saat manuaalista kirjoittamalla komentoriville ”man ntp”.

Turvallisuutta voi parantaa myös esimerkiksi asentamalla fail2ban ohjelman. Fail2ban valvoo kirjautumisyrityksiä ja tarpeeksi monesta epäonnistumisesta estää palomuurissa kyseisen IP osoitteen. Tällä saa hieman lisäsuojaa automatisoituja hyökkäyksiä vastaan.