Očvršćenje GNU/Linux baziranih poslužitelja

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Josip Mlakar

Sadržaj

Ažuriranje

Ažuriranje operacijskog sustava je jedna od najvažnijih radnji vezanih za sigurnost. Redovito se otkrivaju nove slabosti sustava koje se ispravljaju ažuriranjem. Sustav koji se redovito ne ažurira ostaje izložen slabostima i s vremenom ga je sve lakše probiti. Ažuriranje Linux servera (Ubuntu distribucija )se može provesti naredbama:

sudo apt-get update
sudo apt-get dist-upgrade

Konfiguriranje vatrozida

Vatrozid služi kao barijera između servera i ostatka interneta. vatrozid analizira promet koji ulazi ili izlazi sa servera te ovisno o definiranim pravilima odlučuje hoće li propustiti taj promet. Postoji nekoliko rješenja za upravljanje vatrozidom.

Konfiguriranje SSH

SSH (secure shell) je kriptirani protokol za komunikaciju sa serverom. On omogućuje udaljeno upravljanje serverm što čini administriranje znatno fleksibilnije, ali i nesigurnije. Korisnik servera se tako može povezati sa serverom neovisno gdje se on nalazio ako ima korisničke podatke,tj. ne treba fizički biti povezan. Mogućnost udaljenog povezivanja omogućava potencijalnom napadaću da napadne server i pokuša dobiti korisničke podatke pa je potrebno pravilno konigurirati SSH.

Osnovne postavke

SSH možemo konfigurirati u datoteci sshd_config. Kako bi ju mijenjali potrebne su nam administratorske ovlasti, a nalazi se na putanji:

/etc/ssh/sshd_config

Preporuća se onemogućavanje spajanja preko root računa jer osim što root račun ima apsolutno sve ovlasti na serveru, njegovo korisničko ime je poznato (root) što olakšava brute force napade. Puno je teže pogoditi i korisničko ime i lozinku nego samo lozinku. Onemogućavanje spajanja preko root računa radimo tako što liniju

PermitRootLogin yes

mijenjamo u

PermitRootLogin no

Također dobro je promijeniti port preko kojeg se spajamo na server pomoću SSH. Standardno se spaja preko porta 22, a kako bi ga promijenili potrebno je izmjeniti liniju

Port 22

u bilo koji broj u rasponu od 1025 i 65536. Na primjer

Port 9000

Konfiguriranje autentikacije pomoću ključa

Lozinke za pristupanju korisničkom računu se šalju sigurnim kanalima, ali često nisu dovoljno komplicirani i dugački da bi spriječili potencijalne napadače. Stoga je preporučljivo koristiti autentikaciju preko ključa. SSH par ključeva su dva kriptografska ključaj. Privatni ključ posjeduje korisnik i on mora biti tajan, dok je javan ključ pohranjen na serveru i njegovo otkrivanje ne kompromitira sigurnost servera. Na serveru se javni ključ pohranjuje na lokaciji

~/.ssh/authorized_keys

Kreiranje para ključeva vrši se na korisnikovom računalu. Ključevi se generiraju naredbom

ssh-keygen

Korisnika se tada pita za lokaciju gdje će biti spremljeni ključevi. najbolje je samo pritisnuti enter i koristiti unaprijed postavljenu lokaciju. To je zato da SSH klijent može automatski pronaći SSH ključeve prilikom autentikacije. Ako se ostavi unaprijed postavljena lokacija, javni ključ se sprema na

/home/korisničko_ime/.ssh/id_rsa

a privatni na

/home/korisničko_ime/.ssh/id_rsa.pub

Od korisnika će se zatim zatražiti da unese lozinku za kriptiranje privatnog ključa. To nije obavezno i može se preskočiti pritiskom tipke enter.

Kopiranje javnog ključa na server

