PC-BSD jails: vytvoření a zprovoznění serverových aplikací a služeb

Jaromír Vojtaj 5. 8. 2013

V několika dílech předchozího seriálu jsme se zaměřili na jaily poměrně obecně. Jde o velmi užitečný koncept, který moderní BSD systémy nabízí. V příštích několika dílech nového seriálu si společně ukážeme konkrétní možnosti jejich využití jako základny k provozu serverových aplikací a služeb.

V předcházejícím seriálu byly poměrně podrobně popsány způsoby vytvoření, administrace a zálohování jailů. Z tohoto textu by asi měly být zřejmé přínosy při použití jailů namísto instalace některých aplikací (hlavně „serverového“ charakteru) na hostitelském stroji. Nebudu zde již uvedené výhody uvádět, ale rovnou nastíním, které jaily jsem zatím uvedl do chodu a připravil k použití. Jejich zprovoznění nemělo vždy jenom čistě „užitný“ účel, ale snažil jsem se do nich zapojit ještě nějaké další nadstavby, které by šly případně využít i při instalaci stejných aplikací přímo na nějaký fyzický či virtuální stroj.

První skupinu tvoří databázové servery, konkrétně pak PostgreSQL a dvě „náhrady“ MySQL – Percona a MariaDB. K nim by se dal zařadit i jail, kde je možné provozovat databázové administrační aplikace Adminer a phpMyAdmin. Obě běží na serveru Apache, kterému je předřazena reverzní proxy Nginx.

Další jail obsahuje webový server Apache, PHP a cache proxy varnish. Je určen k provozu webových aplikací v PHP (provozní i zkušební). Pak jsou další dva jaily, které obsahují aplikační servery, konkrétně Apache Tomcat a Oracle Glassfish. Obsažen je i jail s již uvedeným XMPP serverem Openfire.

Jako další mám zatím zprovozněnou zkušební instalaci DMS systému LogicalDOC a jail pro vývoj v PHP včetně frameworků Prado a Yii.

Posledním je zatím trochu odlišný jail (všechny výše uvedené jaily jsou typu Traditional, tento je typu Ports), který je vyloženě experimentální a obsahuje vývojové prostředí IntelliJ IDEA. Tento typ jailu totiž umožňuje využití X systému hostitelského stroje a následné spouštění GUI aplikací.

V následujících dílech si podrobněji popíšeme postupy a operace, které vedou k zprovoznění uvedených jailů a které je možné po menších úpravách přenést na fyzické či virtuální servery s TrueOS a případně po větších úpravách i na jiné Unixové a Linuxové systémy.

Kompletní zprovoznění jailu můžeme rozdělit na čtyři základní kroky:

  1. příprava jailu k instalaci programů a aplikací
  2. instalace programů a aplikací
  3. lokální zprovoznění a zpřístupnění služby/služeb jailu vzdáleně
  4. úprava jailu pro vzdálený přístup ke službám

Kroky 1 a 4 jsou pro všechny jaily prakticky stejné a bude proto možné je popsat jednorázově a při popisu konkrétního jailu se na ně pouze odkázat. Pokud nebude uvedeno jinak, všechny dále uvedené příkazy se zadávají do administrátorské konzole příslušného jailu.

Krok 1 – příprava jailu k instalaci programů a aplikací

Programy a aplikace je v PC-BSD možné instalovat trojím způsobem – přes balíčkovací nástroj PBI, pomocí binárních balíčků a systému PKGNG a prostřednictvím FreeBSD portů. První z nich se přípravy jailů netýká, takže nám zbudou dva způsoby. Je samozřejmě možná i kombinace PKGNG + Porty.

a) instalace binárních balíčků přes PKGNG
Tento krok se skládá ze sedmi velmi jednoduchých operací:

  1. a) vytvořit jail příkazem # sudo warden create jail-name –ipv4 x.y.z.w
  2. a) spustit jail příkazem # sudo warden start jail-name
  3. a) otevřít konzolu jailu # sudo warden chroot jail-name
  4. a) spustit příkaz # pkg update
  5. a) upravit soubor /usr/local/etc/pkg.conf a vložit do něj aktuální zrcadlo s repozitáři
  6. a) znovu spustit příkaz # pkg update
  7. a) spustit příkaz # pkg upgrade

