Oman palvelimen rakennus

Oman palvelimen rakennus - Viikkotehtävä 4

TLDR (Too Long Didn’t Read)

Tässä artikkelissa vuokrasin onnistuneesti virtuaalipalvelimen DigitalOcean sivustolta ja ostin sille domain nimen Namecheap sivustolta. Loin uudet A-tietueet, jotta liikenne halutulla domain nimellä ohjautuu virtuaalipalvelimeni osoitteeseen. Loin uuden VirtualHostin palvelimelle ja muutin palvelimen kotisivun käyttäjän kotihakemistosta muokattavaksi. TLS salausta asetettaessa törmäsin ongelmiin Certbotin kanssa enkä onnistunut luomaan salausta sivustolleni.

Palvelimen vuokraus

Tehtävänä on tehdä alusta alkaen oma julkinen palvelin internetiin. Prosessi alkoi vuokraamalla palvelintilaa. Valitsin itse DigitalOceanin palveluntarjoajaksi, sillä Githubin opiskelijakäyttäjällä sai 100€ käyttörahaa vuodeksi kyseiseen palveluun. Käyttäjää luodessani palvelu kuitenkin veloitti 5€ maksun käyttäjän luomisen yhteydessä. Tämä maksu meni DigitalOcean käyttäjäni “lompakkoon” ja voin käyttää sitä palveluita ostaessa.

Käyttäjän luotuani valitsin yläreunan vihreästä create painikkeesta create droplet vaihtoehdon. Sitä kautta pääsen valitsemaan mieluisan levykuvan palvelinta varten.

Droplets

Valitsin kuvasta poiketen itselleni Debian 10 imagen, sillä se on sama jota käytän myös läppärissä jolla kirjoitan tätä postausta. Palvelimen koosta ja suorituskyvystä valitsin kaiken pienimmän ja halvimman. Datacenterin sijainniksi valitsin Frankfurtin, sillä se on kaikkein lähimpänä omaa sijaintiani.

Password

DigitalOcean tarjoaa mahdollisuuden yhdistää virtuaalipalvelimeen joko ssh avaimen tai salasanan kautta. Valitsin salasanan (hyvän ja turvallisen sellaisen) tähän käyttötarkoitukseen. Tämän jälkeen asetetaan virtuaalikoneen nimi ja valitaan kuinka monta dropletia (virtuaalipalvelinta) halutaan luoda tällä samalla konfiguraatiolla. Lomakkeesta löytyy myös runsaasti lisäpalveluita jotka jätin valitsematta, sillä ne nostaisivat palvelimen kuukausihintaa.

ReadyDroplet

Ja näin saimme luotua virtuaalipalvelimen helposti ja vaivattomasti.

Ensitoimet palvelimella

Seurasin Tero Karvisen loistavia ohjeita, kuinka ensitoimet palvelimella suoritetaan. Ensimmäisenä otin ssh yhteyden palvelimeeni root käyttäjällä. Tämä on ainut kerta kun root käyttäjälle kirjaudutaan sisään

ssh

Seuraavaksi asensin tulimuurin komennolla sudo apt-get -y install ufw jonka jälkeen sallin liikenteen portista 22 (ssh yhteys) komennolla sudo ufw allow 22/tcp ja hyväksyin muutokset komennolla sudo ufw enable

Seuraavaksi loin käyttäjän tämä tapahtui sudo adduser toni. Luonnin yhteydessä asetettiin käyttäjälle turvallinen salasana ja itse skippasin kaikki ylimääräiset kysymykset käyttäjän muista tiedoista. Seuraavaksi uusi käyttäjä täytyy lisätä sudo sekä adm ryhmiin. sudo adduser toni sudo ja sudo adduser toni adm komennoilla tämän sai aikaiseksi. Seuraavaksi avasin uuden komentokehotteen ja otin ssh etäyhteyden palvelimeen uudella käyttäjällä testatakseni toimivatko sudo oikeudet.

SudoTest

Hyvin toimivat!

Seuraavana vuorossa oli root käyttäjän lukitseminen, jotta sille ei voi enää kirjautua, tai ottaa ssh etäyhteyttä. Suljin ensimmäisen komentokehoitteeni, jossa oli ssh yhteys root käyttäjään palvelimella. Sitä ei enää tarvita. Root käyttäjän saa lukittua sudo usermod --lock root komennolla. Ssh etäyhteyden luominen root käyttäjälle piti myös estää. sudo nano /etc/ssh/sshd_config tiedostosta muokkasin “PermitRootLogin yes” kohdan –> “PermitRootLogin no”. Seuraavaksi sudo systemctl restart ssh ja muutokset astuvat voimaan

Permission denied

Ja näin, root käyttäjä on lukossa. Viimeisenä päivitin sekä asensin mahdolliset päivitettävät paketit komennolla sudo apt-get update && sudo apt-get upgrade.

Apachen asennus

Apachen asennusta onkin käsitelty aikaisemmin tällä sivustolla. Tarkemmat ohjeet voi käydä lukemassa täältä. sudo apt-get -y install apache2 ja sudo systemctl restart apache2 komennoilla pääsemme hyvin alkuun.

