Bezpečnosť

Pri inštalácii, nasadení a používaní akéhokoľvek druhu počítačového systému, je vždy potrebné myslieť na bezpečnosť. Hoci nová inštalácia Ubuntu je relatívne bezpečná na okamžité použitie v sieti Internet, je dôležité vedieť, ako v Ubuntu jednotlivé bezpečnostné systémy fungujú, aby sme ich mohli prispôsobiť na konkrétne nasadenie.

Táto kapitola poskytuje prehľad tém súvisiacich s bezpečnosťou, ktoré sa týkajú Ubuntu 9.04 Server Edition a hovorí o jednoduchých opatreniach, ktoré môžeme použiť na ochranu nášho servera a siete pred ľubovoľným počtom potenciálnych bezpečnostných hrozieb.

Správa používateľov

Správa používateľov je najdôležitejšou časťou pri udržiavaní bezpečného systému. Nesprávne nastavenie  používateľov a ich privilégií často v mnohých systémoch vedie k ich napadnutiu. Preto je dôležité, aby sme pochopili, ako môžeme chrániť náš server pomocou jednoduchých a efektívnych techník správy používateľských účtov.

Kde je root?

Vývojári Ubuntu sa rozhodli kvôli bezpečnosti zakázať účet root (používateľ s najvyššími právami) v predvolenom nastavení pre všetky inštalácie Ubuntu. To neznamená, že účet root bol zrušený alebo že sa do neho nedá prihlásiť. Iba mu bolo pridelené heslo, ktoré nie je možné porovnať so zašifrovanou hodnotu, a preto sa k tomuto účtu nedá prihlásiť priamo.

Miesto priameho prihlásenia k účtu root používatelia môžu na vykonávanie administrátorských činností použiť nástroj sudo. Sudo umožňuje autorizovaným používateľom na istý čas získať práva root po zadaní svojho vlastného hesla miesto toho, aby museli zadať heslo prislúchajúce k účtu root. Táto jednoduchá, ale účinná metóda umožňuje zistiť pôvodcu každej vykonanej akcie a poskytuje administrátorovi podrobnejšie určiť, ktoré akcie môže používateľ s takýmito oprávneniami vykonať.

  • Ak kvôli nejakým dôvodom potrebujete povoliť účet používateľa root, stačí mu prideliť heslo:

    sudo passwd

    Sudo nás vyzve, aby sme zadali naše heslo a potom budeme môcť nastaviť nové heslo pre používateľa root tak, ako v nasledujúcom príklade:

    [sudo] password for username: (zadáme naše vlastné heslo)
    Enter new UNIX password: (zadáme nové heslo pre používateľa root)
    Retype new UNIX password: (znova zadáme heslo pre používateľa root)
    passwd: password updated successfully
  • Ak chceme účet používateľa root zablokovať, použijeme nasledujúci príkaz:

    sudo passwd -l root
  • Viac o nástroji sudo sa môžeme dozvedieť na man stránkach:

    man sudo

Prvý používateľ vytvorený inštalátorom Ubuntu je členom skupiny "admin", ktorá je v súbore /etc/sudoers zadefinovaná ako oprávnený používateľ príkazu sudo. Ak chceme niektorému ďalšiemu používateľovi povoliť prístup k oprávneniam používateľa root prostredníctvom príkazu sudo, jednoducho ho pridáme do skupiny admin.

Pridávanie a odstraňovanie používateľov

Proces správy lokálnych používateľov a skupín je jednoduchý, ale trochu sa odlišuje od ostatných operačných systémov GNU/Linux. Ubuntu a ostatné distribúcie založené na systéme Debian uprednostňujú na správu účtov balík "adduser".

  • Ak chceme pridať používateľský účet, použijeme nasledujúci príkaz a budeme odpovedať na otázky o názve účtu, hesle a ďalších identifikačných parametroch, akými sú napríklad celé meno, číslo telefónu, atď.

    sudo adduser meno_pouzivatela
  •  Ak chceme odstrániť používateľský účet a jeho primárnu skupinu, použijeme nasledujúci príkaz:

    sudo deluser meno_pouzivatela

    Odstránenie účtu nie je podmienené odstránením domovského priečinka. Je na nás, či priečinok zmažeme ručne alebo si ho ponecháme pre opätovné použitie.

    Každý používateľ, ktorý bude mať rovnaké číslo UID alebo GID ako predchádzajúci majiteľ, bude mať do tohto priečinka prístup, ak tomu nezabránime.

    AK budeme chcieť zmeniť hodnoty UID/GID na nejaké presnejšie, napríklad na rovnaké ako má root, a presunúť priečinok inam, aby v budúcnosti nenastali konflikty, zadáme tieto príkazy:

    sudo chown -R root:root /home/meno_pouzivatela/
    sudo mkdir /home/archivovani_pouzivatelia/
    sudo mv /home/meno_pouzivatela /home/archivovani_pouzivatelia/
  • Ak chceme dočasne uzamknúť alebo odomknúť používateľský účet, použijeme tieto príkazy:

    sudo passwd -l meno_pouzivatela
    sudo passwd -u meno_pouzivatela
  • Ak chceme pridať alebo vytvoriť skupinu, použijeme nasledujúce príkazy:

    sudo addgroup meno_skupiny
    sudo delgroup meno_skupiny
  • Ak chceme pridať používateľa do skupiny, použijeme nasledujúci príkaz:

    sudo adduser meno_pouzivatela meno_skupiny

Bezpečnosť používateľských profilov

Pri vytváraní nového používateľského účtu nástroj adduser vytvorí nový domovský priečinok  /home/meno_pouzivatela. Profil sa vymodeluje podľa obsahu priečinka /etc/skel, ktorý obsahuje všetky základné komponenty profilu.

Ak náš server bude domovom pre viacero používateľov, mali by sme venovať zvýšenú pozornosť nastaveniu oprávnení k používateľským priečinkom. V predvolenom stave sú domovské priečinky v Ubuntu vytvorené s všeobecnými právami pre čítanie/spúšťanie. To znamená, že všetci používatelia môžu prezerať a pristupovať k obsahu domovských priečinkov ostatných používateľov. To pre naše prostredie nemusí byť vhodné.

  • Ak chceme overiť, aké sú k priečinku pridelené oprávnenia, použijeme nasledujúci príkaz:

    ls -ld /home/meno_pouzivatela

    Nasledujúci výstup nás informuje, že priečinok /home/username je prístupný na čítanie všetkým:

    drwxr-xr-x  2 meno_pouzivatela meno_pouzivatela    4096 2007-10-02 20:03 meno_pouzivatela
  • Práva čítania priečinka pre všetkých môžeme zrušiť nasledujúcim príkazovom:

    sudo chmod 0750 /home/meno_pouzivatela
    [Note]

    Niektorí ľudia majú tendenciu bez uváženia používať rekurzívny prepínač  (-R), ktorý zmení práva aj všetkým podriadeným priečinkom a súborom. Toto však nie je nevyhnutné a môže to viesť k nežiaducim problémom. Zmena oprávnení k rodičovskému priečinku zabráni neautorizovanému prístupu aj ku všetkému čo je v ňom.

    Oveľa efektívnejším spôsobom je, ak globálne zmeníme predvolené oprávnenia k domovským priečinkom pre nástroj adduser. Otvoríme súbor /etc/adduser.conf a upravíme premennú DIR_MODE na také práva, aké chceme priradiť všetkým novovytvoreným domovským priečinkom.

    DIR_MODE=0750
  • Po úprave oprávnení priečinka použitím niektorej z uvedených techník opäť overíme oprávnenia k priečinku pomocou príkazu:

    ls -ld /home/meno_pouzivatela

    Výpis nižšie nám potvrdil, že priečinok už nemajú právo čítať všetci:

    drwxr-x---   2 meno_pouzivatela meno_pouzivatela    4096 2007-10-02 20:03 meno_pouzivatela

