Tag: ufw
Linux palvelimet – kotitehtävät 4
Linux palvelimet – kotitehtävät 4
Lähde Tero Karvinen 2017: Linux kurssi, http://terokarvinen.com
Harjoitusympäristönä Ubuntu 17.04 (Zesty Zapus) Daily Build
Harjoituskoneen tiedot:
Emolevy X79A-GD65 (8D)
Prosessori Intel(R) Core(TM) i7-3930K
16GiB RAM
Näytönohjain GeForce GTX 690
Asenna alusta lähtien LAMP. (Linux voi olla asennettu valmiiksi tai Live-USB).
AsennettinLAMP otettiin aikaa toimenpiteistä. Ensimmäinen osa on testikoneelle asennettu (L)inux Xubuntu 17.04. Seuraavaksi asennettiin Apache2 -webpalvelin.
$ sudo apt-get update $ sudo apt-get install apache2
Seuraavaksi todettiin asennuksen onnistuneen käymällä verkkoselaimella osoitteessa http://localhost, jolloin saatiin Apache2:n oletussivu näkyville. Aikaa kului 5min 30sek (toimenpiteet + raportointi).
Seuraavaksi otettiin käyttöön käyttäjän kansio palvelimella ja luotiin käyttäjälle aloitussivu. Tähän käytettiin seuraavia komentoja:
$ sudo a2enmod userdir //käyttäjän kansion käyttöönotto $ sudo service apache2 restart //apache2 -palvelun uudelleenkäynnistys $ cd //siirryttiin käyttäjän kotihakemistoon $ mkdir public_html //luotiin kansio tuleville julkisille html -tiedostoille
Linux oli asennettu testikoneelle valmiiksi ja käyttäjä (suomisim) luotu asennuksen yhteydessä. Siirtymällä osoitteeseen http://localhost/~suomisim/ päästiin kansioon, johon käyttäjän kotisivut tehtäisiin.
Palomuuri
Seuraava askel oli parantaa tietoturvaa ottamalla käyttöön palomuuri. Tähän käytettiin komentoa sudo ufw enable. Koska kokoonpanoa ei ohjattu eikä testattu etänä, jätettiin palomuuri ehjäksi eikä puhkottu siihen reikiä. Aikaa kului yhteensä 12min.
MySQL
Jatkettiin LAMP-kokoamista asentamalla MySQL -tietokantaohjelma. Samalla asennettiin seuraavissa tehtävissä tarvittavat PHP-lisäpalikat. Käytetyt komennot:
$ sudo apt-get update $ sudo apt-get -y install mysql-server mysql-client libapache2-mod-php php-mysql
MySQL -asennus kysyi Root-käyttäjän salasanaa, salasanaksi annettiin tarpeeksi monimutkainen salasana. Seuraavaksi kirjauduttiin tietokantaan, luotiin uusi tietokanta sekä käyttäjä ks. tietokannalle.
$ mysql -u root -p //käyttäjä root, -p varmistaa, että salasanaa kysytään erikseen, jotta se pysyy poissa lokeista create database suomisim character set utf8; //luotiin uusi tietokanta (suomisim) ja valittiin käytettävä merkkijärjestelmä UTF-8 grant all on suomisim.* to suomisim@localhost identified by 'sensuroitusalasana'; //annettiin käyttäjälle suomisim kaikki oikeudet tietokantaan suomisim(ja tuleviin tämän alaisiin tietokantoihin) annettua salasanaa vastaan. exit //kirjauduttiin ulos root-käyttäjältä mysql -u suomisim -p //kirjauduttiin käyttäjänä suomisim) show databases; //näytettiin tietokannat, joihin ks. käyttäjällä on oikeus
Näin luotu käyttäjä ei pysty sotkemaan muita kuin oman tietokantansa. Seuraavaksi kokeiltiin automatisoida MySQL -kirjautumisprosessi käyttäjälle suomisim.
$ exit $ cd $ nano .my.cnf //luotiin tiedosto, johon kirjattiin seuraavat kirjautumistiedot:
[client] user="suomisim" password="sensuroitusalasana" database="suomisim"
Kun tämän jälkeen ajettiin komento mysql, päästiin kirjautumaan oikeaan tietokantaan oikealla käyttäjällä ilman hidasta kirjautumisprosessia. Aikaa kului alusta yhteensä 29 minuuttia. Lopuksi otettiin vielä PHP käyttöön ja varmistettiin sen toimivuus:
PHP asennus ja testaus
$ cd /etc/apache2/ //siirryttiin apache2 asetuskansioon $ grep -ir php * //haettiin ks. kansion tiedostoista merkintöjä PHP $ sudoedit /etc/apache2/mods-available/php7.0.conf //muokattiin tiedostoa, joka löytyi edellisen haun perusteella
Tiedostosta otettiin alla olevat asetukset pois päältä lisäämällä rivien eteen kommenttimerkin #.
$ sudo service apache2 restart $ cd $ cd public_html $ nano index.php
Lisättiin index.php -tiedostoon seuraava rivi: <?php print(2+2+”\n\n”); ?>
http://localhost/~suomisim/ -sivulla näkyi PHP-koodilla kirjoitetun laskutoimituksen tulos -> PHP toimii. Kokomaisaika LAMP-harjoituksen läpikäyntiin ja raportointiin oli n. 45 minuuttia.
Tee weppisivu, joka lukee PHP:lla rivejä tietokannasta.
Harjoitukseen käytettiin edellisessä tehtävässä asennettua LAMP:ia. Aloitettiin harjoitus luomalla tietokantataulu käyttäjälle suomisim. Tämän jälkeen lisättiin tietoja ja varmistettiin, että tiedot tallentuivat tietokantaan.
$ mysql //kirjauduttiin sisään use suomisim; //valittiin oma tietokanta create table pizza(id int auto_increment primary key, name varchar(1024), taste varchar(1024)); //luotiin tietokanta pizza ja siihen arvot id, name, taste insert into pizza(name) values ('Kinkku'); //lisättiin tietokantaan pizza tietue kinkku insert into pizza(name) values ('Tonnikala'); insert into pizza(name) values ('Ananas'); update pizza set taste="Herkullinen" where name="Kinkku"; //lisättiin tietueelle kinkku arvo Herkullinen update pizza set taste="OK" where name="Tonnikala"; update pizza set taste="Menettelee" where name="Tonnikala"; select * from pizza;
Näin varmistettiin, että tietokannan tiedot ovat ajan tasalla. Seuraavaksi luotiin websivu, joka hakee tiedot tietokannasta. Harjoituksen vuoksi luotiin ja muokattiin tiedosto Geany-tekstieditorilla, joka toimi erinomaisesti. Lähteenä PHP-koodille käytettiin w3schools.com -sivua. Koodia muokattiin omaan tietokantaan soveltuvaksi alla olevan kuvan mukaisesti.
Lopputuloksena tuotantoon valmis websivu, joka hakee pizzojen tiedot MySQL -tietokannasta. Alla kuvankaappaus sivusta.
Laita liitteeksi tai linkiksi raporttiisi tällä komenolla kerätty log.txt:
tail /var/log/syslog /var/log/auth.log /etc/lsb-release /var/log/apache2/*.log /proc/uptime >log.txt
==> /var/log/syslog <==
Feb 12 20:25:30 thor anacron[1281]: Job `cron.daily’ terminated
Feb 12 20:25:30 thor anacron[1281]: Normal exit (1 job run)
Feb 12 20:27:26 thor kernel: [ 421.746964] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24564 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:27 thor kernel: [ 422.991959] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24565 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:28 thor kernel: [ 423.897291] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24566 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:29 thor kernel: [ 424.973855] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24567 PROTO=UDP SPT=1900 DPT=59052 LEN=495
==> /var/log/auth.log <==
==> /etc/lsb-release <==
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.04
DISTRIB_CODENAME=zesty
DISTRIB_DESCRIPTION=”Ubuntu Zesty Zapus (development branch)”
==> /var/log/apache2/access.log <==
==> /var/log/apache2/error.log <==
[Sun Feb 12 20:25:29.382208 2017] [mpm_prefork:notice] [pid 1442] AH00163: Apache/2.4.23 (Ubuntu) configured — resuming normal operations
[Sun Feb 12 20:25:29.382233 2017] [core:notice] [pid 1442] AH00094: Command line: ‘/usr/sbin/apache2’
==> /var/log/apache2/other_vhosts_access.log <==
==> /proc/uptime <==
461.12 5351.63
Tee pinta-alan laskuri PHP:lla. Eli käyttäjä syöttää lomakkeella (form) pellon pituuden ja leveyden, laskuri kertoo weppisivulla pellon alan.
Pinta-ala-ohjelma toteutettiin Geany-tekstieditorilla, jolla luotiin kaksi .php tiedostoa, pala.php (pääsivu) ja pala-action.php.
pala.php
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Pinta-ala-Ohjelma</title> <meta name="author" content="Simo Suominen"> <link rel="stylesheet" href="css/styles.css?v=1.0"> </head> <body> http://js/scripts.js <form action="pala-action.php" method="post"> <p>Anna pellon leveys metreissä: <input type="number" name="leveys" /></p> <p>Anna pellon pituus metreissä: <input type="number" name="pituus" /></p> <p><input type="submit" /></p> </form> </body> </html>
pala-action.php
Pellon leveys on <?php echo htmlspecialchars($_POST['leveys']); ?> metriä <p></p> Pellon pituus on <?php echo htmlspecialchars($_POST['pituus']); ?> metriä <p></p> Pellon kokonaispinta-ala on <?php $first_number = htmlspecialchars($_POST['leveys']); $second_number = htmlspecialchars($_POST['pituus']); $sum_total = $second_number * $first_number; print ($sum_total); ?> neliömetriä.
Lopputuloksena oli yksinkertainen websivu, joka kysyi käyttäjältä pellon pituutta ja leveyttä ja laski niiden perusteella pellon pinta-alan.
Palvelinten hallinta kotitehtävät 1 (Syksy 2017)
October 25, 2017
Palvelinten hallinta
No Comments
Simo Suominen
Palvelinten hallinta kotitehtävät 1 (Syksy 2017)
Lähde Tero Karvinen 2017: Palvelinten Hallinta, http://terokarvinen.com
Harjoitusympäristönä asennettu Xubuntu 16.04, Xenial Xerus
Harjoituskoneen tiedot:
Emolevy X79A-GD65 (8D)
Prosessori Intel(R) Core(TM) i7-3930K
16GiB RAM
H1. Asenna jokin muu demoni kuin Apache. Raportoi, miten rakensit, selvitit ja testasit kunkin osan (esim. sudo puppet resource, puppet describe, lähteet…). Julkaise myös modulisi lähdekoodi niin, että sen voi helposti ottaa käyttöön.
Osa 1: Packet
Harjoituksen tavoitteeksi otettiin UFW-palomuurin asennus ja asetusten muokkaus Puppetin avulla. UFW (Uncomplicated Firewall) on helppokäyttöiseksi tarkoitettu työkalu Netfilter-palomuurin hallintaan. Harjoitus aloitettiin poistamalla testikoneesta UFW ja sen asetukset purge-komennolla.
Seuraavaksi luotiin skriptin avulla uusi Puppet-moduuli ufwmod ja tarvittavat kansiot ja tiedostot. Luodut tiedostot ja kansiot näkyvät raportin lopussa olevassa kuvassa (readme.md -tiedosto ei ole tarpeellinen). Jatkettiin harjoitusta muokkaamalla luotua init.pp -tiedostoa. Ensimmäiseksi lisättiin moduuliin asennettava paketti ufw.
Seuraavaksi varmistettiin, että luotu moduuli toimi oikein. Moduuli kopioitiin /etc/puppet/modules -kansioon ja ajettiin alla olevalla komennolla.
Moduulin käynnistys sujui ongelmitta ja UFW asennus varmistettiin komennolla sudo ufw status. UFW oli asennettu, mutta tilassa inactive, sillä ohjelman käyttöönotto vaatii erillisen komennon.
Osa 2: Exec
Harjoitusta jatkettiin poistamalla UFW asennus koneelta ja lisäämällä init.pp -tiedostoon komento, jolla UFW otettaisiin käyttöön asennuksen jälkeen.
Tiedostoon lisättiin komento ufw enable, joka vaatii, että paketti ufw on asennettuna. Moduuli todettiin toimivaksi, sillä paketin asennus onnistui ja UFW oli tilassa active.
Osa 3: File
Seuraavaksi tehtiin reikiä palomuuriin, jotta haluttu liikenne pääsisi muurista läpi. Ubuntu Wikin mukaan käyttäjän tekemät asetukset tallentuvat tiedostoihin /etc/ufw/user.rules ja user6.rules.
Harjoitusta varten päätettiin avata portit 22, 80 ja 443 TCP. Muutokset tehtiin ensin käsin, jonka jälkeen asetustiedostoista otettiin kopiot moduulin templates -kansioon. Moduuliin lisättiin tämän jälkeen osa, joka siirtää asetustiedostot oikeaan paikkaan kun moduuli ajetaan.
Seuraavaksi muokattiin jälleen init.pp -tiedostoa.
Moduuli toimi ongelmitta, mutta portit pysyivät kiinni. Moduuliin päätettiin lisätä palomuurin service, joka voitiin potkaista käynnistymään uudelleen aina, kun asetustiedostoja muokataan.
Osa 4: Service
Muokattiin init.pp -tiedostoa (toivottavasti) viimeistä kertaa. Tiedostoon lisättiin viittaus UFW palveluun, joka vaatii UFW paketin asennuksen. Asetustiedostojen siirtoon lisättiin huomautus palveluun, joka käynnistyy uudelleen kun asetustiedostot siirretään.
Moduulin testaamista varten UFW poistettiin jälleen, moduuli siirrettiin /etc/puppet/modules -kansioon ja ajettiin skriptin avulla (tai raportin alussa käytetyllä komennolla). Moduulin ajon jälkeen palomuurin tilanne tarkistettiin sudo ufw status -komennolla.
Voitiin todeta, että moduuli toimii niin kuin pitääkin. Asetustiedostojen syntaksi oli aika yksinkertainen, joten uusien sääntöjen luominen onnistuu ilman, että niitä tehdään ensin käsin.
Alla olevassa kuvassa näkyy moduulin rakenne ja tarvittavat tiedostot + ylimääräinen readme.md -tiedosto.
Lopuksi projekti vietiin GitHubiin käyttäjän omaan puppet-repositoryyn. Koska moduulia muokattiin käyttäjän kotihakemistossa ja repon omassa kansiossa, tiedostoja ei tarvinnut siirrellä tässä vaiheessa mihinkään.
Moduuli löytyy Githubista Linkki
Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html
Simo Suominen
linuxpuppetufwxubuntu