b) instalace prostřednictvím FreeBSD portů
Tento krok se skládá ze čtyř velmi jednoduchých operací:

  1. b) vytvořit jail příkazem # sudo warden create jail-name –ipv4 x.y.z.w
  2. b) spustit jail příkazem # sudo warden start jail-name
  3. b) otevřít konzolu jailu # sudo warden chroot jail-name
  4. b) spustit příkaz # portsnap fetch extract update

Krok 4 – úprava jailu pro vzdálený přístup ke službám

Uvedenou úpravou se myslí nastavení firewalu – konkrétně aplikace PF (Packet Filter). Některé informace již byly uvedeny v předchozím díle jails, takže to bude trochu opakování. Pro prvotní zkoušku vzdáleného přístupu ke službám jailu je vhodné FW vypnout, aby bylo možné se zaměřit pouze na funkčnost samotné hlavní služby jailu.
Příkaz pro zastavení FW je:  # service pf onestop

Pokud zkouška proběhne bez problémů, je možné nastavit FW ve třech krocích:

4a) upravit soubor /etc/rc.conf a vložit do něj sadu příkazů:

pf_rules="/etc/pf.conf"
pf_enable="YES"
pf_flags=""
pflog_logfile="/var/log/pflog"
pflog_enable="YES"
pflog_flags=""

4b) vytvoří se konfigurační soubor # touch /etc/pf.conf

4c) nastaví se pravidla FW. Toto nastavení může být velmi jednoduché, ale také velmi složité a sofistikované. My si ukážeme několik jednodušších variant. Je možné zjednodušeně říct, že se pravidla dělí na tři základní skupiny: obecná pravidla, pravidla pro odchozí komunikaci a pravidla pro příchozí komunikaci. Jako příklad uvedu dvě varianty obecných pravidel:

set block-policy return
set skip on lo0
block all

set skip on lo0
set block-policy return
scrub in all
antispoof quick for lo0 inet
block in from no-route to any
block in log

Odchozí komunikaci nebudeme komplikovat ani blokovat a povolíme jí v celém rozsahu pravidlem

pass out keep state

Příchozí komunikaci můžeme také povolit v celém rozsahu (hlavně pro zkušební fázi) jednoduchým pravidlem

pass quick on em0 all

Pak jsou dva typy pravidel pro povolení pouze určitých portů (ve většině případů stačí povolit pouze jeden jediný příchozí port). Toto pravidlo používám pro databázové servery:

pass in on em0 proto tcp from x.y.z.w/24 to any port 3306 flags S/SA synproxy state

Pro ostatní případy pak používám tato podobná pravidla:

pass in on em0 proto tcp from x.y.z.w/24 to any port 9090 keep stat
pass in quick on em0 proto tcp from  x.y.z.w /24 to (em0) port 22 keep state

O této problematice by se dalo psát a také diskutovat velmi dlouho, ale není to primární zaměření článku. Takže na závěr uvedu pouze odkaz na popis celé systému PF: OpenBSD.org

Jenom pro doplnění dám ještě do přílohy pf-rules.txt jeden soubor pravidel z webu. To aby bylo zřejmé, že je možné nastavit pravidla opravdu velmi komplexní a složitá.

A. MariaDB a Percona

Oba tyto databázové servery jsou klony MySQL a v jeho dnešní nejasné budoucnosti si razí čím dál víc cestu do Unix a Linux distribucí. Postup pro jejich zprovoznění popíšeme najednou, protože se liší pouze instalovanými balíčky. Na začátku bych upozornil, že výběr mezi oběma možnostmi nebude úplně jednoduchý. Zatím jsou si oba projekty velmi podobné. Co je asi hlavní, jsou jejich databázové enginy. Jak je ale vidět z přílohy db-engines.txt, ani zde nejsou příliš veliké rozdíly. Defaultní a asi nejvíce využívaný engine InnoDB je dokonce u obou stejný.

