Hardened (Immutable) Repository – part 1/2

Predstavme si situáciu, že vaša spoločnosť (a nie je doležité aká je veľká) je pod ransomwareovým alebo hackerským útokom. Vy aj majitelia firmy, v ktorej pracujete sa spoliehate na to, že keď útok pominie, všetky potrebné systémy obnovíte a spustíte zo záloh. Čo sa však stane, ak aj vaše zálohy boli ovplyvnené útokom a vy prídete na to, že vaše zálohy boli zašifrované ransomwareom alebo zmazané útočníkom? Pre niektoré spoločnosti to môže znamenať nutnosť vybudovať celé svoje interné IT nanovo s vynaložením nemalých prostriedkov a pre niektoré až ukončením činnosti.

Aby sme my (správcovia interných IT systémov) aj naši šéfovia mohli kľudne spávať, Veeam vo verzii 11 svojho produktu Veeam Backup & Replication predstavil možnosť “immutable repository”. To znamená, že zálohy ktoré na takomto repozitáre uložíte, nebudú zmazateľné alebo upraviteľné po dobu, ktorú si zvolíte v nastavení repozitára. V praxi to znamená, nielen že tieto zálohy nebudú zmazateľné z VBR konzoly, ale samotné súbory záloh nebudú zmazateľné ani priamo zo súborového systému na operačnom sytéme. Týmto zabezpečíte, že zálohy vašich dôležitých systémov nevymažete omylom vy alebo váš kolega, ani útočník cielene ani ich ransomware nebude môcť zašifrovať. V posledných dvoch spomenutých prípadoch sa predpokladá, že o útoku sa dozviete “včas”. ;-)

 

V tejto prvej časti 2 dielnej série, si ukážeme postup, ako si takýto repozitár pripraviť a v 2. časti, ako náš nový repozitár pripojiť k VBR.

Inštalácia Linuxu

    1. Najprv by sme si mali zvoliť Linuxovú distribúciu. V mojom prípade voľba padla na Ubuntu, kedže mám s touto distribúciou najviac skúseností. Z hľadiska toho, na aký účel budeme tento server využívať je odporúčané použiť LTS realease, teda s dlhodobou podporou.
    2. Stiahnime si teda LTS verziu z predchádzajúceho odkazu, pripojme ho k našej VMke a bootnime inštalátor. V prvom kroku potrebujeme vybrať jazyk.
    3. Vyberme jazyk klávesnice a rozmiestnenie kláves. Odporúčam vyberať English (US). Voľby potvrdíme presunutím sa na tlačidlo [ Done ] pomocou klávesy TAB na klávesnici.
    4. Ak máme v sieti DHCP server, dostaneme od neho IP adresu. V našom prípade nemáme rezerváciu IP adresy na DHCP serveri a tak musíme nastaviť statickú IP adresu. Urobíme to potvrdením klávesou ENTER na sieťovom interface ens160 a následne vyberieme ENTERom Edit IPV4.
    5. V tomto kroku vyberieme možnosť Manual pre ručné zadanie sieťovej konfigurácie.
    6. Vyplníme polia podľa našej sieťovej špecifikácie. Nastavenie potvrdíme tlačidlom [ Save ]. Príklad:
    7. V prípade správneho zadania sieťovej konfigurácie sa nám naša statická IP adresa zobrazí v okne z bodu 4. Nastatenie potvrdíme tlačidlom [ Done ].
    8. V prípade, že používame proxy, môžeme ju v tomto kroku zadať. Ak nie, môžeme pokračovať potvrdením nastavenia tlačidlom [ Done ].
    9. Podľa našej lokácie nám inštalátor zvolil alternatívnu archive Mirror address.
    10. Prichádzame ku konfigurácii disku. Šípkami na klávesnici sa presunieme na disk v našom prípade [ /dev/sda/ local disk xxx.xxxG ] a vyberieme disk na ktorom chceme inštalovať systém. V našom prípade vyberieme [ /dev/sdb/ local disk 30.000G ] a potvrdíme našu konfiguráciu tlačidlom [ Done ].
    11. Zhrnutie file system konfigurácie potvrdíme opäť tlačidlom [ Done ].
    12. Inštalátor sa nás ešte opýta, či sme si vedomí deštrukcie dát na vybranom disku. Následným potvrdením máme konfiguráciu disku za sebou.
    13. V tomto kroku vyplníme: meno, názov servera, uživateľské meno a dvakrát zadáme heslo.
    14. Označíme možnosť inštalácie OpenSSH server kedže budeme potrebovať SSH prístup na náš server.
    15. V tomto kroku si môžeme vybrať balík, ktorý chceme doinštalovať, ale pre náš aktuálny účel nepotrebujeme žiaden.
    16. Počkáme na dokončenie inštalácie, v ktorej sa nám doinštalujú aj posledné security updates. ! Vo verzii ktorú inštalujeme je “bug”, ktorý spôsobuje, že inštalácia už je síce dokončená, ale ukazovateľ spustenej úlohy running ‘curtin hook’ sa stále točí. Mala by to byť len kozmetická chyba a teda je bezpečné dokončiť inštaláciu potvrdením reštartu servera.
    17. Ešte pred samotným reštartom servera sa uistime, či máme inštalačné ISO odpojené od VM a potvrďme to stlačením tlačidla ENTER.
    18. Po reštarte servera sa môžeme pokúsiť pripojiť sa na server pomocou SSH.
      ssh 192.168.2.12 -l cytroon

Príprava disku pre ukladanie backupov

  1. Identifikujeme disk, ktorý máme pripojený a ktorý chceme použiť pre ukladanie backupov.
    sudo fdisk -l

  2. Vyrobíme si partitíciu s XFS súborovým systémom a podporou Reflink (a.k.a. FastClone vo Windows prostredí). Na konci príkazu je označenie disku, ktorý sme identifikovali v predchádzajúcom kroku. V našom prípade /dev/sda.
    sudo mkfs.xfs -b size=4096 -m reflink=1,crc=1 /dev/sda

  3. V tomto kroku si vytvoríme mount point pre náš disk a skontrolujeme či sa nám vytvoril správne.
    sudo mkdir /mnt/imurepo
    cd /mnt/
    ls
    
  4. Na to, aby sme tento disk mohli zadať medzi disky ktoré sa automaticky mountnu, potrebujeme získať jeho UUID.
    sudo blkid

  5. Automount zabezpečíme editáciou /etc/fstab alebo týmto krkolomným príkazom kde UUID je z predchádzajúceho kroku.
    echo 'UUID=7b50de32-bac5-4a9d-bc57-6fb0f0de3a2d /mnt/imurepo xfs nosuid,nodev,nofail,x-gvfs-show 0 0' | sudo tee -a /etc/fstab
  6. V poslednom kroku si tento disk mountneme.
    sudo mount /mnt/imurepo

Užívateľ a nastavenie adresára

  1. Vytvoríme si servisného užívateľa.
    sudo useradd -d /home/repouser -m repouser -s /bin/bash
  2. Nastavíme mu heslo.
    sudo passwd repouser
  3. Pridáme ho medzi sudo užívateľov a skontrolujeme, či sa tak stalo. (Neskôr ho odoberieme)
    sudo usermod -a -G sudo repouser
    getent group sudo
    
  4. Zmeníme ownership adresára /mnt/imurepo.
    sudo chown -R repouser:repouser /mnt/imurepo/
  5. Nastavíme potrebné práva.
    sudo chmod 700 imurepo/

Bezpečnosť OS

Bezpečnosť Linuxu sa môže riešiť rôznymi spôsobmi. Ja som sa rozhodol v bode, keď to už z hľadiska inštalácie bolo možné, zakázať SSH prístup. Správu OS som vyriešil implementáciou Cockpitu, ktorým Linux spravujete cez webové rozhranie (môj článok), a aby som zabezpečil správu účtov a zároveň vynútil použitie MFA, implementoval som adresárovú službu JumpCloud (moje články tu a tu).

Ak by sa rozhodli aj vy pre túto kombináciu, a teda by ste chceli využiť MFA pri prihlasovaní sa do Cockpitu, potrebujete upraviť /etc/pam.d/cockpit takto:


#%PAM-1.0
# this MUST be first in the "auth" stack as it sets PAM_USER
# user_unknown is definitive, so die instead of ignore to avoid subsequent modules mess up the error code
-auth [success=done new_authtok_reqd=done user_unknown=die default=ignore] pam_cockpit_cert.so
auth required pam_sepermit.so
auth substack common-auth
auth required pam_google_authenticator.so nullok user=root secret=/etc/ssh/jumpcloud_totp/${USER}
#auth required pam_permit.so
auth optional pam_ssh_add.so
account required pam_nologin.so
account include common-account
password include common-password
## pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
## pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session optional pam_ssh_add.so
session include common-session
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session required pam_env.so user_readenv=1 envfile=/etc/default/locale

Po tejto zmene, vás už bude Cockpit pre overenie žiadať o 2. faktor.

Ak pre vás zakázanie SSH nie je cesta, upravte vaše /etc/ssh/sshd_config na odporúčané hodnoty. Prekonzultujte ich ale, s vašimi security odborníkmi, aby ste spĺňali štandard ktorí požadujú.

PermitEmptyPasswords no
PermitRootLogin no
ClientAliveINterval 300
MaxAuthTries 3
MaxStartups 3:50:50
LoginGraceTime 60
AllowUsers ucet1,ucet2,ucet3

Záver

Immutable repozitár máme z hľadiska OS nakonfigurovaný, môžeme ho pridať ako repozitár do VBR. To si ale ukážeme až v ďalšom článku.

Odkaz na 2. časť série:

Hardened (Immutable) Repository – part 2/2

Author: Martin

Infrastructure engineer | virtualization & cloud enthusiast | vSphere specialist | blogger | Veeam Vanguard 2021,2022,2023 | VMware vExpert 2017 - 2023 | VMCE | Slovak VMUG Leader |  user group ambassador for kmug.sk | husband&father