Domainin nimen hankin Namecheap.com sivustolta. Seurasin Sampo Hautalan ohjeita A-tietueiden asettamisessa. Nimen ostoprosessi on todella yksinkertainen ja selkeästi ohjattu. Käyttäjä minulta jo löytyi sivustolle, joten sitä ei tarvinnut luoda. Ostovaiheessa vältin kaikkia lisämyyntejä ja jätin autorenewal kohdan valitsematta, sillä tätä domainia en tule tarvitsemaan kurssin jälkeen. Mikäli haluaisin säilyttää domainin valitsisin ehdottomasti automaattisen uusimisen.

testisivunhallinta

Domainin hallintasivulta valitsin “Advanced DNS” valikon.

AdvancedDNS

Poistin oletuksena löytyneet recordit ja lisäsin kaksi uutta A-tietuetta. Yhden @-merkille ja yhden www:lle. IP osoite kohtaan syötin virtuaalipalvelimeni osoitteen.

Seuraavaksi siirryin virtuaalipalvelimeni komentokehotteeseen viimeistelemään tehtävän.

$ sudo ufw allow 80/tcp
$ sudo ufw enable 

komennoilla tein reiän tulimuuriin ja käynnistin tulimuurin uudelleen, jotta muutokset tulivat voimaan. Loin Sampo Hautalan ohjeiden mukaisesti palvelimelle uuden virtual hostin. Loin uuden tiedoston /etc/apache2/sites-available/testi.conf ja laitoin sen sisälle seuraavan tekstin

testiconf

Seuraavaksi sivu piti ottaa käyttöön komennolla sudo a2ensite testi ja sudo systemctl restart apache2. Tämän jälkeen onkin aika luoda kansiorakenne, joka vastaa tiedostoon syötettyä.

mkdir public_html && mkdir public_html/testi/ komennolla nämä kaksi kansiota valmistui hetkessä ja nano public_html/testi/index.html komennolla saa luotua tyhjän tiedoston valmiina muokattavaksi nano editorilla testi kansion sisään. Sivun sisällöksi tuli “Testisivu tehtavaa varten”. Näitä komentoja kirjoittaessa olen käyttäjän kotihakemistossa enkä ole liikkunut cd komennolla sieltä pois.

Valmissivu

Murtautumisyritykset

Seuraavana tehtävänä oli tutkia lokeja sekä etsiä sieltä merkkejä murtautumisista. Kyseisen lokin saa automaattisesti päivittyvään seurantaan sudo tail -F /var/log/auth.log komennolla.

AuthLog

Kuvakaappauksesta näkyy aikaisempi tail komentoni, sekä valtava kasa kirjautumisyrityksiä epäonnistuneilla salasanoilla, joita tulee jatkuvasti lisää. Palvelimeen kohdistuu jatkuvasti useita yrityksiä kirjautua sisään ssh yhteydellä. Monissa kohdissa näkyy, että etäyhteyttä on yritetty ottaa käyttäjänimellä, joka on virheellinen tai suoraan root käyttäjään. Onneksi siis aikaisemmin palvelimen alkutoimissa lukitsin root käyttäjän, ja estin etäyhteydellä kirjtautumisen siihen. Tässä korostuu myös hyvän salasanan tärkeys.

Let’s Encrypt!

Seuraavana tehtävänä oli laittaa TLS salakirjoitus toimimaan certbotin sekä Let’s Encryptin avulla. Let’s Encryptin sivuilta ohjataan käyttämään Certbotia. Certbotin etusivulta voi valita palvelimen ohjelmiston, sekä käyttöjärjestelmän jonka jälkeen sivusto ohjaa uudelleen asennusohjeisiin. Ohjeissa käytetään snap paketinhallintaa, mutta Certbot tarjoaa asennusohjeet muille paketinhallintaohjelmille täältä.

$ sudo apt-get -y install certbot

komennolla certbot asentuu virtuaalipalvelimelle, jonka jälkeen asensin vielä ohjeissa suositellun python-certbot-apache paketin.

$ sudo certbot --apache

komennolla certbotin konfigurointi käynnistyy. Komennon jälkeen syötin sähköpostiosoitteeni, hyväksyin käyttösopimuksen, kieltäydyin jakamasta sähköpostiosoitettani eteenpäin certbotin yhteistyökumppaneille.

Certbot

Asennuksessa tapahtui nähtävästi jokin virhe, sillä certbot ilmoittaa ettei voinu asentaa sertifikaattia. Kuitenkin kaikki loppu viittaisi onnistuneeseen asennukseen.

SecureConnectionFailed

Asia ei kuitenkaan näin ollut. Kun yritin mennä https:// etuliitteen kanssa sivulleni oli vastassa tämä error viesti. Yritin ajaa komentoa uudelleen useamman kerran ja valitsin, että se uusisi olemassa olevat sertifikaatit ja lopputuloksena certbot ilmoitti ettei voi luoda enempää sertifikaatteja kyseisille domaineille.

LockedCertbot

Lokista löytyi linkki Let’s Encryptin rate-limits sivulle. Olin nähtävästi täyttänyt domainikohtaisen kiintiön salauspyyntöjä. Sivustoa lukiessani sain selville, että Let’s Encryptillä ei ole mahdollisuutta tilapäisesti nollata tilannetta, vaan pitäisi odottaa yhden viikon ajan, jotta voin yrittää sertifikaatin luomista uudelleen.

Linkkejä

Kurssin materiaalit

Sampo Hautalan blogipostaus

DigitalOcean

Namecheap

Let’s Encrypt

Certbot

Tätä dokumenttia saa kopioida ja muokata GNU General Public License v3 mukaisesti https://www.gnu.org/licenses/gpl-3.0.en.html