Jenom na okraj bych uvedl, že instalovat oba servery (vzhledem k tomu, že vytvářejí stejné „mysql“ prostředí) na jeden stroj by bylo asi docela složité.

A2) instalace programů a aplikací

Instalace se bude provádět pomocí PKGNG. K dispozici jsou tyto možnosti (nejsou uvedeny balíčky odpovídajících klientů):

mariadb-scripts-5.3.12 mariadb-server-5.3.12 mariadb-server-5.5.31
percona-monitoring-plugins-1.0.2 percona-server-5.5.31.30.3 percona-server-5.6.12.r60.4 percona-toolkit-2.2.3

Instalovat se budou zvýrazněné verze včetně příslušných klientů.

A3) zprovoznění a zpřístupnění služby

  • upraví se soubor /etc/rc.conf a vloží do něj další řádek:
    mysql_enable=“YES“
  • server se spustí příkazem # service mysql-server start
  • vytvoří se lokální přístup pro roota příkazem # /usr/local/bin/mysqladmin -u root password 'heslo'
  • lokálně se přihlásíme k serveru příkazem # /usr/local/bin/mysql -u root -p
  • vytvoří se nová databáze: # create database testdb;
  • vytvoří se nový uživatel testuser a přidělit mu práva k této databázi a přístup z lokální sítě:  # GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'x.y.z.%' IDENTIFIED BY 'heslo';
  • pokud by bylo nutné přidělit práva k libovolné databázi a přístup odkudkoliv, bude příkaz jiný: # GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%' IDENTIFIED BY 'heslo';
  • uživatele je možné ověřit příkazem: # select host,user,password from mysql.user;
  • odhlásíme se od serveru
  • v adresáři /usr/local/share/mysql jsou k dispozici ukázkové konfigurační soubory pro různé typy nasazení a předpokládané velikosti databáze (všechny s příponou *.cnf)
  • jeden ze souborů se vybere a zkopíruje: # cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf
  • server se restartuje pro aktivaci nové konfigurace:  # service mysql-server restart
  • upraví se soubor /etc/my.cnf:
    řádek musí být zakomentovaný
    # skip networking

    přidá se nebo upraví řádek:

    bind-address=IPv4-jailu
  • znovu se restartuje server
  • nastaví se FW dle pokynů Krok 4, jediný přístupný port je 3306
  • vyzkouší se vzdálené připojení: # mysql -h IPv4-jailu -u testuser -p
  • pokud není vzdálené připojení možné, je třeba znovu projít nastavení serveru a FW a případné nedostatky doladit

Tím je databázový server nastavený pro lokální i vzdálený přístup. Server startuje automaticky při startu jailu a je tak okamžitě k dispozici. Data jsou uložená uvnitř jailu a zachovávají se při jeho zálohování. To je docela zajímavý způsob nejenom pro zálohy, ale i pro přenos na jiný systém, který jaily akceptuje.

Jako poslední informaci uvedu velikost obou jailů a exportovaných souborů.

# zfs list
NAME                            USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/jails/percona         258M  779G   657M   /usr/jails/percona

Velikost exportovaného WDN souboru je 112 MB

widgety

# zfs list
NAME                            USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/jails/mariadb         301M   435G     700M     /usr/jails/mariadb

Velikost exportovaného WDN souboru je 122 MB.

V dalším díle budeme pokračovat popisem instalace a zprovoznění PostgreSQL a prostředí pro provoz PHP aplikací pro administraci databází včetně proxy.

Našli jste v článku chybu?
DigiZone.cz: Numan Two: rozhlasový přijímač s CD

Numan Two: rozhlasový přijímač s CD

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

Vitalia.cz: Ošklivá zelenina s 10% slevou? Není to málo?

Ošklivá zelenina s 10% slevou? Není to málo?

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

DigiZone.cz: Rapl: seriál, který vás smíří s ČT

Rapl: seriál, který vás smíří s ČT

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Podnikatel.cz: „Lex Babiš“ Babišovi paradoxně pomůže

„Lex Babiš“ Babišovi paradoxně pomůže

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...