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.
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.
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.
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
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.
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
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.
Domainin hallintasivulta valitsin “Advanced DNS” valikon.
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
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.
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.
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.
Asennuksessa tapahtui nähtävästi jokin virhe, sillä certbot ilmoittaa ettei voinu asentaa sertifikaattia. Kuitenkin kaikki loppu viittaisi onnistuneeseen asennukseen.
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.
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ä
Tätä dokumenttia saa kopioida ja muokata GNU General Public License v3 mukaisesti https://www.gnu.org/licenses/gpl-3.0.en.html