Kopiranje se može izvesti na više načina.

  1. kopiranje pomoću SSH-Copy-ID
    • najlakši način
    • na lokalnom računalu upisati naredbu ssh-copy-id korisničko_ime@adresa_servera
  2. kopiranje pomoću SSH
    • na lokalnom računalu unesti naredbu cat ~/.ssh/id_rsa.pub | ssh korisničko_ime@adresa_servera "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  3. ručno kopiranje
    • dobiti javni ključ na lokalnom računalu sa naredbom cat ~/.ssh/id_rsa.pub
    • na serveru kreairati mapu .ssh naredbom mkdir -p ~/.ssh
    • spremiti ključ sa echo javni_ključ >> ~/.ssh/authorized_keys
      • javni_kljuc predstavlja javni ključ dobiven prvim korakom

Zabrana autentikacije preko lozinke

Kako bi onemogućili prijavu preko lozinke tako da se korisnik može spojiti samo preko ključa, potrebno je malo izmjeniti sshd_config. Potrebno je promijeniti

PasswordAuthentication yes

u

PasswordAuthentication no

Password Aging

Redovita promjena lozinke čini korisnički račun sigurnijim. Nažalost korisnici nemaju uvijek naviku redovito mijenjati svoju lozinku do te mjere da čak ostave početnu lozinku koju im je dodjelio administrator. Tome problemu se može priskočiti tako da se korisnika prisili na redovito mijenjanje lozinke. To se može napraviti pomoću naredbe chage. opcije naredbe chage su sljedeće:

Primjer korištenja chage naredbe:

chage -M 60 -m 10 -W 5 korisnik

U primjeru je postavljeno da lozinka vrijedi 60 dana, da se može promijeniti nakon 10 dana i da će se poruka upozorenja prikazivati 5 dana prije isteak lozinke.

Sigurnosne kopije

Ukoliko se na server pohranjuju važni podaci, vrlo je važna izrada njihove sigurnosne kopije. Sigurnosna kopija omogućava povrat podataka koji bi inaće bili izgubljeni ukoliko bi došlo do kvara servera. Postoji više alata za izradu sigurnosne kopije na Linux serverima, neki od njih su:

  1. fwbackups
  2. Bacula
  3. Rsync
  4. Mondorescue
  5. Simple Backup Solution

Rsync

Rsync je jedan od najčešće korištenih alata za kopiranje i sinkroniziranje podataka. Omogućava sigurnosno kopiranje i lokalno i globalno. Osnovna sintaksa:

rsync opcije izvor odrediste

Osnovne opcije Rsync-a:

Lokalno sigurnosno kopiranje

rsync -opcije izvorna_datoteka/folder odredišna_datoteka/folder

Sigurnosno kopiranje na server

rsync -opcije lokalna_datoteka/folder korisničko_ime@adresa_servera:/putanja

Kopiranje sa servera ima istu sintaksu samo se zamjene izvor i odredište.

Sigurnosno kopiranje preko SSH

rsync opcije -e ssh 'korisničko_ime'@'adresa_servera':izvorisna_datoteka/folder odredišni_folder

Ukoliko se preko SSH ne spaja na standardni port (22) potrebno je izmjeniti naredbu:

rsync opcije -e "ssh -p broj_porta" 'korisničko_ime'@'adresa_servera':izvorisna_datoteka/folder odredišni_folder

Upravljanje paketima i servisima

Svaki instalirani servis znači dodatnu potencijalnu ranjivost servera. Zato je bitno voditi računa o instaliranim paketima i koristiti samo one servise koji su nužni za rad.

Paketi

Kako bi vidjeli listu instaliranih paketa možemo koristiti naredbu

dpkg --get-selections

Za filtriranje liste paketa možemo koristiti grep pa tako ako želimo vidjeti sve python pakete možemo upisati:

dpkg --get-selections | grep python

Ako želimo vidjeti lokacije svih datoteka određenog paketa možemo koristiti -L. Primjer:

dpkg -L python3.4

Brisanje paketa vršimo naredbom:

apt-get remove ime_paketa

Servisi

Kako bi izlistali sve servise koristimo naredbu:

service --status-all

Servise gasimo naredbom:

service ime_servisa stop

Servise palimo naredbom:

service ime_servisa start

Servise resetiramo naredbom:

service ime_servisa restart

Kako bi dobili trenutni status servisa koristimo:

service ime_servisa status

Kriptiranje

Datoteke koje su osjetljive i vrlo bitne možemo dodatno zaštiti tako da ih kriptiramo.

