Teoriasta käytäntöön pilvipalvelimen avulla (h4)

Tämä blogipostaus on osa Haaga-Helian Linux Palvelimet -kurssia, jota Tero Karvinen pitää keväällä 2022.

Neljännen kurssiviikon tehtävät:

”z) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä z-alakohdassa ei tarvitse tehdä testejä tietokoneella)

Karvinen 2017: First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS

Karvinen 2018: Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address

a) Pilvi. Vuokraa ja asenna oma julkinen palvelin Internetiin. Vuokraa nimi osoittamaan siihen. (Jos sinulla on jo oma palvelin, ks kohta b. Jos et halua vuokrata palvelinta, ks kohta c. Jos haluat kokeilla vuokrattavia palveluita ilmaiseksi, voit käyttää GitHub Education pakettia tai eri pilvioperaattoreiden ilmaisia tutustumistarjouksia.)

b) Handed over. Vaihtoehtotehtävä, korvaa kohdan a. Asenna uusi palvelin vanhan rinnalle, ja laita domain-nimi osoittamaan sen IP-osoitteeseen. Silloin vaihto koneiden välillä menee ilman katkoa. Muista poistaa vanha palvelin, kun et enää tarvitse sitä, sillä useimmat pilvioperaattorit laskuttavat myös sammutetuista palvelimista.

c) Simulated. Vaihtoehtotehtävä, korvaa kohdan a. Suosittelen mieluummin tekemään a tai b-kohdan, koska vuokrausta ei voi harjoitalla vuokraamatta. Kokeile virtuaalikoneiden tekoa vagrant:lla omalla paikallisella koneellasi. Sovella muut kohdat siten, että ne toimivat paikallisen koneen kanssa: esim testaa weppsivut paikallisesti curlilla, simuloi hyökkäys syöttämällä väärä salasana omaan ssh-palvelimeesi jne.

d) Suuri muuri. Suojaa palvelin tulimuurilla. Muista ensin reikä ssh-palvelimelle.

e) Served. Laita koneellesi Apache-weppipalvelin. Korvaa testisivu. Laita käyttäjän kotisivut toimimaan. Kokeile eri koneelta, esim. kännykällä, että sivut toimivat. Vinkki: tee kotisivut normaalina käyttäjänä public_html/ alle.

f) Päivitys. Päivitä palvelimesi kaikki ohjelmat.

g) Rosvot porteilla. Etsi lokeistasi merkkejä murtautumisyrityksistä ja analysoi ne.

h) Vapaaehtoinen: Etusivu uusiksi. Laita weppipalvelimesi etusivu (http://example.com/ eikä http://example.com/~tero) näkyviin, tietysti niin, että sivuja voi muokata normaalin käyttäjän oikeuksin ja ne ovat jonkun käyttäjän kotihakemistossa.

i) Vapaaehtoinen: Laita TLS-salakirjoitus (https) toimimaan Let’s Encrypt avulla. Vinkki: certbot tai lego.

j) Vapaaehtoinen: Tee weppisivuja omalla, paikallisella koneellasi ja kopioi ne palvelimmelle scp-komennolla.

k) Vaikea, vapaaehtoinen vaihtoehtotehtävä Tämä on vain niille parille propellihatulle, jotka halusivat vaikeamman tehtävän. Korvaa muut h4 koti- ja tuntitehtävät. Koodaa ja julkaise uusi tietokantaa hyödyntävä weppipalvelu. Palvelun pitää ratkaista jokin käytännön ongelma, esimerkiksi ilmoittautuminen tapahtumaan, pisteytä tunti, äänestä suosikkia tms. Voit hyödyntää vanhoja koodejasi, kunhan lopputulos on uusi. Voit käyttää mitä vain kehitysalustaa (framework), esimerkiksi LAMP, Flask, Django, Postgre, Mariadb… Muista lisätä raporttiin ruutukaappaukset keskeisestä toiminnallisuudesta. Ohjelman tulee olla uusi ja tätä tehtävää varten tehty, vanhoja omia komponentteja saa toki käyttää.”

