Oman julkisen virtuaalisen internetpalvelimen luominen
Tein tehtävän kotona pöytäkoneellani, jossa oli mm. Intel i5-3570K prosessori, 8GB RAM-muistia ja Asus GTX 1060 (6GB) näytönohjain. Xubuntua (18.04.3) käytin USB-tikulta kokeilutilassa.
Tehtävä tehty 22.2.2020
Aloitin virtuaalisen internetpalvelimen luomisen vuokraamalla palvelimen DigitalOceanilta. Tein edellisellä oppitunnilla tunnukset DigitalOceaniin ja vuokrasin sieltä palvelimen. Tätä tehtävää varten vuokrasin kuitenkin toisen palvelimen.
Palvelimen vuokraaminen
Kirjauduin DigitalOceanin verkkosivuille, valitsin sivun vasemmasta laidasta ”Droplets”. Droplets-näkymästä valitsin sivun ylälaidasta ”Create” ja sieltä ”Droplets”.
Nyt pääsin itse palvelimen luomiseen. Ensiksi valitsin distroksi Ubuntun 18.04.3 (LTS) x64, ja planiksi standardin. Halusin halvimman, eli 5$/kuukausi, vaihtoehdon, joka löytyi valitsemalla ”show all plans”.

Seuraavaksi valittiin palvelimen maantieteellinen sijainti. Halusin palvelimen sijaitsevan EU:ssa, joten päädyin valitsemaan Saksan.Authenticationiksi otin sähköpostiin lähetettävän salasanan. Tämä ei ole ilmeisesti niin turvallinen kuin SSH-avain, mutta en tiennyt miten SSH-avain toimii, joten en sitä ottanut.

Hostnameksi kirjoitin itse valitsemani sanan ”naava”. Lopuksi klikkasin sivun alalaidasta ”Create Droplet”. Noin 20 sekunnin odottelun jälkeen palvelin oli valmis ja sähköpostiin kilahti palvelimen salasana.

DNS-nimen luominen
Olin jo oppitunnilla tehnyt tunnukset Name.com -nimiseen palveluun. Kirjauduin tunnuksillani sinne, ja valitsin sivun oikeasta yläreunasta ”My Domains”. Avautuneella sivulla oli aiemmin tunnilla luomani jonismolander.computer -niminen domain, jota klikkasin.

Seuraavaksi klikkasin kohdasta ”Manage DNS Records”, josta pystyin yhdistämään nimen IP-osoitteeseen. Answer -kohtaan kirjoitin, juuri DigitalOceanista vuokraamani, palvelimen IP-osoitteen 138.68.66.4. Host-kohtaan kirjoitin ”new”, minkä jälkeen klikkasin kohdasta ”Add Record”. Loin vielä yhden nimen samalle osoitteelle, käyttäen nyt tekstiä ”www.new”. Nyt minulla oli osoitteelle 138.68.66.4 kaksi nimeä:
new.jonismolander.computer
http://www.new.jonismolander.computer

Palvelimelle kirjautuminen
Avasin terminalin ja annoin komennon ssh root@138.68.66.4, jolla sain etäyhteyden palvelimeen. Palvelin pyysi aiemmin sähköpostiini tullutta salasanaa. Annettuani salasanan, palvelin pyysi vaihtamaan salasanan, minkä myös tein. Salasanan tulee aina olla hyvä, joten valitse se huolella.
Seuraavaksi avasin palvelimelle portin etäyhteyttä varten antamalla komennon sudo ufw allow 22/tcp. Tässä vaiheessa uskalsin laittaa palomuurin päälle komennolla sudo ufw enable.
Käyttäjän luominen ja lisääminen ryhmiin
Palvelimelle piti luoda sudo-käyttäjä, jotta pystyisin kirjautumaan muutenkin kuin root-tunnuksilla.
Komennolla sudo add user joni loin käyttäjän nimeltä joni. Seuraavaksi piti luoda käyttäjälle salasana ja antaa joitain tietoja, kuten kokonimi. Annoin nimen ja jätin muut kohdat tyhjiksi. Luotuani käyttäjän joni, lisäsin käyttäjän ryhmiin sudo, adm ja admin käyttäen komentoja:
sudo adduser joni sudo
sudo adduser joni adm
sudo adduser joni admin
Tässä vaiheessa kokeilin kirjautua uudella käyttäjällä palvelimelle. Avasin uuden terminaalin ja annoin komennon ssh joni@new.jonismolander.computer. (Olisin voinut kirjoittaa IP-osoitteenkin, mutta halusin testata nimipalvelun toimivuutta.) Palvelin pyysi käyttäjän salasanaa, jonka annettuani pääsin palvelimelle käyttäjätunnuksella joni.

