Tehtävä
h6.
Kokeile virtuaalipalvelinta (VPS). Voit vuokrata palvelimen esimerkiksi Linodelta, Amazonilta, DigitalOceanilta, OVH:lta tai monista muista paikoista. Amazonilla saattaa olla ilmainen kokeilupaketti, DigitalOcean on halvin. Vaihtoehto: jos et jostain syystä halua vuokrata virtuaalipalvelinta, voit kokeilla tehdä oman vagrantilla.
Laita monta DNS-nimeä samaan IP-osoitteeseen. Apache Name Based Virtual Hosting.
========================
Vaikeampi vaihtoehtoinen tehtävä, jos olet jo aiemmin hankkinut virtuaalipalvelimen ja asettanut Name Based Virtual Hostingin Apachelle: Tee Python Flaskista tuotantoasennus ja kokeile sitä.
Lähde http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016
Virtuaalipalvelin
Tämä raportti perustui tilanteeseen, jossa oli jo olemassa DigitalOceanin käyttäjätili ja tilillä oli määritettynä ennestään maksutiedot.
Luominen
DigitalOcean https://www.digitalocean.com/ kirjautumisen jälkeen oltiin tilanteessa
Aloitin virtuaalipalvelimen luomisen valitsemalla Create Droplet
Ensimmäisenä piti valita mikä käyttöjärjestelmä haluttiin käyttöön. Valitsin tästä vaihtoehdon Ubuntu 16.04.1 x64.
Seuraavana oli vuorossa virtuaalipalvelimen koko. Valitsin vaihtoehdoista pienimmän, koska koneen oli tarkoitus toimia vain harjoitustehtävien tekemisessä.
Palvelimelle olisi myös voinut valita lisätallennustilaa, mutta tätä ei tarvittu. Valitsin palvelimen sijainniksi Frankfurtin, koska se on kohtuullisen matkan päässä Suomesta, eikä tällä palvelimella ollut muita käyttäjiä kuin minä.
Ennen palvelimen luomista olisi vielä ollut mahdollista ottaa käyttöön lisäpalveluita, mutta näitä ei tässä tapauksessa tarvittu. SSH avainta en myöskään tässä yhteydessä lähtenyt ottamaan käyttöön. Palvelimen nimeksi valitsin koulu.matto.guru.
Lopuksi painoin Create
-painiketta.
Muutaman minuutin jälkeen palvelin oli luotuna ja käytettävissä annetuilla tiedoilla
Palvelimen suojaaminen
Koska palvelin sai julkisen ip-osoitteen 46.101.147.244
piti seuraavaksi ottaa käyttöön suojausmekanismit.
Ensimmäiseksi palvelimelle piti kirjautua sähköpostiin tulleilla tunnuksilla.
$ ssh root@46.101.147.244 The authenticity of host '46.101.147.244 (46.101.147.244)' can't be established. ECDSA key fingerprint is SHA256:naCKyr6/0npNt6VVQ1Q/lsgpNAQxakJw75Drf81erlE. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '46.101.147.244' (ECDSA) to the list of known hosts. root@46.101.147.244's password: You are required to change your password immediately (root enforced) Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 0 packages can be updated. 0 updates are security updates. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Changing password for root. (current) UNIX password: Enter new UNIX password: Retype new UNIX password:
Kirjautuminen edellytti myös salasanan vaihtamista.
Seuraavaksi otin palvelimella palomuurin käyttöön. Tätä ennen piti kuitenkin sallia SSH-liikenne palvelimen palomuurin ohi, jotta ylläpito oli mahdollista.
root@koulu:~# ufw allow 22/tcp Rules updated Rules updated (v6) root@koulu:~# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Seuraavaksi loin uuden käyttäjän matto, ja lisäsin käyttäjälle ylläpito-oikeudet.
root@koulu:~# adduser matto perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). Adding user `matto' ... Adding new group `matto' (1000) ... Adding new user `matto' (1000) with group `matto' ... Creating home directory `/home/matto' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for matto Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y root@koulu:~# adduser matto sudo perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). Adding user `matto' to group `sudo' ... Adding user matto to group sudo Done. root@koulu:~# adduser matto adm perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). Adding user `matto' to group `adm' ... Adding user matto to group adm Done.
Seuraavaksi testasin matto-käyttäjän kirjautumisen koneelle, avaamalla uuden terminaalin
$ ssh matto@46.101.147.244 matto@46.101.147.244's password: Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 0 packages can be updated. 0 updates are security updates. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo". See "man sudo_root" for details. matto@koulu:~$ sudo apt-get update [sudo] password for matto:
Kirjautuminen onnistui hienosto joten lopuksi estin root-kirjautumisen koneelle
root@koulu:~# usermod --lock root
Tämän testaus onnistui kirjautumalla ulos ja yrittämällä uudelleen kirjautumista
root@koulu:~# exit logout Connection to 46.101.147.244 closed. $ ssh root@46.101.147.244 root@46.101.147.244's password: Permission denied, please try again. root@46.101.147.244's password: Permission denied, please try again. root@46.101.147.244's password: Permission denied (publickey,password).
Lopuksi asensin suojausmekanismiksi palvelimelle fail2ban ohjelmiston. Olen aiemmin havainnut, että tuolla ohjelmalla voidaan pienentää palvelimen kuormaa huomattavasti.
matto@koulu:~$ sudo apt-get install fail2ban Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal python3-pyinotify whois Suggested packages: mailx monit python-doc python-tk python2.7-doc binutils binfmt-support python-pyinotify-doc The following NEW packages will be installed: fail2ban libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal python3-pyinotify whois 0 upgraded, 10 newly installed, 0 to remove and 31 not upgraded. Need to get 4193 kB of archives. After this operation, 18.1 MB of additional disk space will be used. Do you want to continue? [Y/n] Y
Tuon osalta perusasetukset ovat riittävät, joten otin sen vain käyttöön komennolla
matto@koulu:~$ sudo service fail2ban start
perl: warning: Setting locale failed.
Olin törmännyt vastaavaan virheeseen aikaisemminkin ja tuo virheilmoitus tulee usein, jossei tilannetta korjata. Tämän vuoksi muutin tiedostoa /etc/default/locale
komennolla
matto@koulu:~$ sudo nano /etc/default/locale
Tiedoston sisällöksi laitoin
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
Palvelimen nimiasetukset
Jotta tuo palvelimen nimi koulu.matto.guru
saatiin toimimaan ilman, että tarvitsi muistaa tuota ip-osoitetta, kävin muuttamassa Gandin asetuksia.
Käytännössä Zone-tiedostoon piti lisätä rivit
koulu 10800 IN A 46.101.147.244 *.koulu 10800 IN A 46.101.147.244
Testasin toiminnan seuraavana päivänä (koska nimipalvelinten päivittyminen kestää useamman tunnin) avaamalla ssh yhteyden nimen, enkä ip:n mukaan.
Apache
Seuraavaksi asensin apachen komennolla
matto@koulu:~$ sudo apt-get install apache2
Seuraavaksi määritin käyttöön käyttäjien omat hakemistot
matto@koulu:~$ sudo a2enmod userdir Enabling module userdir. To activate the new configuration, you need to run: service apache2 restart matto@koulu:~$ sudo service apache2 restart
Ennen testausta piti vielä avata palomuuriin portti komennolla
matto@koulu:~$ sudo ufw allow 80/tcp Rule added Rule added (v6)
Testasin pääsyä oman työasemani internet selaimella (Chrome Version 53.0.2785.116 (64-bit)) ja ip-osoitteella sain auki testisivun.
Sivut
Ensin loin käyttäjälle kansion internet sivuja varten:
matto@koulu:~$ mkdir public_html
Kansion alle tein kolme alikansiota eri sivuille
matto@koulu:~/public_html$ mkdir sivusto1 matto@koulu:~/public_html$ mkdir sivusto2 matto@koulu:~/public_html$ mkdir sivusto3
Lopuksi tein testausta varten jokaiseen alikansioon tiedoston index.html, sisällöltään
Sivusto X toimii!
Jossa tuo X on sivuston numero.
Lopuksi rakenne oli siis tällainen
matto@koulu:~/public_html$ tree . ├── sivusto1 │ └── index.html ├── sivusto2 │ └── index.html └── sivusto3 └── index.html 3 directories, 3 files
Seuraavaksi täytyi kertoa palvelimelle, mitä sivustoja tuolta käytetään.
matto@koulu:~/public_html$ cd /etc/apache2/sites-available/ matto@koulu:/etc/apache2/sites-available$ sudo cp 000-default.conf sivusto1.conf [sudo] password for matto: matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto1.conf matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto2.conf matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto3.conf
sivusto1.conf sisältö
<VirtualHost *:80> ServerName koulu.matto.guru ServerAlias koulu.matto.guru ServerAdmin matto@matto.guru DocumentRoot /home/matto/public_html/sivusto1 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
sivusto2.conf
<VirtualHost *:80> ServerName sivu2.koulu.matto.guru ServerAlias sivu2.koulu.matto.guru ServerAdmin matto@matto.guru DocumentRoot /home/matto/public_html/sivusto2 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
sivusto3.conf
<VirtualHost *:80> ServerName sivu3.koulu.matto.guru ServerAlias sivu3.koulu.matto.guru ServerAdmin matto@matto.guru DocumentRoot /home/matto/public_html/sivusto3 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Lopuksi otettiin sivut käyttöön
matto@koulu:/etc/apache2/sites-available$ sudo a2dissite 000-default.conf Site 000-default disabled. To activate the new configuration, you need to run: service apache2 reload matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto1.conf Enabling site sivusto1. To activate the new configuration, you need to run: service apache2 reload matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto2.conf Enabling site sivusto2. To activate the new configuration, you need to run: service apache2 reload matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto3.conf Enabling site sivusto3. To activate the new configuration, you need to run: service apache2 reload matto@koulu:/etc/apache2/sites-available$ sudo service apache2 reload Lopuksi toimivuuden sai testattua avaamalla osoitteet http://koulu.matto.guru http://sivu1.koulu.matto.guru http://sivu2.koulu.matto.guru
Extra Bonus
Extra bonuksena asensin tuolle palvelimelle käyttöön ssl sertifikaatit.
Ensin valmisteltiin suojattu sivusto määrittämällä /etc/apache2/sites-available
-kansiossa olevasta default-ssl.conf
-tiedostosta versio:
<IfModule mod_ssl.c> <VirtualHost _default_:443< ServerAdmin matto@matto.guru DocumentRoot /home/matto/public_html/sivusto1 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on <FilesMatch "\.(cgi|shtml|phtml|php)$"< SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin< SSLOptions +StdEnvVars </Directory< </VirtualHost< </IfModule<
Tämän jälkeen avattiin palomuurista portti 443
matto@koulu:/etc/apache2/sites-available$ sudo ufw allow 443/tcp Rule added Rule added (v6)
Asennettiin let’s Encrypt Lähde:https://certbot.eff.org/#ubuntuxenial-apache
matto@koulu:~$ sudo apt-get install python-letsencrypt matto@koulu:~$ sudo letsencrypt --apache The requested apache plugin does not appear to be installed matto@koulu:~$ sudo apt-get install python-letsencrypt-apache matto@koulu:~$ sudo letsencrypt --apache
Järjestelmä kysyi mille sivuille otetaan https käyttöön. Valitsin nyt vain tuon pääsivun.
Tämän jälkeen kysyttiin sähköpostiosoitetta, joka toimii ssl-sertifikaatin osalta kontaktina.
Ehdot piti tietenkin myös hyväksyä.
Vielä piti päättää halutaanko ottaa käyttöön vain ssl-suojaus vai jättää myös normaalit sivut toimintaan.
Lopuksi järjestelmä kertoi asennuksen onnistuneen.
Testasin vielä toiminnan avaamalla sivuston internet-selaimella ja varmistamalla sertifikaatin tilan
Lähteet
- http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016
- https://www.digitalocean.com/
- http://flask.pocoo.org/docs/0.11/installation/
- https://certbot.eff.org/#ubuntuxenial-apache
13 total views, no views today