(Karvinen 2022)

z) Alkuun uuden virtuaalipalvelimen kanssa

Tiivistin Tero Karvisen artikkelin ”First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS” ohjeet lyhyeksi yhteenvedoksi, millä askeleilla uuden virtuaalipalvelimen kanssa pääsee liikkeelle. Karvinen on käyttänyt esimerkissäään DigitalOceanilta hankittua yksityistä virtuaalipalvelinta (”virtual private server”) ja Namecheapiltä hankittua domainnimeä (”DNS name”), koska opiskelijan on mahdollista saada ne käyttöönsä ilmaiseksi GitHub Education -paketin kautta. Muita vastaavia palveluntarjoajia, jotka eivät kuitenkaan kuulu GitHub Education -paketin piiriin, ovat esimerkiksi Linode ja Gandi.

  1. Luo uusi käyttäjätili ja lisää käyttäjälle luottokortti ja/tai alennuskoodi.
  2. Valitse virtuaalipalvelimen käyttöjärjestelmä, esimerkissä Ubuntu 16.04 LTS.
  3. Valitse datakeskus läheltä asiakkaitasi.
  4. Valitse tunnistautumistapa: jos et ole varma, valitako SSH-avaimet vai salasana, valitse salasana.
  5. Tarkista luodun virtuaalipalvelimesi IP-osoite.
  6. Kirjaudu ensimmäisellä kerralla terminaalin kautta palvelimen juureen:
    $ ssh root@10.0.0.1
    Käytä vain hyviä salasanoja.
  7. Tee palomuuriin reikä SSH-yhteyttä varten ja kytke palomuuri päälle:
    $ sudo ufw allow 22/tcp
    $ sudo ufw enable
  8. Tee ensin käyttäjä ja sitten käyttäjästä pääkäyttäjä:
    $ sudo adduser tero
    $ sudo adduser tero sudo
  9. Testaa toisella terminaalilla, että käyttäjätunnus toimii, ennen kuin suljet sen terminaalin, jossa on käsitelty virtuaalipalvelinta pääkäyttäjänä:
    $ ssh tero@tero.example.com
  10. Lukitse juuren käyttäjä:
    $ sudo usermod –lock root
    Jos käytössä on SSH-avaimilla kirjautuminen, lukitse juuri komennoilla
    $ sudoedit /etc/ssh/sshd_config
    # …
    PermitRootLogin no
    # …
    $ sudo service ssh restart
  11. Päivitä virtuaalipalvelimen ohjelmat tietoturvan parantamiseksi:
    $ sudo apt-get update
    $ sudo apt-get upgrade
  12. Ala käyttää palvelinta. Kun asennat virtuaalipalvelimellesi julkisen palvelimen kuten Apache, tee palomuuriin reikä julkista palvelinta varten:
    $ sudo ufw allow 80/tcp
  13. Yhdistä domainnimi palvelimeen: Tarkista tiedostot, jotka osoittavat Namecheapin nimipalvelimiin, ja lisää uusi tiedosto (”A record”, “@”). Testaa vain Firefoxilla, että domain toimii, jotta et joudu odottamaan pitkiä aikoja vanhojen ja väärien nimitietojen päivittymistä paikalliselle nimipalvelimellesi.

(Karvinen 2017)

z) Monta verkkosivustoa yhdellä palvelimella