Politika hesiel

Používanie silných hesiel je jedným z najdôležitejších aspektov bezpečnosti. Mnoho napadnutí systému uskutočnených hrubou silou (vyskúšanie všetkých možností) alebo slovníkovým útokom bolo úspešných kvôli slabým heslám. Ak sa rozhodneme používať niektorú formu vzdialeného prístupu, ktorá vyžaduje lokálne heslá, je potrebné adekvátne nastaviť dolnú hranicu zložitosti hesla, maximálnu dĺžku platnosti hesla a časté auditovanie nášho autentifikačného systému.

Minimálna dĺžka hesla

V predvolenom stave je minimálna dĺžka hesla, ktorú Ubuntu vyžaduje, 4 znaky, a tiež je nastavené základné overenie náhodnosti. Táto hodnota sa nastavuje v súbore /etc/pam.d/common-password, spôsobom uvedeným nižšie.

password   required   pam_unix.so nullok obscure min=4 max=8 md5

Ak by sme chceli zvýšiť minimálnu dĺžku hesla na 6 znakov, zmeníme hodnotu príslušnej premennej na min=6.

password   required   pam_unix.so nullok obscure min=6 max=8 md5
[Note]

Premenná max=8 neznamená maximálnu dĺžku hesla. Hovorí o tom, že zložitosť hesla sa nebude kontrolovať pri heslách, ktoré sú dlhšie ako 8 znakov. Ak chcete pomôcť s náhodnosťou hesiel, môžete použiť balík libpam-cracklib.

Platnosť hesla

Pri vytváraní používateľských účtov by sme mali nastaviť minimálnu a maximálnu životnosť hesla a to, aby bol po jej uplynutí používateľ prinútený zadať nové heslo.

  • Ak chceme zobraziť stav účtu používateľa, použijeme nasledujúci príkaz:

    sudo chage -l meno_pouzivatela

    Výstup nižšie zobrazuje zaujímavé fakty o používateľskom účte, konkrétne to, že nie je aplikovaná žiadna politika:

    Last password change                                    : Jan 20, 2008
    Password expires : never
    Password inactive : never
    Account expires : never
    Minimum number of days between password change : 0
    Maximum number of days between password change : 99999
    Number of days of warning before password expires : 7
  • Ak chceme nastaviť niektorú z týchto hodnôt, použijeme nasledujúci príkaz a budeme sa riadiť interaktívnymi otázkami:

    sudo chage meno_pouzivatela

    V nasledujúcom príklade ručne nastavíme dátum vypršania platnosti hesla (-E) na 31.1.2008, minimálnu dobu platnosti hesla (-m) na 5 dní, maximálnu dobu platnosti hesla (-M) na 90 dní, dĺžku neaktívnosti, po ktorej heslo nebude platné (-I) na 5 dní a čas varovania pred skončením platnosti hesla (-W) na 14 dní.

    sudo chage -E 01/31/2008 -m 5 -M 90 -I 30 -W 14 meno_pouzivatela
  • Ak chceme zmeny overiť, použijeme znova príkaz:

    sudo chage -l meno_pouzivatela

    Výstup nižšie zobrazuje novú politiku, ktorá je odteraz platná pre daný účet:

    Last password change                                    : Jan 20, 2008
    Password expires : Apr 19, 2008
    Password inactive : May 19, 2008
    Account expires : Jan 31, 2008
    Minimum number of days between password change : 5
    Maximum number of days between password change : 90
    Number of days of warning before password expires : 14

Ďalšie možnosti zabezpečenia

Mnoho aplikácií používa alternatívne autentifikačné mechanizmy, ktoré môžu byť ľahko prehliadnuté dokonca aj skúsenými správcami systémov. Preto je dôležité pochopiť a riadiť spôsob, akým sa budú používatelia autentifikovať k jednotlivým službám a aplikáciám na serveri.

SSH prístup zablokovaných používateľov

Jednoduché zablokovanie/uzamknutie používateľského účtu nezabráni pred vzdialeným pripojením používateľov k serveru, ak mali pred tým nastavenú autentifikáciu pomocou verejného RSA kľúča. Budú sa môcť stále pripojiť a budú mať k dispozícii príkazový riadok bez potreby zadávania akéhokoľvek hesla. Nesmieme preto zabudnúť skontrolovať domovský priečinok používateľa, či neobsahuje súbor, ktorý umožňuje tento typ autentifikovaného prístupu napr. /home/meno_pouzivatela/.ssh/authorized_keys.

Odstránime alebo premenujeme priečinok .ssh/ v domovskom priečinku používateľa, čím predídeme ďalšiemu využitiu možnosti SSH autentifikácie.

Uistíme sa, či so zablokovaným používateľom nie sú nadviazané SSH spojenia. Je možné, že bude mať nadviazané prichádzajúce alebo odchádzajúce pripojenia. Zrušíme všetky, ktoré nájdeme.

SSH prístup povolíme iba používateľom, ktorí by ho mali mať. Napríklad môžeme vytvoriť skupinu s názvom "sshlogin" a pridať názov skupiny do premennej AllowGroups v súbore /etc/ssh/sshd_config.

AllowGroups sshlogin

Potom používateľov, ktorí majú mať prístup k SSH, pridáme do skupiny "sshlogin" a reštartujeme službu SSH.

sudo adduser meno_pouzivatela sshlogin
sudo /etc/init.d/ssh restart

Autentifikácia pomocou externej databázy používateľov

Väčšina vyspelejších sietí používa centralizovanú autentifikáciu a riadenie prístupu ku všetkým systémovým zdrojom. Ak ste nakonfigurovali server tak, aby autentifikoval používateľov pomocou externej databázy, uistíme sa, či sme účet zablokovali lokálne aj externe, a tým zaistíme, že nebude možné ani núdzové lokálne prihlásenie.

Zabezpečenie konzoly

Tak ako pri iných bezpečnostných barierach, ktorými chránime náš server, zistíme, že ochrániť server pred niekym, kto má fyzický prístup k serveru, ako napríklad zlodejmi, narušiteľmi napájania alebo prevádzky atď, nie je vôbec jednoduché. Preto by zabezpečenie konzoly malo byť tiež jednou zložkou celkovej bezpečnostnej stratégie. Uzamknutie "obrazovkových dverí" môže odradiť páchateľa od príležitostnej kriminality alebo ho aspoň spomaliť. Odporúčame preto vykonať základné bezpečnostné opatrenia zamerané na zabezpečenie konzoly.

Nasledujúce inštrukcie nám pomôžu zabezpečiť server pred problémami, ktoré by inak mohli mať veľmi vážne následky.

Zablokovanie Ctrl+Alt+Delete

Najprv je potrebné používateľom, ktorí majú fyzický prístup ku klávesnici terminálu, zablokovať trojkombináciu Ctrl+Alt+Delete, pomocou ktorej sa dá server reštartovať bez prihlásenia. Aj keď niekto môže jednoducho vytiahnuť napájací kábel, pri produkčných serveroch je dobré túto trojkombináciu zakázať. Prinúti to útočníka použiť komplikovanejší spôsob reštartu servera a zabráni to nechcenému náhodnému reštartu. 

  • Ak chceme zablokovať reštart servera po stlačení trojkombinácie Ctrl+Alt+Delete, zapoznámkujeme nasledujúci riadok v súbore /etc/event.d/control-alt-delete.

    #exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

Zabezpečenie zavádzača GRUB heslom

Spolu s Ubuntu sa ako predvolený zavádzač nainštaluje GNU GRUB, ktorý je veľmi prispôsobiteľný a má možnosti na obnovu. Napríklad, ak nainštalujeme ďalšie jadro, automaticky sa pridá ako nová možnosť do ponuky zavádzača grub. Pre každé jadro sa v ponuke vytvorí aj alternatívna položka označená nápisom (recovery mode), ktorú je možné použiť na obnovu systému. Recovery mode - obnovovací mód zavedie príslušné jadro do jednopoužívateľského módu (init 1), ktorý zodpovedá administrátorovi a sprístupní príkazový riadok s právami používateľa root bez vyžiadania akéhokoľvek hesla.

Preto je veľmi dôležité mať kontrolu nad tým, kto bude môcť  pristupovať k položkám ponuky grub, ktoré su za normálnych okolností prístupné každému, čo umožňuje vykonanie nebezpečných akcií:

  • Zmeniť parametre jadra pri zavádzaní.

  • Zaviesť server do jednopoužívateľského módu.

Týmto akciám môžeme zabrániť tak, že nastavíme heslo pre vstup do konfigurácie GRUBu v súbore /boot/grub/menu.lst, ktoré bude potrebné na odomknutie použitia rozšírených možností GRUBu.

  • Ak chceme použiť s nástrojom grub heslo, najskôr si musíme vygenerovať md5 odtlačok hesla pomocou nástroja grub-md5-crypt:

    grub-md5-crypt

    Po spustení príkazu zadáme heslo a zobrazí sa nám zodpovedajúca hodnota odtlačku:

    Password: (zadáme heslo)
    Retype password: (potvrdíme heslo)
    $1$s3YiK$M3lxAbqA6JLm2FbDWnClQ0

  • Výsledný odtlačok zadáme do súboru /boot/grub/menu.lst v nasledujúcom tvare:

    password --md5 $1$s3YiK$M3lxAbqA6JLm2FbDWnClQ0
  • Aby sme zaheslovali aj prístup do jednouživateľského módu, nastavíme hodnotu premennej lockalternative v súbore /boot/grub/menu.lst na true tak, ako v nasledujúcom príklade.

    # lockalternative=true
[Note]

Toto nezabráni niekomu zaviesť systém z iného média. Útočník by mohol jednoducho naštartovať svoje vlastné prostredie, prepísať hlavný zavádzací záznam, pripojiť a skopírovať fyzické disky, zničiť dáta alebo čokoľvek iné. Tomuto problému sa dá zabrániť správnym nastavením BIOSu počítača, preto si preštudujte o ďalších protiopatreniach, ktoré môžu tomuto typu útoku zabrániť v príručke k biosu alebo na Internete.

Firewall

Úvod

Linuxové jadro obsahuje podsystém Netfilter, ktorý sa používa na riadenie prevádzky smerujúcej do servera alebo prechádzajúcej cez server. Všetky moderné Linuxové firewally používajú tento systém na filtrovanie paketov.

Systém filtrovania paketov kernelom je pre administrátorov ťažko použiteľný bez používateľského rozhrania, ktoré ho spravuje. Toto je úlohou iptables (ip tabuliek). Keď sa paket dostane na náš server, je odovzdaný do podsystému Netfilter aby ho prijal, spracoval alebo odmietol na základe pravidiel, ktoré mu zadáme pomocou iptables. Tieto ip tabuľky sú všetko, čo potrebujeme pre riadenie firewallu. Kvôli uľahčeniu práce však vznikli aj ďalšie rozhrania.

ufw - nekomplikovaný Firewall

Predvolený konfiguračný nástroj na konfiguráciu firewallu v systéme Ubuntu je ufw. Bol vyvinutý na jednoduché nastavenie iptables firewallu. Nástroj ufw poskytuje používateľsky prívetivý spôsob, ako vytvoriť firevall založený na staniciach typu IPv4 alebo IPv6.

Nástroj ufw je v základnom stave vypnutý. Na man stránkach ufw sa píše:

ufw nie je určený na poskytnutie úplnej funkcionality firewallu cez príkazový riadok, slúži na jednoduché pridávanie a odstraňovanie jednoduchých pravidiel. Je zameraný najmä na firewall na báze staníc.

V ďalšej časti ukážeme niekoľko príkladov použitia ufw:

  • Najskôr je potrebné zapnúť ufw. Do príkazového riadka zadáme:

    sudo ufw enable
    
  • Otvorenie portu (v našom prípade port ssh):

    sudo ufw allow 22
    
  • Pravidlá sa dajú pridávať pomocou číslovaného formátu:

    sudo ufw insert 1 allow 80
    
  • Podobne zatvoríme otvorený port:

    sudo ufw deny 22
    
  • Ak chceme pravidlo odstrániť, zadáme delete a za ním pravidlo:

    sudo ufw delete deny 22
    
  • Je tiež možné povoliť prístup z konkrétnych staníc alebo siete k portu. V nasledujúcom príklade povolíme ssh prístup zo stanice 192.168.0.2 na ktorúkoľvek adresu na tejto stanici:

    sudo ufw allow proto tcp from 192.168.0.2 to any port 22
    

    Ak nahradíme adresu 192.168.0.2 adresou 192.168.0.0/24, povolíme ssh prístup z celej podsiete.

  • Pridaním prepínača --dry-run k príkazu ufw budú vytvorené pravidlá, ale neaplikujú sa. V nasledujúcom príklade môžeme vidieť čo sa stane, ak otvoríme HTTP port:

    sudo ufw --dry-run allow http
    
    *filter
    :ufw-user-input - [0:0]
    :ufw-user-output - [0:0]
    :ufw-user-forward - [0:0]
    :ufw-user-limit - [0:0]
    :ufw-user-limit-accept - [0:0]
    ### RULES ###

    ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0
    -A ufw-user-input -p tcp --dport 80 -j ACCEPT

    ### END RULES ###
    -A ufw-user-input -j RETURN
    -A ufw-user-output -j RETURN
    -A ufw-user-forward -j RETURN
    -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT]: "
    -A ufw-user-limit -j REJECT
    -A ufw-user-limit-accept -j ACCEPT
    COMMIT
    Rules updated
  • ufw môžeme vypnúť zadaním:

    sudo ufw disable
    
  • Ak chceme vidieť stav firewallu, zadáme:

    sudo ufw status
    
  • Podrobnejšie informácie zobrazíme takto:

    sudo ufw status verbose
    
  • Na zobrazenie v číslovanom formáte použijeme:

    sudo ufw status numbered
    
[Note]

Ak je port, ktorý chcete otvoriť alebo zatvoriť, definovaný v súbore /etc/services, môžete miesto čísla portu použiť jeho názov. V predchádzajúcich príkladoch môžete 22 nahradiť ssh.

Toto bol krátky úvod o používaní nástroja ufw. Viac informácií sa dozviete na man stránkach ufw.

Integrácia aplikácií s ufw

Aplikácie, ktoré otvárajú porty, môžu zahrnúť do ufw profilu, detaily o portoch, ktoré potrebujú ku svojej správnej činnosti. Profily sa uchovávajú v priečinku /etc/ufw/applications.d, v ktorom ich môžeme upravovať ak chceme zmeniť predvolené nastavenie portov.

  • Ak chceme vidieť, ktoré aplikácie majú nainštalovaný profil, zadáme nasledujúci príkaz:

    sudo ufw app list
    
  • Rovnako, ako sme povoľovali port, môžeme povoliť aj profil aplikácie:

    sudo ufw allow Samba
    
  • Rovnako je možné použiť rozšírenú syntax:

    sudo ufw allow from 192.168.0.0/24 to any app Samba
    

    Aplikáciu Samba a adresu 192.168.0.0/24 môžeme nahradiť za profil inej aplikácie a rozsah IP adries našej siete.

    [Note]

    Nie je potrebné pre aplikáciu dodatočne určovať  protokol, pretože tieto informácie sú uložené v profile. Všimnite si, že slovom app môžeme nahradiť port.

  •  Ak chceme zobraziť, ktoré porty, protokoly, atď sú definované pre aplikáciu, zadáme:

    sudo ufw app info Samba
    

Nie všetky aplikácie, pre ktoré je potrebné otvoriť sieťové porty, sa dodávajú s ufw profilom, ale ak si sami vytvoríme profil a chceme aby bol začlenený do inštalačného balíka, môžeme poslať súbor spolu s hlásením chyby k balíku do systému Launchpad.

Zamaskovanie IP adries

Cieľom zamaskovania IP (masquerade) adries je umožnenie pridelenia súkromnej nedosiahnuteľnej IP adresy v našej sieti, z ktorej sa budeme môcť  dostať na Internet prostredníctvom zariadenia, ktoré robí maskovanie. Komunikácia z našej privátnej siete smerujúca do siete Internet musí byť pozmenená tak, aby odpovede dorazili na zariadenie, ktoré si ich vyžiadalo. Aby sa tak stalo, kernel musí upraviť zdrojovú IP adresu každého paketu tak, aby odpoveď dorazila na počítač robiaci maskovanie a nie priamo na súkromnú IP adresu, na ktorú sa nie je možné dostať priamo z Internet. Linux používa Sledovanie spojenia - Connection Tracking (conntrack) aby odsledoval, ktoré spojenie smeruje do ktorého stroja a mohol správne presmerovať vracajúce sa pakety. Komunikácia opúšťa privátnu sieť ako "zamaskovaná" tak, ako keby pochádzala priamo z nášho Ubuntu servera tvoriaceho bránu (gateway). Tento proces je v dokumentácii od firmy Microsoft popísaný ako Zdieľanie internetového pripojenia.

Maskovanie pomocou ufw

Maskovanie IP adries sa dá vytvoriť pomocou vlastných pravidiel ufw. Je to možné vďaka aktuálnemu koncovému rozhraniu ufw s názvom iptables-restore s pravidlami uloženými v súboroch /etc/ufw/*.rules. Tieto súbory sú skvelým miestom, kde sa dajú pridávať pravidlá pre iptables bez ufw a pravidlá, ktoré sú zamerané pre sieťovú bránu alebo premostenia.

Pravidlá sú rozdelené do dvoch rozdielnych súborov. Pravidlá, ktoré by mali byť spustené pred príkazmi ufw zadanými z príkazového riadka a pravidlá, ktoré by mali byť spustené za príkazmi ufw zadanými z príkazového riadka.

  • Najskôr je potrebné zapnúť smerovanie paketov v ufw. Je potrebné upraviť dva konfiguračné súbory. V súbore /etc/default/ufw zmeníme DEFAULT_FORWARD_POLICY na “ACCEPT”:

    DEFAULT_FORWARD_POLICY="ACCEPT"
    

    Potom otvoríme súbor /etc/ufw/sysctl.conf a odkomentujeme:

    net.ipv4.ip_forward=1
    

    Podobne pre IPv6 smerovanie odkomentujeme:

    net.ipv6.conf.default.forwarding=1
    
  • Teraz pridáme pravidlá do súboru /etc/ufw/before.rules. Predvolené pravidlá konfigurujú iba tabuľku filter a ak chceme zapnúť maskovanie, je potrebné nakonfigurovať tabuľku nat. Nasledujúce riadky pridáme na začiatok súboru za komentár hlavičky:

    # pravidlá nat tabuľky
    *nat
    :POSTROUTING ACCEPT [0:0]

    # Presmerovanie komunikácie z eth1 na eth0.
    -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

    # nemažte riadok 'COMMIT' inak sa pravidlá tejto tabuľky nevykonajú
    COMMIT

    Komentáre nie sú povinné, ale je dobrým zvykom okomentovať našu konfiguráciu. Ak upravujeme akékoľvek pravidlá v súboroch v priečinku /etc/ufw je potrebné sa uistiť, či na konci týchto riadkov každej tabuľky sa nachádzajú tieto riadky:

    # don't delete the 'COMMIT' line or these rules won't be processed
    COMMIT

     V každej Tabuľke je potrebný príkaz COMMIT. V tomto článku boli zobrazené len tabuľky nat a filter, ale pravidlá je možné pridať aj do tabuliek raw a mangle.

    [Note]

    V uvedenom príklade nahraďte eth0, eth1 a 192.168.0.0/24 sieťovými rozhraniami a rozsahom IP adries, ktoré používate vo vašej sieti.

  • Nakoniec vypneme a znovu zapneme ufw aby sa prejavili zmeny:

    sudo ufw disable && sudo ufw enable
    

Maskovanie IP adries by teraz malo byť zapnuté. Môžeme pridať ešte niekoľko dodatočných FORWARD pravidiel do súboru /etc/ufw/before.rules. Dodatočné pravidlá je odporúčané pridávať do zreťazenia ufw-before-forward.

Maskovanie pomocou iptables

Na maskovanie IP adries je možné použiť aj iptables.

  • Podobne ako pri ufw, najskôr musíme povoliť smerovanie paketov IPv4 úpravou súboru /etc/sysctl.conf odkomentovaním nasledujúceho riadka

    net.ipv4.ip_forward=1
    

    Ak by sme chelí zapnúť aj IPv6 smerovanie odkomentujeme aj riadok:

    net.ipv6.conf.default.forwarding=1
    
  • Potom spustíme príkaz sysctl, ktorý zapne nové nastavenia v konfigurácii:

    sudo sysctl -p
    
  • IP maskovanie teraz môžeme nastaviť pomocou jedného pravidla iptables, ktoré je potrebné prispôsobiť konfigurácii našej siete:

    sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
    

    Uvedený príkaz považuje za privátne adresy tie, ktoré sú z rozsahu 192.168.0.0/16 a za zariadenie, ktorým sa pripájame na internet považuje ppp0. Význam ďalších častí príkazu je takýto:

    • -t nat -- pravidlo patrí do tabuľky nat

    • -A POSTROUTING -- pravidlo sa pridá (-A) do zreťazenia POSTROUTING

    • -s 192.168.0.0/16 -- pravidlo platí pre komunikáciu pochádzajúcu zo zadaného rozsahu adries

    • -o ppp0 -- pravidlo sa aplikuje iba na komunikáciu, ktorá je nasmerovaná von cez zadané sieťové zariadenie

    • -j MASQUERADE -- komunikácia spĺňajúca toto pravidlo "preskočí" (-j) na cieľ MASQUERADE, ktorý s ňou bude zaobchádzať vyššie uvedeným spôsobom

  • Každé zreťazenie v tabuľke filter (predvolená tabuľka, v ktorej je definovaná väčšina pravidiel filtrujúcich pakety) má v základnom stave nastavenú policy (politiku) na ACCEPT (prijať), ale ak chceme vytvoriť firewall s prídavnou funkciou brány, mali by sme politiky nastaviť na DROP (zahodiť) alebo REJECT (odmietnuť), ktorá spôsobí, že maskovaná komunikácia bude musieť prejsť cez zreťazenie FORWARD, v ktorom zadefinujeme pravidlá pre filtrovanie:

    sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
    sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

    Predchádzajúce príkazy povolia pripojenie prichádzajúce z vnútornej siete do siete Internet a komunikáciu, ktorá súvisí s týmito pripojeniami, presmeruje na počítače, ktoré spojenia nadviazali.

  • Ak chceme, aby bolo maskovanie aktívne aj po reštarte, otvoríme súbor /etc/rc.local a pridáme príkazy, ktoré sme použili vyššie. Napríklad prvý príkaz bez filtrovania:

    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
    

Záznamy

Záznamy Firewallu slúžia na rozpoznanie útokov, riešenie problémov s pravidlami a upozorňovanie na nezvyčajné aktivity v sieti. Aby bol záznam vygenerovaný, je potrebné ho začleniť do pravidla, pretože pravidlá pre zaznamenávanie musia byť známe pred aplikovaním koncového pravidla (pravidlo, ktoré rozhodne o osude paketu ako ACCEPT (prijať), DROP (zahodiť) alebo REJECT (odmietnuť)).

Ak používame ufw, môžeme zaznamenávanie zapnúť zadaním nasledujúceho príkazu:

sudo ufw logging on

Ak chceme zaznamenávanie vypnúť ufw, jednoducho v príkaze slovo on nahradíme za off.

Ak používame iptables miesto ufw, zadáme:

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

Požiadavky smerujúce na port 80 z lokálny staníc budú zaznamenané do dmesg a budú vyzerať takto:

[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

Predchádzajúci záznam sa objaví v súboroch /var/log/messages, /var/log/syslog a /var/log/kern.log. Toto chovanie sa dá zmeniť v súbore /etc/syslog.conf alebo nainštalovaním a nastavením nástroja ulogd a použitím slova ULOG miesto slova LOG v pravidle. Démon ulogd načúva, logovacím inštrukciám z jadra špeciálne pre firewall a môže ich zaznamenať buď do súboru, aký mu zadáme alebo do databázy PostgreSQL či MySQL. Analýzu záznamov firewallu si môžeme zjednodušiť analyzačnými nástrojmi fwanalog, fwlogwatch alebo lire.

Ostatné nástroje

Existuje mnoho nástrojov, ktoré uľahčujú vytvorenie kompletného firewallu bez toho, aby sme poznali iptables. Pre klientov s grafickým rozhraním sú to:

  • Firestarter je veľmi populárny a ľahko sa používa.

  • fwbuilder je veľmi mocný a priateľsky vyzerajúci program pre administrátorov, ktorí sú zvyknutí používať komerčné nástroje, ako napríklad Checkpoint FireWall-1.

Ak uprednostňujeme nástroje, ktoré sa zadávajú v príkazovom riadku s textovými konfiguračnými súbormi, môžeme použiť:

  • Shorewall je veľmi možný riešenie, ktoré umožňuje nakonfigurovať firewall pre akúkoľvek sieť.

  • ipkungfu nám poskytne funkčný firewall bez nutnosti akejkoľvek konfigurácie a umožní nám jednoducho nastaviť pokročilejší fierewall, pomocou veľmi dobre zdokumentovaných konfiguračných súborov.

  • fireflier je navrhnutý tak, aby bol desktopovou aplikáciou. Skladá sa zo serverovej aplikácie (fireflier-server) a grafického klienta, akého si zvolíte (GTK alebo QT) a chová sa ako väčšina interaktívnych firewall aplikácií pre Windows.

Zdroje

  • Wiki stránka Ubuntu Firewall obsahuje informácie o vývoji ufw.

  • Manuálové stránky ufw tiež obsahujú veľmi užitočné informácie: man ufw.

  • Na stránke packet-filtering-HOWTO sa nachádza viac informácií o použití iptables.

  • Stránka nat-HOWTO obsahuje detaily o maskovaní.

  • Výborným zdrojom je aj IPTables HowTo na Ubuntu wiki.

AppArmor

AppArmor je implementácia bezpečnostného modulu Linuxu (Linux Security Module) riadenia prístupu na základe mandátov založených na menách. AppArmor zabraňuje jednotlivým programom meniť súbory, ktoré sú definované v zozname dokumentu posix 1003.1e.

AppArmor sa nainštaluje spolu so systémom a hneď sa aj aktivuje. Používa profily aplikácií, aby určil, ktoré súbory a s akými právami daná aplikácia vyžaduje. Niektoré balíky nainštalujú svoje vlastné profily a niektoré ďalšie dodatočné profily sa nachádzajú v balíku apparmor-profiles.

Ak chceme nainštalovať balík apparmor-profiles, do príkazového riadka zadáme:

sudo apt-get install apparmor-profiles

Profily AppArmor majú dva módy spustenia:

  • Upozorňovací/Učiaci: umožňuje porušiť pravidlá v profile, porušenia sú však zaznamenané. Toto je užitočné pri testovaní a tvorbe nových profilov.

  • Prinucovací/Zákazový: striktne presadzuje politiku profilu a pokus o jej porušenie zaznamená.

Použitie AppArmor

Balík apparmor-utils obsahuje nástroje pre príkazový riadok, ktorými môžeme pre AppArmor zmeniť mód spustenia, nájsť stav profilu, vytvoriť nové profily, atď.

  • apparmor_status sa používa na zobrazenie aktuálneho stavu profilov AppArmor.

    sudo apparmor_status
  • aa-complain prepne profil do upozorňovacieho módu.

    sudo aa-complain /cesta/k/programu
  • aa-enforce prepne profil do prinucovacieho módu.

    sudo aa-enforce /cesta/k/programu
  • Profily AppArmor sa nachádzajú v priečinku /etc/apparmor.d. Tento priečinok môžeme použiť na zmenu módu všetkých profilov naraz.

    Ak chceme všetky profily naraz prepnúť do upozorňovacieho módu, zadáme:

    sudo aa-complain /etc/apparmor.d/*

    Keby sme ich chceli prepnúť do prinucovacieho módu, zadáme:

    sudo aa-enforce /etc/apparmor.d/*
  • apparmor_parser sa používa na načítanie profilu do jadra. Môžeme ho použiť aj na obnovenie už načítaných profilov použitím prepínača -r. Profil načítame takto:

    cat /etc/apparmor.d/neno.profilu | sudo apparmor_parser -a

    Obnovenie profilu urobíme takto:

    cat /etc/apparmor.d/meno.profilu | sudo apparmor_parser -r
  • /etc/init.d/apparmor môže byť použitý na obnovenie všetkých profilov:

    sudo /etc/init.d/apparmor reload
  • Priečinok /etc/apparmor.d/disable môže byť použitý pomocou príkazu apparmor_parser -R na vypnutie profilu.

    sudo ln -s /etc/apparmor.d/meno.profilu /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/meno.profilu

    Ak chceme znova zapnúť vypnutý profil, odstránime symbolické prepojenie na profil v /etc/apparmor.d/disable/. Potom načítame profil spolu s prepínačom -a.

    sudo rm /etc/apparmor.d/disable/meno.profilu
    cat /etc/apparmor.d/meno.profilu | sudo apparmor_parser -a
  • AppArmor môžeme vypnúť a zrušiť aj načítanie modulu jadra zadaním príkazu:

    sudo /etc/init.d/apparmor stop
    sudo update-rc.d -f apparmor remove
  • Ak chceme znova obnoviť AppArmor, zadáme:

    sudo /etc/init.d/apparmor start
    sudo update-rc.d apparmor defaults
[Note]

Spojenie meno.profilu nahraďte menom profilu, s ktorým chcete manipulovať. Nahraďte tiež cestu /cesta/k/programu/ aktuálnou cestou spustiteľného súboru. Napríklad príkaz ping má cestu /bin/ping

Profily

Profily AppArmor sú jednoduché textové súbory umiestnené v priečinku /etc/apparmor.d/. Súbory sú nazvané podľa celej cesty k spustiteľnému súboru pričom znak "/" je nahradený znakom ".". Napríklad /etc/apparmor.d/bin.ping je AppArmor profil pre príkaz /bin/ping.

Existujú dva hlavné typy pravidiel použitých v profiloch:

  • Záznamy ciest: hovoria, ku ktorým súborom aplikácie je možné pristupovať v súborovom systéme.

  • Capability entries: určujú, aké právomoci budú môcť použiť neoprávnené procesy.

Napríklad sa môžeme pozrieť na profil /etc/apparmor.d/bin.ping:

#include <tunables/global>
/bin/ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>

capability net_raw,
capability setuid,
network inet raw,

/bin/ping mixr,
/etc/modules.conf r,
}
  • #include <tunables/global>: príkaz include znamená začleniť z iných súborov. Tento umožňuje nastaviť chovanie viacerých aplikácií, ktoré nastavíme v spoločnom súbore.

  • /bin/ping flags=(complain): cesta k profilovanému programu a nastavenie upozorňovacieho módu.

  • capability net_raw,: umožňuje aplikáciám pristupovať k funkcionalite CAP_NET_RAW Posix.1e.

  • /bin/ping mixr,: umožňuje aplikáciám čítať a spúšťať súbor.

[Note]

Ak upravíte profil, musíte ho znova načítať. Viac informácii sa dozviete v časti “Použitie AppArmor”.

Vytvorenie profilu

  • Návrh testovacieho plánu: Skúsme porozmýšlať, ako by aplikácia mala byť spúšťaná. Testovací plán si rozdelíme na malé testovacie prípady. Každý testovací prípad by mal mať krátky opis a zoznam krokov podobných týmto.

    Niektoré štandardné testovacie prípady sú:

    • Štartovanie programu.

    • Vypínanie programu.

    • Obnovenie programu.

    • Testovanie všetkých príkazov, ktoré podporuje init skript.

  • Generovanie nového profilu: Na vygenerovanie nového profilu použijem nástroj aa-genprof. Do príkazového riadka zadáme:

    sudo aa-genprof program

    Napríklad:

    sudo aa-genprof slapd
  • Ak chceme náš nový profil začleniť do balíka apparmor-profiles, súbor odošleme ako chybové hlásenie k balíku AppArmor do systému Launchpad:

    • Napíšeme testovací plán a testovacie prípady.

    • Pripojíme nový profil k hláseniu o chybe.

Aktualizácia profilov

Keď sa program nespráva tak ako by sa mal, odošle sa správa do log súborov. Na hľadanie v súboroch so záznamami AppArmor môžeme použiť nástroj aa-logprof, prezrieť si ich a aktualizovať profily. Do príkazového riadka zadáme:

sudo aa-logprof

Zdroje

  • Popis ďalších konfiguračných možností je na stránke AppArmor Administration Guide.
  • Detaily o používaní AppArmor s ostatnými vydaniami Ubuntu sa nachádzajú na stránke AppArmor Community Wiki.
  • Stránka OpenSUSE AppArmor je iná verzia úvodu do AppArmor.
  • Skvelým miestom, kde môžete získať pomoc ku AppArmor a spojiť sa s ostatnými členmi komunity Ubuntu Servera, je na IRC kanále #ubuntu-server na freenode.

Certifikáty

Jednou z najčastejších foriem kryptografie je v súčasnosti kryptografia pomocou dvojice kľúčov. Kryptografia dvojice kľúčov je  založená na verejnom kľúči a súkromnom kľúči. Systém informáciu zašifruje verejným kľúčom. Táto informácia sa potom dá dešifrovať pomocou súkromného kľúča.

Tento obľúbený spôsob šifrovania sa používa i pri komunikácii cez pripojenia Secure Socket Layer (SSL) alebo Transport Layer Security (TLS). Napríklad môžeme nakonfigurovať systém Apache, aby poskytol HTTPS - HTTP protokol cez SSL. Toto umožňuje zašifrovať komunikáciu pri protokoloch, ktoré samy o sebe neposkytujú šifrovanie.

Certifikát je spôsob, akým sa distribuuje verejný kľúč a ostatné informácie o serveri a organizácii, ktorá je za ne zodpovedná. Certifikáty môžu byť digitálne podpísané Certifikačnými autoritami (CA). CA je dôveryhodná tretia strana, ktorá potvrdzuje, že informácie, ktoré sa nachádzajú v certifikáte sú pravdivé.

Typy certifikátov

Ak chceme nastaviť bezpečný server, ktorý bude používať šifrovanie pomocou dvojice kľúčov, vo väčšine prípadov je potrebné zaslať požiadavku na podpísanie certifikátu (vrátane nášho verejného kľúča), doklad o firemnej identite a poplatok do CA. CA porovná požiadavku na vydanie certifikátu s našou identitou a pošle nám späť certifikát pre náš server. Druhá možnosť je, že si vytvoríme sebou podpísaný certifikát.

[Note]

Upozornenie - sebou podpísané certifikáty sa vo väčšine produkčných prostredí nedajú použiť.

Ak napríklad zoberieme spomínanú HTTPS komunikáciu, certifikáty podpísané CA poskytujú dve významné funkcie, ktoré sebou podpísané certifikáty nemôžu poskytnúť:

  • Prehliadače (zvyčajne) automaticky rozpoznajú certifikát a povolia šifrované spojenie bez toho, aby si žiadali potvrdenie od používateľa.

  • Pri certifikátoch podpísaných CA je garantovaná identita organizácie, ktorá poskytuje webové stránky prehliadaču.

Väčšina webových prehliadačov a počítačov, ktoré podporujú SSL, má zoznam certifikovaných autorít, ktorým automaticky dôverujú. Ak prehliadač zistí, že certifikát je podpísaný CA, ktorá nie je v zozname, spýta sa používateľa či má prijať alebo odmietnuť pripojenie. Niektoré aplikácie môžu generovať chybové hlásenie oznamujúce, že certifikát je sebou podpísaný.

Proces získania certifikátu od CA je celkom jednoduchý. Postupuje sa podľa nasledujúcich krokov:

  1. Vytvoríme dvojicu kľúčov - súkromný a verejný.

  2. Vytvoríme požiadavku na podpísanie verejného kľúča. Požiadavka bude obsahovať informácie o serveri a spoločnosti, ktorá server prevádzkuje.

  3. Odošleme požiadavku s dokumentom o našej identite do CA. Vyberieme si niektorú z certifikačných autorít. Náš výber môže byť na základe predchádzajúcich skúseností alebo skúseností od priateľov alebo na základe finančných faktorov.

    Keď sme sa rozhodli pre niektorú z CA, je potrebné ďalej sa riadiť jej pokynmi pre získanie certifikátu.

  4. Ak sa CA dôkladne uistí, že sme ten, za ktorého sa vydávame, vydá nám digitálny certifikát.

  5. Nainštalujeme certifikát na náš server a nastavíme aplikácie, aby tento certifikát použili.

Generovanie požiadavky na podpísanie certifikátu - Certificate Signing Request (CSR)

Či už chceme získať certifikát od CA alebo vytvoriť sebou podpísaný certifikát, najskôr musíme vygenerovať kľúče.

Ak má byť certifikát využívaný démonmi služieb ako napríklad Apache, Postfix, Dovecot, atď., je potrebné vygenerovať kľúč, ktorý nebude vyžadovať vstupnú frázu (passphrase). Ak nepoužijeme vstupnú frázu, služby sa budú vedieť naštartovať bez manuálneho vstupu, čo je preferovaný spôsob spúšťania démonov.

V tejto časti sa dozvieme, ako vytvoriť kľúče so vstupnou frázou aj bez nej. Kľúče bez vstupnej frázy potom použijeme na vygenerovanie certifikátu a potom ich budeme môcť použiť s rôznymi démonmi služieb.

[Warning]

Spúšťanie bezpečných služieb bez vstupnej frázy je bežné, inak by bolo potrebné vstupnú frázu ručne zadať pri každom spustení služby. Je to však menej bezpečné a v prípade, že niekto neoprávnene získa kľúč, získa tiež neobmedzený prístup k službám servera.

Ak chceme vygenerovať kľúče pre požiadavku o podpísanie certifikátu (CSR), spustíme nasledujúci príkaz v príkazovom riadku:

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....................++++++
.................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for server.key:

Teraz môžeme zadať vstupnú frázu. Pre najlepšiu bezpečnosť by mala obsahovať aspoň osem znakov. Minimálna dĺžka pri použití -des3 je štyri znaky. Môže obsahovať čísla aj interpunkciu a nemala by byť slovom zo slovníka. Nezabudnite tiež, že vo vstupnej fráze sa rozlišuje veľkosť písmen.

Vstupnú frázu je potrebné kvôli kontrole zadať dvakrát. Ak ju po druhýkrát zadáte rovnako, vygeneruje sa kľúč a uloží sa do súboru server.key.

Teraz vytvoríme nezabezpečený kľúč a zmeníme mená kľúčov:

openssl rsa -in server.key -out server.key.nezabezpeceny
mv server.key server.key.zabezpeceny
mv server.key.nezabezpeceny server.key

Nezabezpečený kľúč sa teraz volá server.key a môžeme ho použiť na vygenerovanie CSR bez vstupnej frázy.

Ak chceme vytvoriť CSR, spustíme nasledujúci príkaz v príkazovom riadku:

openssl req -new -key server.key -out server.csr

Po zadaní príkazu bude potrebné zadať vstupnú frázu. Ak zadáme správnu vstupnú frázu, môžeme zadať meno organizácie (Company Name) a ďalšie údaje, ako názov webu (Site Name), Email Id, atď. Po zadaní všetkých detailov sa vygeneruje CSR súbor s názvom server.csr

Tento CSR súbor môžeme poskytnúť CA na spracovanie. CA použije tento CSR súbor a vydá nám certifikát. Pomocou tohto CSR súboru však môžeme vytvoriť aj sebou podpísaný certifikát.

Vytvorenie sebou podpísaného certifikátu

Ak chceme vytvoriť sebou podpísaný certifikát, spustíme nasledujúci príkaz v príkazovom riadku:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Po zadaní príkazu bude potrebné zadať vstupnú frázu. Po zadaní správnej vstupnej frázy sa vygeneruje certifikát, ktorý sa uloží do súboru server.crt.

[Warning]

Ak má byť zabezpečený server verejne dostupný, budete potrebovať certifikát podpísaný CA. Neodporúčame použiť sebou podpísaný certifikát.

Inštalácia certifikátu

Súbor s kľúčom server.key a súbor s certifikátom server.crt (alebo iným dodaným od CA) nainštalujeme spustením nasledujúcich príkazov v príkazovom riadku:

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

Teraz môžeme nakonfigurovať aplikácie, ktoré sú schopné šifrovať na báze dvojice kľúčov, aby použili súbory s certifikátom a kľúčom. Napríklad Apache môže poskytnúť HTTPS, Dovecot môže poskytnúť IMAPS a POP3S, atď.

Certifikačná autorita

Ak služby v našej sieti vyžadujú viac ako sebou podpísané certifikáty, môže byť užitočné nastaviť svoju vlastnú súkromnú Certifikačnú Autoritu (CA). Použitím certifikátu podpísaného vlastnou CA, umožníte rôznym službám použiť certifikáty, ktoré umožnia službám navzájom si dôverovať, lebo budú používať certifikáty od rovnakej CA.

  1. Najskôr vytvoríme priečinky, ktoré budú obsahovať potrebné súbory:

    sudo mkdir /etc/ssl/CA
    sudo mkdir /etc/ssl/newcerts
  2. CA vyžaduje pre svoju funkciu niekoľko ďalších súborov. Prvý bude sledovať posledné sériové číslo použité CA - každý certifikát musí mať jedinečné sériové číslo. Druhý súbor, ktorý bude zaznamenávať, aké certifikáty boli vydané:

    sudo sh -c "echo '01' > /etc/ssl/CA/serial"
    sudo touch /etc/ssl/CA/index.txt
  3. Tretí súbor je konfiguračný súbor CA. Hoci nie je povinný, je veľmi užitočný pri vydávaní viacerých certifikátov. Otovoríme súbor /etc/ssl/openssl.cnf a v [ CA_default ] zmeníme:

    dir             = /etc/ssl/             # Where everything is kept
    database = $dir/CA/index.txt # database index file.
    certificate = $dir/certs/cacert.pem # The CA certificate
    serial = $dir/CA/serial # The current serial number
    private_key = $dir/private/cakey.pem# The private key
  4. Ďalej vytvoríme sebou podpísaný certifikát:

    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    

    Po spustení zadáme informácie pre certifikát.

  5. Teraz nainštalujeme koreňový certifikát a kľúč:

    sudo mv cakey.pem /etc/ssl/private/
    sudo mv cacert.pem /etc/ssl/certs/
  6. Odteraz môžeme začať podpisovať certifikáty. Prvá potrebná položka je CSR (pozrite Generovanie požiadavky na podpísanie certifikátu - Certificate Signing Request (CSR) ). Ak máme CSR, zadáme nasledujúci príkaz, ktorý vygeneruje certifikát podpísaný našou CA:

    sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
    

    Po zadaní hesla pre kľúč CA bude potrebné podpísať certifikát a potom znova, aby sme potvrdili nový certifikát. Potom by sme mali vidieť množstvo výstupov, ktoré súvisia s vytváraním certifikátu.

  7. Mali by sme získať nový súbor /etc/ssl/newcerts/01.pem obsahujúci rovnaký výstup. Skopírujeme všetky riadky medzi textami  -----BEGIN CERTIFICATE----- a ----END CERTIFICATE----- a prilepíme ich do súboru s názvom mena servera, na ktorom bude certifikát nainštalovaný. Napríklad mail.nieco.sk.crt je pekné veľavravné meno.

    Ďalšie certifikáty budú pomenované 02.pem, 03.pem, atď.

    [Note]

    Meno súboru mail.nieco.sk.crt nahraďte vlastným názvom.

  8. Nakoniec skopírujeme nový certifikát na počítač, na ktorom ho potrebujeme použiť. Predvolené umiestnenie pre inštaláciu certifikátov je /etc/ssl/certs. Týmto umožníme viacerým službám použiť rovnaký certifikát bez potreby komplikovaného nastavovania oprávnení.

    Kvôli aplikáciám, ktoré chceme nakonfigurovať tak, aby používali certifikát podpísaný našou CA, by sme mali ešte skopírovať súbor  /etc/ssl/certs/cacert.pem do priečinka /etc/ssl/certs/ na každom počítači.

Zdroje

eCryptfs

eCryptfs je prídavný šifrovaný súborový systém pre Linux kompatibilný s POSIX.  Vrstva eCryptfs sa nachádza nad vrstvou súborového systému a chráni súbory bez ohľadu na to, aký je podkladový súborový systém, typ diskových oddielov atď.

Počas inštalácie je možnosť zašifrovať diskový oddiel pre priečinok /home. Táto možnosť automaticky nakonfiguruje všetko potrebné pre zašifrovanie a pripojenie diskového oddielu.

V tejto časti ako príklad nastavíme priečinok /srv tak, aby bol zašifrovaný pomocou eCryptfs.

Použitie eCryptfs

Najskôr nainštalujeme potrebné balíky. V príkazovom riadku zadáme:

sudo apt-get install ecryptfs-utils

Teraz pripojíme diskový oddiel, ktorý chceme zašifrovať:

sudo mount -t ecryptfs /srv /srv

Po zadaní príkazu bude potrebné zadať niekoľko informácií o tom, ako má ecryptfs zašifrovať dáta.

Ak chceme otestovať súbory umiestnené v priečinku /srv, či sú skutočne zašifrované, skopírujeme priečinok /etc/default do /srv:

sudo cp -r /etc/default /srv

Odpojíme /srv, a pokúsime sa zobraziť súbor:

sudo umount /srv
cat /srv/default/cron

Ak znova pripojíme priečinok /srv pomocou ecryptfs všetky dáta budú opäť viditeľné.

Automatické pripojenie zašifrovaných diskových oddielov

Existuje niekoľko spôsobov, ako automaticky pripojiť súborový systém ecryptfs počas zavádzania systému. V tomto príklade použijeme súbor /root/.ecryptfsrc, ktorý obsahuje možnosti pripojenia spolu so vstupnou frázou umiestnenou na USB kľúči.

Najskôr vytvoríme súbor /root/.ecryptfsrc, ktorý bude obsahovať:

key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt
ecryptfs_sig=5826dd62cf81c615
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n
[Note]

Zmeňte signatúru ecryptfs_sig na signatúru, ktorá sa nachádza v súbore /root/.ecryptfs/sig-cache.txt.

Potom vytvoríme súbor so vstupnou frázou /mnt/usb/passwd_file.txt:

passphrase_passwd=[secrets]

Teraz pridáme nevyhnutné riadky do súboru /etc/fstab:

/dev/sdb1       /mnt/usb        ext3    ro      0 0
/srv /srv ecryptfs defaults 0 0

Vždy je potrebné sa uistiť, či je USB disk pripojený, skôr, ako sa bude pripájať zašifrovaný diskový oddiel.

Nakoniec reštartujeme systém a priečinok /srv by sa mal pripojiť pomocou ecryptfs.

Ostatné nástroje

Balík ecryptfs-utils obsahuje niekoľko ďalších užitočných nástrojov:

  • ecryptfs-setup-private: vytvorí priečinok ~/Private, ktorý má slúžiť na uchovávanie zašifrovaných informácií. Tento nástroj sa dá spustiť aj bežnými používateľmi bez oprávnení, ktorí takto môžu ochrániť svoje údaje pred ostatnými používateľmi.

  • ecryptfs-mount-private a ecryptfs-umount-private: nástroje slúžia na pripojenie a odpojenie používateľského priečinka ~/Private.

  • ecryptfs-add-passphrase: pridá novú vstupnú frázu do úložiska hesiel kernel keyring.

  • ecryptfs-manager: spravuje eCryptfs objekty, ako napríklad kľúče.

  • ecryptfs-stat: umožňuje zobraziť ecryptfs meta informácie súboru.

Zdroje