Root-tunnuksen lukitseminen
Seuraavaksi lukitsin root-tunnukset komennolla sudo usermod –lock root. Komennolla sudoedit sudoedit /etc/ssh/sshd_config avasin sshd_config -tiedoston, josta muutin kohdan ”PermitRootLogin yes” -> ”PermitRootLogin no”. Tallensin tiedoston ja käynnistin ssh:n uudelleen komennolla sudo service ssh restart. Näin sain root-kirjautumisen poissa käytöstä.
Lopuksi päivitin vielä paketit ajantasalle käyttäen komentoja:
sudo apt-get update
sudo apt-get upgrade
Poistin lopuksi tämän juuri vuokraamani palvelimen DigitalOceanista, sillä minulla oli siellä ennestään oppitunnilla luomani palvelin.
Vapaaehtoiset tehtävät
Tehtävät tehty 25.2.2020. Käytössä oli oppitunnilla luomani palvelin nimeltä kaarna. Palvelimen IP yhdistetty nimiin jonismolander.computer sekä http://www.jonismolander.computer.
Etsi lokeistasi merkkejä murtautumisyrityksistä ja analysoi ne.
/var/log/auth.log:sta löysin pitkän listan tunkeutumisyrityksiä. Alla yksi esimerkki:
Feb 25 20:43:17 kaarna sshd[20172]: Invalid user dongshihua from 180.76.238.128 port 39464
Feb 25 20:43:17 kaarna sshd[20172]: pam_unix(sshd:auth): check pass; user unknown
Feb 25 20:43:17 kaarna sshd[20172]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=180.76.238.128
Feb 25 20:43:19 kaarna sshd[20172]: Failed password for invalid user dongshihua from 180.76.238.128 port 39464 ssh2
Feb 25 20:43:19 kaarna sshd[20172]: Received disconnect from 180.76.238.128 port 39464:11: Bye Bye [preauth]
Feb 25 20:43:19 kaarna sshd[20172]: Disconnected from invalid user dongshihua 180.76.238.128 port 39464 [preauth]
Rivien alussa on päivämäärä sekä kellonaika (UTC +0).
kaarna on palvelimen nimi, johon hyökkäys kohdistui.
sshd on prosessi, jossta ilmoitus tuli (OpenSSH SSH daemon). https://www.tutorialspoint.com/unix_commands/sshd.htm
[20172] ilmeisesti jonkinlainen tapahtuman id-numero. Luku kasvoi tasaisesti tapahtumien lisääntyessä.
Invalid user dongshihua virheellinen käyttäjä
from 180.76.238.128 port 39464 mistä tunkeutumisyritys tuli (IP ja portti)
pam_unix(sshd:auth) pam_unix on salasanan todentamismoduuli
https://linux.die.net/man/8/pam_unix
check pass; user unknown ei tunnista käyttäjää
authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=180.76.238.128
Todentaminen epäonnistui.
Failed password for invalid user dongshihua from 180.76.238.128 port 39464 ssh2
Virheellinen salasana väärälle käyttäjälle dongshihua.
Kahdella viimeisellä rivillä tieto tunkeutumisyrittäjän yhteyden katkaisemisesta.
Tee weppisivuja omalla, paikallisella koneellasi ja kopioi ne palvelimmelle scp-komennolla.
Ensin asensin palvelimelle Apachen samoin kuin aiemmassa postauksessani, joten en raportoi kyseistä toimenpidettä tarkasti. Tämän jälkeen latasin Moodlesta, Orientaatio digitaalisiin palveluihin -kurssin palautuslaatikosta, vuosi sitten tekemäni verkkosivut. Sivusto latautui kansioon /home/xubuntu/Downloads/. Kaikki sivustoon liittyvät tiedostot olivat Hauturit-nimisessä kansiossa, jonka nimen muutin public_html-nimiseksi.
Avasin palomuurista portin 80 (sudo ufw allow 80/tcp) ja otin käyttöön userdir-moduulin (sudo a2enmod userdir). Käynnistin Apachen vielä uudestaan (sudo systemctl restart apache2).
Sivustoni oli paikallisella koneella /home/xubuntu/Downloads/, jonne navigoin komentokehotteessa. Komennolla scp -r public_html joni@jonismolander.computer: kopioin public_html-kansion paikalliselta koneeltani palvelimelle. Kansio kopioitui palvelimelle kohteeseen /home/joni/. Tämän jälkeen tein palvelimelle, kansioon /etc/apache2/sites-available/, tiedoston nimeltä jonismolander.computer.conf. Kyseiseen asetustiedostoon kirjoitin alapuolella näkyvän sisällön.
<VirtualHost *:80>
ServerName jonismolander.computer
ServerAlias www.jonismolander.computer
DocumentRoot "home/joni/public_html/"
<Directory "home/joni/public_html/">
require all granted
</Directory>
</VirtualHost>
Otin asetukset käyttöön komennolla sudo a2ensite jonismolander.computer.conf. Poistin Apachen oletussivun asetukset komennolla a2dissite 000-default.conf. Käynnistin Apachen uudelleen komennolla sudo systemctl restart apache2. Komennolla apache2ctl configtest testasin, tuleeko virheilmoituksia. Ja tulihan sieltä:

Hetken ihmeteltyäni, huomasin unohtaneeni luomastani asetustiedostosta kohdekansiopolun alusta kauttaviivan. Lisäsin kauttaviivat ja tallensin tiedoston.

Käynnistin varmuuden vuoksi apachen jälleen uudestaan, minkä jälkeen taas komennon apache2ctl configtest. Tällä kertaa sain virheilmoitukseksi seuraavan teksin:

Menin selaimella osoitteeseen http://www.jonismolander.computer, ja sain Permission Denied -virheilmoituksen. Siirryin ihmettelemään logitiedostoja, ja löysin seuraavan merkinnän:
[Tue Feb 25 18:34:29.938825 2020] [core:crit] [pid 19422:tid 140378799834880] (13)Permission denied: [client 178.75.130.183:56060] AH00529: /home/joni/public_html/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that '/home/joni/public_html/' is executable, referer: http://jonismolander.computer/~joni/fds
Logia lukiessani aloin miettimään, oliko kansio jollain tavalla suojattu. Kirjoitin Googleen hakusanoiksi ”htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that” ja löysin tämän sivuston: https://stackoverflow.com/questions/20627084/permission-denied-var-www-abc-htaccess-pcfg-openfile-unable-to-check-htacces
Päätin kokeilla seuraavaa komentoa:
chmod 755 /home/joni/public_html/
Komennon antamisen jälkeen menin selaimella osoitteeseen http://www.jonismolander.computer, jolloin sivusto lähti toimimaan. Kansiollani oli ilmeisesti jostain syystä jonkinlainen luku/kirjoituskielto. En tiedä tarkalleen, mitä kaikkea kyseinen komento teki, joten googletin asiasta lisätietoa ja päädyin sivulle: https://www.poftut.com/chmod-755-700/
Komento antoi kaiketi oikeudet käyttäjille ja käyttäjäryhmille? Kannattaa perehtyä näihin komentoihin tarkemmin, jottei pääsisi muodostumaan tietoturvauhkia. En tiedä, mitä komentoa minun olisi kannattanut käyttää, joten annoin asian olla.
Myöhemmin kommentoitua: Oikeat komennot olisivat olleet kaiketi nämä:
sudo chown joni:joni /home/joni/public_html
sudo chmod g=rwxs /home/joni/public_html
Totesin sivujen toimivan virtuaaliselta palvelimelta, joten lopetin tehtävien tekemisen tältä päivältä.
Laita TLS-salakirjoitus (https) toimimaan certbot ja Let’s Encrypt avulla.
Tehtävän teen mahdollisesti jossain vaiheessa…
Lähteet:
- Oppitunnit 13.2.2020
- http://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean
- https://linux.die.net/man/8/pam_unix
- https://www.tutorialspoint.com/unix_commands/sshd.htm
- https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04
- https://stackoverflow.com/questions/20627084/permission-denied-var-www-abc-htaccess-pcfg-openfile-unable-to-check-htacces
- https://www.poftut.com/chmod-755-700/