Usein hostataan monta verkkosivustoa yhdellä IP-osoitteella. Apache-palvelimella on kuitenkin mahdollista hostata monta domainnimeä yhdellä IP-osoitteella. Tiivistin Tero Karvisen artikkelin ”Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address” pohjalta vaiheet, miten tämä tehdään käytännössä komentorivikäyttöliittymän ja Apachen avulla:

  1. Asenna ja konfiguroi webbipalvelin (tässä tapauksessa Apache):
    $ sudo apt-get -y install apache2
    $ echo ”Default”|sudo tee /var/www/html/index.html
  2. Lisää uusi domainnimeen pohjautuva virtuaalipalvelin, esimerkkinä alidomain pyora.example.com:
    $ sudoedit /etc/apache2/sites-available/pyora.example.com.conf
    $ cat /etc/apache2/sites-available/pyora.example.com.conf
    $ sudo a2ensite pyora.example.com
    $ sudo systemctl restart apache2
  3. Lisää verkkosivu tavallisena käyttäjänä (ei pääkäyttäjänä):
    $ mkdir -p /home/xubuntu/publicsites/pyora.example.com/
    $ echo pyora > /home/xubuntu/publicsites/pyora.example.com/index.html
  4. Testaa, toimiiko alidomain:
    $ curl -H ’Host: pyora.example.com’ localhost
    $ curl localhost
  5. Testaa Firefox-selaimessa, toimivatko osoitteet http://localhost ja http://pyora.example.com.

(Karvinen 2018)

a) Pilvipalvelimen vuokraus ja asennus

Tavoitteena on vuokrata ja asentaa oma pilvipalvelin Internettiin siten, että vuokrattu domainnimi osoittaa palvelimeen. Kävimme jo oppitunnilla vauhdilla läpi Tero Karvosen johdolla, miten tämä tapahtuu käytännössä, mutta kotitehtäväksi jäi hankkia ihan oma pilvipalvelin ja domainnimi.

Päätin hyödyntää GitHub Educationin pakettia GitHub Student Developer Pack, jolla opiskelija voi saada palvelimen ja domainnimen käyttöönsä ilmaiseksi ainakin kurssin ajaksi. Tämän takia päädyin hankkimaan palvelimen DigitalOceanilta ja domainin Namecheapiltä. Jos olisin vartavasten ostanut palvelimen omaan käyttööni, olisin halunnut palvelimen Suomesta ja tällöin UpCload olisi voinut olla hyvä vaihtoehto verkkosivujensa perusteella.

DigitalOceanin alennuskoodilinkki ei toiminut, joten menin suoraan osoitteeseen digitalocean.com ja rekisteröidyin käyttäjäksi (-> Sign up with email / Google / GitHub). Ensimmäiseksi DigitalOcean halusi kerätä maksutietoni ja samalla varmistaa henkilöllisyyteni, joten syötin luottokorttini tiedot järjestelmään. Tämän jälkeen DigitalOcean pyysi minua vielä maksamaan 1 dollarin maksun varmistuakseen henkilöllisyydestäni, mutta maksu luvattiin myös palauttaa minulle takaisin.

Kun tunnistautuminen oli valmis, minut ohjattiin DigitalOceanin käyttäjän etusivulle, ikään kuin työpöytä-näkymään:

Oikean yläkulman My Team -valikosta klikkasin My Account ja päivitin nimeni. Sen jälkeen menin My Team -valikon kautta sivulle Go to my team ja vasemman reunan linkkipalkista sivulle Billing. Billing-sivun alaosasta löytyi kohta Promo code, johon syötin GitHubin Education-paketista saamani alennuskoodin.

Laitoin myös maksuhälytykset päälle, jotta muistaisin ottaa DigitalOceanin pois käytöstä tämän kevään kurssien päätteeksi. Tämä onnistui Billing-sivulla kohdassa Billing alerts, jossa klikkasin nappia Add Alert. Asetin kuukausittaisen hälytysrajan niin pieneksi, että saisin varmasti kuukausittain muistutuksen sähköpostiini: Tarkoitukseni oli tilata virtuaalipalvelin (droplet) hintaan 5 $ / kk, joten 4 dollarin hälytysraja pitäisi ylittyä joka kuukausi, vaikka käytettävissäni on palveluja ilmaiseksi 100 dollarin edestä.

Kun maksuasiat oli hoidettu, siirryin hankkimaan itselleni virtuaalipalvelinta klikkaamalla vasemman reunan linkkipalkista Droplets.