encfs

Encfs je vrlo jednostavna aplikacija za kriptiranje mapa. Instalira se naredbom:

apt-get install encfs

Kako bi kreirali mapu u koju želimo spremati osjetljive podatke koristimo sintaksu:

encfs 'putanja_do_kriptirane_mape' 'putanja_do_mape_koju_želimo_kriptirati'

Aplikacija nas tada pita za ključ kojim ćemo kasnije moći dekriptirati podatke. Kada spremimo sve željene podatke u mapu koju želimo kriptirati koristimo naredbu:

fusermount -u ~/'putanja_do_mape_koju_želimo_kriptirati'

Tada će se u kriptiranu mapu pohraniti kriptirani podaci, a podaci iz mape kou želimo kriptirati će nestati. Kako bi vratili podatke ponovno unosimo naredbu kao i za kreiranje mapa. Aplikacija će nas zatim tražiti za ključ. Ukoliko je ključ ispravan, mapa sa podacima koje smo htjeli kriptirati će opet sadržavati čitljive podatke.

Sustavi za detekciju upada

Implementacija sustava za detekciju upada je jedna od najvažnijih stvari vezanih za sigurnost servera. Pomoću njih možemo vrlo lako pratiti promjene u konfiguraciji ili ostalim podacima na serveru kako bi što lakše mogli otkriti i sankcionirati neovlaštene upade i štetu na serveru. Postoji nekoliko sustava za detekciju upada za Linux sustave. Neki od njih su:

AIDE

Aide radi tako da kreira bazu sa stanjem sustava u tom trenutku i onda kasnije uspoređuje te podatke sa trenutnim stanjem sustava. Ukoliko je došlo do promijena Aide ispisuje izvještaj o svim promjenama između trenutnog i početnog stanja. Ukoliko je na serveru postavljen e-mail server Aide se može postaviti tako da šalje izvještaje na e-mail. Aide se može instalirati naredbom:

apt-get install aide

Porebno je prvo kreirati bazu sa početnim stanjem. Bazu kreiramo naredbom:

sudo aide -c /etc/aide/aide.conf --init

Novokreirana baza se nalazi na lokaciji

/var/lib/aide/aide.db.new

Poželjno je preimenovati bazu tako da nova baza ne prepiše ovu, tada već staru bazu.

mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Ako želimo provjeriti jesu li se u međuvremenu dogodile kakve promjene, koristimo naredbu:

aide -c /etc/aide/aide.conf -u

-u nam služi da opet generiramo novu bazu koja sadrži podatke u trenutku provjere. Poželjno je nakon toga ponovno preimenovati bazu, kako bi mogli ponoviti postupak.

sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Konfiguriranje Aide

Konfiguraciju mapa koje će Aide uzimati u obzir možemo definirati u datoteci aide.conf koja se nalazi na lokaciji:

/etc/aide/aide.conf

Kako bi odredili koje mape ulaze u obzir u datoteku jednostavno dodamo željenu putanju i pravila. Na primjer:

/etc p+u+g

Ukoliko želimo da na Aide šalje e-mail sa izvještajem, e-mail adresu možemo definirati u datoteci aide koja se nalazi na lokaciji:

/etc/default/aide

Ovdje promijenimo vrijednost

MAILTO=root

u

MAILTO=željena_e-mail_adresa

Analiza log datoteka

Log datoteke su uglavnom tekstualne datoteke u kojima se nalaze podaci o aktivnostima na serveru. Log datoteke su vrlo iscrpne i potrebno je dosta vremena kako bi se ručno analizirale. Kako bi se olakšao posao analiziranja log datoteka postoje aplikacije koje iz log datoteka izvlače podatke potrebne administratoru i prikazuju ih u obliku izvještaja.

Logwatch

Logwatch je jedan od takvih alata. Možemo ga instalirati naredbom:

apt-get install logwatch

Logwatch možemo konfigurirati u datoteci logwatch.conf koja se nalazi na lokaciji:

/usr/share/logwatch/default.conf/logwatch.conf

Ukoliko želimo da nam izvještaji dolaze na e-mail moramo promijeiti liniju

MailTo = root

u

MailTo = željena_email_adresa

Izvještaji se mogu dobivati za jučerašnje stanje, današnje stanje ili za stanje od instalacije aplikacije. To definiramo u liniji:

Range = Today

Izvještaji mogu dolaziti u više razina detalja, ovisno o tome koliko želimo da nam bude iscrpan. Postoje tri razine iscrpnosti, Low, Medium i High. TRazinu iscrpnosti možemo definirati u liniji:

Detal = Medium

Za određivanje servisa koji će se analizirati dodajemo linije:

Service = [ime]

ili ako želimo obuhvatiti sve usluge:

Service = all

Logwatch se pokreće dnevno i šalje izvještaje na e-mail. Ako ga želimo pokrenuti ručno koristimo sintaksu:

logwatch  [--detail  level  ] [--logfile log-file-group ] [--service service-name ] [--print]
  [--mailto address ] [--archives] [--range range  ]  [--debug  level  ]  [--save  file-name  ]
  [--logdir  directory ] [--hostname hostname ] [--splithosts] [--multiemail] [--output output-
  type ] [--numeric] [--no-oldfiles-log] [--version] [--help|--usage]

Primjer:

logwatch --detail Medium --service all --range today

Fail2Ban

Fail2ban je servis koji automatski mijenja pravila vatrozida ovisno o predefiniranom broju neuspjelih prijava na server preko SSH protokola. To znači da je glavna uloga Fail2Ban servisa zabraniti pristup onim ip adresama koje pokušavaju brute-force metodom doći do korisničkih podataka korisnika na serveru. Na taj način se mogu spriječiti zloćudne aktivnosti na serveru bez da intervenira čovjek. Fail2Ban se može instalirati naredbom:

sudo apt-get install fail2ban

Konfiguracija Fail2Ban servisa se vrši u datoteci jail.conf. Postoji mogućnost da ažuriranje nekog paketa modificira jail.conf pa je poželjno napraviti kopiju i raditi na njoj.

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Od bitnijih stvari koje se mogu konfigurirati je ignoreip. Njime zadajemo koje ip adrese neće biti blokirane iako prekrše definirana pravila.

ignoreip = željena_adresa

Parametar bantime označuje vrijeme u sekundama koje će ip adresa biti blokirana.

bantime = vrijeme_u_sekundama

Parametar maxretry označuje koliko se puta mogu unesti pogrešni podaci prije nego se blokira ip.

maxretry = 3

Parametar findtime označuje vremenski okvir u sekundama unutar kojeg se broje neuspjeli pokušaji. Na primjer ako je zadano

findtime = 100
maxretry = 3

ip se blokira ako je s te ip adrese bilo tri neuspjela pokušaja prijave unutar 100 sekundi.

Parametar destemail označuje na koju e-mail adresu se trebaju slati izvještaji, a parametar mta koji mail servis će se koristiti za slanje maila.

destemail = e-mail_adresa
mta = e-mail_servis

Parametar action definira radnju koju će Fail2Ban poduzeti kada otkrije zloćudnu radnju. Vrijednost action_ znači da će se konfigurirati vatrozid tako da odbija promet sa sumnjivog ip-a. Vrijednost action_mw znači sve što i action_ osim što se šalje i e-mail sa obavijesti. Vrijednost action_mwl u mailu šalje i log.

action = $(action_)s

Literatura

https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/

http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/

https://help.ubuntu.com/community/FolderEncryption

http://www.tecmint.com/linux-server-hardening-security-tips/

http://www.cyberciti.biz/tips/linux-security.html

https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps

http://www.howtoforge.com/linux-security-notes-aide-file-integrity

http://www.cs.tut.fi/~rammer/aide/manual.html

http://pka.engr.ccny.cuny.edu/~jmao/node/30

https://www.digitalocean.com/community/tutorials/how-to-install-aide-on-a-digitalocean-vps

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps

https://pelanne.com/blog/get-daily-server-overview-email-logwatch/

http://www.debianhelp.co.uk/logwatch1.htm

http://linux.die.net/man/8/logwatch

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-fail2ban-on-ubuntu-14-04

http://www.the-art-of-web.com/system/fail2ban/

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima