Linux Palvelimena: Tehtävä 6

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
Pääsivu
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.
Käyttöjärjestelmän valinta

Seuraavana oli vuorossa virtuaalipalvelimen koko. Valitsin vaihtoehdoista pienimmän, koska koneen oli tarkoitus toimia vain harjoitustehtävien tekemisessä.
Virtuaalipalvelimen koko

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ä.
Storage Blocks & Palvelimen sijainti

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.
Loppuvaihtoehdot ja palvelimen nimi

Lopuksi painoin Create-painiketta.

Muutaman minuutin jälkeen palvelin oli luotuna ja käytettävissä annetuilla tiedoilla
Valmis palvelin

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.

screen-shot-2016-09-30-at-20-49-52

Tämän jälkeen kysyttiin sähköpostiosoitetta, joka toimii ssl-sertifikaatin osalta kontaktina.

screen-shot-2016-09-30-at-20-50-09

Ehdot piti tietenkin myös hyväksyä.

screen-shot-2016-09-30-at-20-50-20

Vielä piti päättää halutaanko ottaa käyttöön vain ssl-suojaus vai jättää myös normaalit sivut toimintaan.

screen-shot-2016-09-30-at-20-50-42

Lopuksi järjestelmä kertoi asennuksen onnistuneen.

screen-shot-2016-09-30-at-20-50-56

Testasin vielä toiminnan avaamalla sivuston internet-selaimella ja varmistamalla sertifikaatin tilan

Sertifikaatin tiedot

Lähteet

14 total views, 1 views today