Aloitin ensimmäisen virtuaalipalvelimen – tai oikeastaan virtuaalikoneen – luomisen klikkaamalla nappia Create Droplet ja tein koneelle seuraavat valinnat:

  1. Valitsin käyttöjärjestelmäksi mahdollisimman uuden Debianin version, tässä tapauksessa Debian 11 x64.
  2. Valitsin virtuaalikoneen paketiksi mahdollisimman edullisen peruspaketin, jota on myöhemmin mahdollista kasvattaa, jos tarve vaatii. Valitsin siis jaetuksi prosessoriksi (shared CPU) Basic, prosessoriksi tavallisen Intelin prosessorin SSD-kovalevyllä (Regular Intel with SSD) siten, että prosessori oli 1 GB, SSD:n kovalevy 25 GB ja siirtodataa 1000 GB. Tällöin paketin hinnaksi tuli 5 $ / kk tai 0,007 $ / h.
  3. Minulla olisi ollut mahdollisuus kasvattaa virtuaalikoneen kovalevytilaa (Add block storage) ja jakaa sitä useampien virtuaalikoneiden kesken. Koska minun oli tarkoitus luoda vain yksi virtuaalikone, pitäydyin oletusarvossa.
  4. Koska datakeskus kannattaa valita mahdollisimman läheltä käyttäjiä, jotta tiedonsiirto olisi mahdollisimman nopeaa, ja lisäksi on tarvittaessa huomioitava myös GDPR:n vaatimukset, valitsin minua lähinnä olevan datakeskuksen EU:n sisältä. Google Mapsin etäisyysmittarin perusteella Amsterdamin ja Helsingin väli on noin 1508 km ja Frankfurtin ja Helsingin väli noin 1522 km, joten päädyin Amsterdamin datakeskukseen, vaikka tässä kohtaa näin pieni ero etäisyyksissä olikin varmasti mitätön.
    Datakeskusten numeroista näkee, kuinka monta datakeskusta paikkakunnalla on. Harmaat numerot kertovat datakeskusten olevan täynnä, mutta mustalla numeroidussa datakeskuksissa on vielä tilaa. Virtuaalipalvelinta luodessani Amsterdamin datakeskuksessa numero 3 oli vielä tilaa, vaikka datakeskus numero 2 oli täynnä. Ilmeisesti Amsterdamissa on joskus ollut myös datakeskus numero 1, vaikka se ei kaiketi ollut tällä hetkellä tai ehkä enää lainkaan valittavana.
  5. Valitsin autentikointimenetelmäksi salasanan: SSH-avaimet olisivat parempia turvallisuuden kannalta, mutta en osaa vielä käyttää niitä, joten päädyin vahvaan salasanaan. Salasanan onkin syytä olla hyvä, ettei palvelimelle murtauduta samantien.
  6. Lisävalintojen kohdalla Tero Karvinen oli oppitunnilla ohjeistanut, että mitään ylimääräistä ei kannata ostaa. Niinpä en ottanut varmuuskopiointia enkä uskonut tarvitsevani ilmaisiakaan lisäpalveluita.
  7. Viimeistelin virtuaalikoneen luomisen valitsemalla, kuinka monta konetta haluan, ja antamalla valitulle määrälle virtuaalikoneita julkisesti näkyvät nimet (hostname). Koska minun oli tarkoitus luoda vain yksi virtuaalikone, en kokenut tarvitsevani hashtageja sen tunnistamiseen.
  8. Koska kyseessä oli ensimmäinen projektini DigitalOceanissa, projekti oli valittu puolestani. Niinpä vein virtuaalikoneen luomisprosessin loppuun klikkaamalla Create Droplet.

Noin minuutin odottelun jälkeen DigitalOcean oli luonut valintojeni mukaisen virtuaalikoneen ja ilmoitti myös sen IP-osoitteen:

Virtuaalipalvelimen tai -koneen vuokraus oli hoidettu, ja enää jäljellä oli domainnimen vuokraaminen. Palasin GitHubin Student Developer Pack -sivulle ja annoin Namecheapin käyttää GitHubin tunnuksiani kirjautumisessani palveluun (Get access by connecting your GitHub account on Namecheap). Sen jälkeen nappasin vielä alennuskoodin, jolla saisin .me-päätteisen domainin käyttööni maksutta vuodeksi.

Namecheapin alennuskoodin alla olevaa linkkiä käyttäessäni päädyin Namecheapin verkkosivuille siten, että ostoskoriini oli valmiiksi lisätty maksullisia tuotteita. Niinpä tyhjensin ostoskorin ja jatkoin ensimmäisen sinisen linkin (Get access by connecting your GitHub account on Namecheap) kautta asiointia osoitteessa nc.me:

Syötin kenttään haluamasi domainnimen eli verkko-osoitteen ja painoin find-nappia. Valitettavasti .me-päätteiset domainit etunimelläni ja lempinimilläni oli jo varattu, joten ei auttanut kuin ottaa domain kokonimelläni:

Klikkaamalla Add-nappia sain domainin ostoskoriini, jolloin ostoskoriin tuli näkyviin, että domain susannalehto.me olisi saatavana ilmaiseksi yhden vuoden ajaksi. Olin tähän tyytyväinen ja klikkasin vihreää nappia Complete order. Tämän jälkeen valitsin vielä uudelleen vaihtoehdon, että haluan GitHubin opiskelijajäsenyyden takia domainini ilmaiseksi, ja tämän takia syötin vielä Haaga-Helian sähköpostini opiskelusähköpostiosoitetta kysyttäessä. Viimeistelin tilauksen klikkaamalla sivun alareunassa nappia Finish up.

Tämän jälkeen päädyin sivulle, jossa minun piti joko kirjautua Namecheapiin tai rekisteröityä käyttäjäksi. Näköjään en voinutkaan käyttää GitHubin tunnuksia Namecheapiin kirjautumiseen, joten rekisteröin itseni uudeksi käyttäjäksi.

Käyttäjäksi rekisteröityminen osoittautui odotettua hankalammaksi: Ensin Namecheap ei hyväksynyt Haaga-Helian sähköpostiosoitettani, joka oli sen mielestä väärää muotoa. Kun sitten yritin rekisteröityä toisella sähköpostiosoitteellani, Namecheap ilmoitti, että käyttäjäni on jo olemassa. Kun yritin kirjautua sisään Namecheapiin, sain ilmoituksen, etteivät käyttäjätunnus ja salasana täsmää. Tajusin, että rekisteröitymisen yhteydessä saamani virheilmoitukset eivät olleet kertoneet kaikkea: toinen sähköpostiosoitteeni oli siis hyväksytty eikä siitä tullut enää virheilmoitusta, mutta käyttäjätunnukseni vaati vielä viilausta, koska Namecheapin asiakkaani oli jo joku toinen samalla tunnuksella. Kun lopulta keksin tunnuksen, joka ei ollut vielä varattu, sain vihdoin vietyä rekisteröinnin loppuun ja yhteenvedon tilauksesta, joka piti vielä kerran vahvistaa:

Käyttäjätunnusten luomisen jälkeen Namecheap kiitti asianmukaisesti palvelujensa valitsemisesta ja kehotti vielä yhdistämään GitHubin käyttäjätilin omaansa. Tein työtä käskettyä ja nappia Setup your GitHub account klikkaamalla tehtävä oli hoidettu.

Tarkistin vielä, että tunnukseni tosiaan toimivat, ja kirjauduin hallintapaneeliin Namecheapin etusivun kautta. Syötin sähköpostiini lähetetyn verifiointikoodin, jonka jälkeen pääsin hallintanäkymään:

Näin sain onnistuneesti vuokrattua myös oman domainnimen.

Lopuksi piti vielä ohjata domainnimi susannalehto.me osoittamaan DigitalOceanilta hankitulle virtuaalipalvelimelle. Avasin Namecheapin hallintapaneelin vasemman reunan linkkipalkista ensin sivun Domain List, sitten domainin susannalehto.me kohdalla klikkasin Manage-nappia ja avautuvasta hallintasivusta valitsin vielä Advanced DNS -välilehden. Listalla Host records on turhia tiedostoja (tyyppi ”A Record”), jotka saa kaikki poistaa, samoin listan viimeisenä olevan tiedoston nimeltä ”CNAME Record”.

Poistin kaikki viisi Host records -listalla ollutta tiedostoa. Sitten tein uuden tiedoston, jonka on tarkoitus ohjata domainnimi virtuaalipalvelimeni IP-osoitteeseen. Klikkasin punaista tekstiä Add new record ja lisäsin uudet tiedostot, joiden arvoksi (value) asetin DigitalOceanin virtuaalipalvelimen IP-osoitteen ja TTL-sarakkeeseen arvoksi 5 minuuttia, jotta muutettuja tietoja haettaisiin 5 minuutin välein. Vihreästä väkäsestä tallensin syöttämäni tiedot kyseiselle riville.

Kun molemmat ”A Record” -rivit oli tallennettu, domain susanna.me oli ohjattu osoittamaan virtuaalipalvelimeni IP-osoitteeseen 188.166.4.6.

d) Palvelin suojaan palomuurilla

Kirjoitan raportit Windows-tietokoneella, mutta Linuxin käyttämistä vaativia tehtäviä varten avaan aina toisen tietokoneeni, jolle on asennettu Debianin käyttöjärjestelmä. Debianissa avasin terminaalin ja yritin ottaa SSH-yhteyden virtuaalipalvelimeeni IP-osoitteessa 188.166.4.6. Käytin tähän terminaalissa komentoa

$ ssh root@188.166.4.6

Minulta kysyttiin, olenko ihan varma, että haluan ottaa yhteyttä, ja vastasin kyllä. Sen jälkeen syötin DigitalOceanin virtuaalipalvelimelle antamani salasanan. Tämän jälkeen yhteys saatiin avattua onnistuneesti.

Koska käytin virtuaalipalvelintani ensimmäistä kertaa, hain tiedot päivityksistä koneen terminaalin kautta asianmukaisesti:

$ sudo apt-get update

Sen jälkeen asensin palomuurin komennolla

$ sudo apt-get install ufw

Lopuksi tein vielä palomuuriin reiän porttia varten komennolla

$ sudo ufw allow 22/tpc

ja laitoin palomuurin päälle komennolla

$ sudo ufw enable

Näin virtuaalipalvelin oli saatu suojattua palomuurilla. (Karvinen 2016)

e) Kotisivut palvelimelle

Tehtävänä oli asentaa DigitalOceanista hankitulle virtuaalikoneelle Apache-webbipalvelin, korvata testisivu ja tehdä käyttäjälle toimiva kotisivu Internettiin.

Tein ensin virtuaalipalvelimen terminaalissa käyttäjän komennolla

$ sudo adduser suska

ja keksin käyttäjälle hyvän salasanan. Syötin käyttäjälle vain oikean nimen, muut tiedot jätin tyhjiksi.

Sitten tein käyttäjästä pääkäyttäjän komennolla

$ sudo adduser suska sudo

Kokeilin toisessa terminaalissa, toimiiko uuden käyttäjän tunnukset avaamalla ensin SSH-yhteyden virtuaalipalvelimeen ja sitten päivittämällä tiedot saatavilla olevista päivityksistä:

$ ssh suska@188.166.4.6
(siis käyttäjänimi + @ + virtuaalipalvelimen IP-osoite)
$ sudo apt-get update

Terminaalin tulosteen perusteella SSH-yhteys saatiin avattua, käyttäjätunnukset toimivat ja myös update-komento teki tehtävänsä. Tähän mennessä virtuaalipalvelin ja ensimmäisen käyttäjän tunnukset näyttivät toimivan odotetusti.

Lukitsin juuren komennolla

$ sudo usermod –lock root

Sen jälkeen kokeilin vielä domainnimeni pingaamista komennolla

$ ping susannalehto.me

Terminaali tuntui kuitenkin jatkavan pingaamista loputtomiin, joten yli sadan pingauksen (juokseva numerointi kohdassa icmp_seq) jälkeen suljin terminaalin tappaakseni prosessin:

Avasin uudestaan toisen terminaalin ja SSH-yhteyden virtuaalipalvelimelleni pääkäyttäjäksi asettamillani tunnuksilla. Sitten asensin virtuaalikoneelle saatavana olevat päivitykset ja tietoturvapäivitykset (ks. tarkemmin tehtävän f-kohta):

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get dist-upgrade

Sen jälkeen asensin virtuaalikoneelle Apache-webbipalvelimen kuten asensin sen harjoituksessa 3 Debiania käyttävälle tietokoneelleni:

$ sudo apt-get install apache2

Apache-palvelin asentui alle minuutissa. Myöhemmin testasin vielä palvelimen tilaa terminaalissa:

$ sudo systemctl status apache2

Tulosteen mukaan palvelin oli aktiivinen ja ollut käynnissä jo reilun tunnin. Tulokset vastasivat varmasti todellisuutta, sillä minulla oli välillä ollut tehtävien tekemisessä taukoa ruoanlaiton takia.

Tein vielä toisen reiän palomuuriin porttia varten:

$ sudo ufw allow 80/tcp

Kun kokeilin Firefox-selaimessa virtuaalipalvelimeni osoitetta, sain Apachen testisivun näkyviin. Tähän asti kaikki siis hyvin.

Seuraavaksi oli tarkoituksena korvata Apachen testisivu. Komennolla

$ echo Hello world! |sudo tee /var/www/html/index.html

lisäsin testisivun sijaan osoitteeseen susannalehto.me tervehdyksen: ”Hello world!”

Otin terminaalissa userdir-moduulin käyttöön ja käynnistin palvelimen uudestaan, jotta muutos tulisi voimaan heti:

$ sudo a2enmod userdir
$ sudo service apache2 restart

Loin suska-käyttäjälleni julkisen kansion public_html käyttäjäni omaan kotihakemistoon ja varmistin, että julkinen kansio tosiaan näkyi suska-nimisessä hakemistossa. Myös Firefox-selaimessa näkyi julkinen hakemisto osoitteessa susannalehto.me/~suska.

Jotta saisin tehtyä tekstitiedoston käyttäjän julkiseen hakemistoon, avasin SSH-yhteyden ja asensin ohjelman Micro, jolla voin tehdä tekstitiedostoja. Tein kaiken tämän komennoilla

$ sudo systemctl start ssh
$ sudo apt-get install micro

Menin käyttäjän julkiseen hakemistoon public_html ja tein Microlla tekstitiedoston nimeltä index.html:

$ cd public_html
$ micro index.html

Tein tiedostoon lyhyen nettisivun rungon (W3Schools) ja tallensin sen näppäinyhdistelmällä Ctrl + s. Minun piti vahvistaa tallennus vielä terminaalissa syöttämällä käyttäjän suska salasana. Tietokoneessa oli hetkellistä hitautta, minkä takia ensimmäinen salasanakysely meni pieleen, mutta toisella kerralla onnistuin syöttämään salasanan.

Kun tekstitiedosto oli tallessa, lopetin Micron käytön näppäinyhdistelmällä Ctrl + q.

Kokeilin Windows-tietokoneeni Chrome-selaimessa, miltä suska-käyttäjän kotisivut näyttävät, ja tulos oli juuri sellainen kuin html-koodin perusteella pitikin:

Käyttäjän kotisivut saatiin siis näkymiin julkisesti Internetissä.

f) Palvelimen ohjelmien päivitys

Tehtävänä oli päivittää kaikki palvelimen ohjelmat. Avasin toisen terminaalin ja SSH-yhteyden virtuaalipalvelimelleni pääkäyttäjäksi asettamillani tunnuksilla. Sitten hain tiedot saatavana olevista päivityksistä, asensin päivitykset ja sen jälkeen vielä tietoturvapäivitykset seuraavia komentoja käyttäen:

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get dist-upgrade

g) Murtautumisyritykset ilmi lokeista

Tutkin virtuaalipalvelimen lokeja terminaalissa komennolla

$ sudo less /var/log/auth.log | grep log

Tuloksena tuli valtavan pitkä lista lokitietoja, joista valitsin sshd-luvun 10540 tarkempaan tutkiskeluun:

$ sudo less /var/log/auth.log | grep 10540

Laitoin terminaalin tiedoista löytyneen IP-osoitteen hakuun sivustolla WhatIsMyIPAddress.com. (Lintula 2021) Kävi ilmi, että kiinalaisesta organisaatiosta oli yritetty ottaa yhteyttä pilvipalvelimeeni.

Tuskin oikealla ihmisellä olisi aikaa yrittää murtautua uunituoreisiin palvelimiin, joilla ei edes ole mitään kiinnostavaa sisältöä vielä olemassa. Niinpä arvelin, että palvelimeni on ollut robotin tekemän hyökkäyksen kohteena. Kiitos vahvan salasanan, murtautumisyritys jäi ainakin tässä vaiheessa pelkän yrityksen tasolle.

Terminaalin kellonaikojen perusteella robotti oli yrittänyt murtautumista palvelimelle sillä aikaa, kun tein näitä kurssin tehtäviä. Se oli kokeillut käyttäjätunnusta ”root” ja porttia 33770, mutta salasana oli ollut väärä (”Failed password –”) ja yhteys oli katkaistu (”Received disconnect –”, ”Disconnected from authenticating –”). Niinpä robotti oli jäänyt ilman saalista.

Lähteet

DigitalOcean. Luettavissa: https://www.digitalocean.com/. Luettu: 13.2.2022.

GitHub. Luettavissa: https://github.com/. Luettu: 13.2.2022.

GitHub Education. Luettavissa: https://education.github.com/. Luettu: 13.2.2022.

Karvinen, T. 2016. Instant Firewall – sudo ufw enable. Luettavissa: https://terokarvinen.com/2016/instant-firewall-sudo-ufw-enable/. Luettu: 13.2.2022.

Karvinen, T. 2017. First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS. Luettavissa: https://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean/. Luettu: 14.2.2022.

Karvinen, T. 2018. Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address. Luettavissa: https://terokarvinen.com/2018/name-based-virtual-hosts-on-apache-multiple-websites-to-single-ip-address/. Luettu: 14.2.2022.

Karvinen, T. 2022. Linux Palvelimet 2022. Kurssisivusto. Luettavissa: https://terokarvinen.com/2021/linux-palvelimet-ict4tn021-3018/. Luettu: 12. – 13.2.2022.

Lintula, T. 2021. Tehtävä h4. Kurssitehtäväraportti. Luettavissa: https://tuomaslintula.wordpress.com/2021/09/14/tehtava-h4/. Luettu: 13.2.2022.

Namecheap. Luettavissa: https://www.namecheap.com/. Luettu: 13.2.2022.

Lehto, S. 2022. Apache-weppipalvelin (h3). Kurssisivusto. Luettavissa: https://susannalehto.fi/2022/apache-weppipalvelin-h3/. Luettu: 13.2.2022.

W3Schools. HTML Tutorial. Luettavissa: https://www.w3schools.com/html/default.asp. Luettu: 13.2.2022.

WhatIsMyIPAddress.com. Luettavissa: https://whatismyipaddress.com/. Luettu: 13.2.2022.

Artikkelia on päivitetty 14.3.2022: korjattu väärinymmärrys a)-tehtävän kohdasta 3.

1 ajatus aiheesta “Teoriasta käytäntöön pilvipalvelimen avulla (h4)”

  1. Paluuviite: Komentojen automatisointi ja skriptaus (h6) - Susanna Lehto

Kommentoi

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *