Professional Documents
Culture Documents
Sadržaj
1. Uvod............................................................................................................................................1
4.2 Servisi..................................................................................................................................18
4.4 Revizija................................................................................................................................25
5. Zaključak...................................................................................................................................36
6. Literatura....................................................................................................................................37
7. Popis slika..................................................................................................................................38
1. Uvod
U ovom projektu, preko danih uputa, kreirat ćemo WordPress stranicu, koju će pokretati
sigurnosno ojačana virtualna mašina sa CentOS 7 operacijskim sustavom. Na toj mašini bit će
pokrenut Apache web server koji će podržavati spomenutu stranicu.
U prvom dijelu ovog projekta nakon instaliranja Apache servera i MariaDB softwarea,
(koji služi za upravljanjem MySQL sustavom), prikazat ćemo postupak kreiranje MySQL baze
podataka, u kojoj ćemo kreirati novu bazu podataka za WordPress aplikaciju, osim baze, kreirat
ćemo novog korisnika za WordPress aplikaciju. Nakon kreiranja WordPress-a i konfiguriranje
stranice. Moramo ojačati sigurnost na WordPress stranici, to ću postići dodavanjem zadanih
certifikata koje ćemo preuzeti sa stranice Infoeduka. Ako je sve dobro konfigurirano, nova
stranica bi trebala podržavati samo HTTPS protokol koji je zaštićen SSL certifikatima, koji su
preuzeti sa stranice Infoeduka. Nakon toga, dodavanjem raznih programskih dodataka unutar
WordPress aplikacije, postići ćemo dodatnu zaštitu za novokreiranu WordPress stranicu.
Nakon ojačavanja WordPress-a, u drugom dijelu zadataka potrebno je dodatno osigurati
CentOS 7 mašinu da se minimalizira mogućnost hakerskih napada i ostalih prijetnji. To ćemo
postići pomoću služnog CIS Benchmark-a i ostalih preporučenih internatskih izvora.
1
2. Instaliranje WordPress aplikacije
2
MariaDB je komercijalna inačica MySQL sustava, stoga moramo instalirati i „originalni“
MySQL paket, koji će raditi preko MariaDB softwarea. MySQL software ćemo instalirati
naredbom: „mysql_secure_installation“, koji nakon pokretanja traži, da zadamo novu lozinku za
ulazak u MariaDB konzolu. Nakon toga, redoslijedno se ispisuju sljedeća pitanja: za brisanje
anonimnih korisnika, za zabranu prijave „root“ računa u daljinskom načinu rada i za brisanje
probnih tablica. Za sva pitanja se preporučuje odgovor „y“, odnosno potvrdom opcije.
Sada je još ostalo da instaliramo PHP paket programa, da možemo otvoriti buduću
stranicu u standardnom obliku, jer u suprotnom bez PHP jezika, stranica bi bila samo HTML
skripta. Ovaj paket programa ćemo instalirati naredbom: „yum install php php-pear php-mbstring
php-gd php-mysql –y“.
Nakon uspješno pokrenuti instaliranih softwarea, moramo konfigurirati firewall pravila,
da dopusti komunikaciju instaliranim servisima. Za Apache server dodat ćemo pravilo da
propušta HTTPS promet, to ćemo postići naredbama: „firewall-cmd --permanent --add-
service=http(s)“, a za MySQL naredbom: „firewall-cmd --permanent --add-service=mysql“.
Nakon postavljanja podloge instaliranjem navedenih programa i servisa, sada možemo
krenuti s instaliranjem WordPress-a, ali prije toga moramo kreirati novu bazu podataka, u kojoj
će biti registriran korisnik koji će imati sva prava za korištenje WordPress-a. Osim toga u novoj
bazi bit će spremljene tablice ostalih potrebnih konfiguracija, koje će se automatski kreirati.
Da bismo kreirali novu bazu podataka, preko komande „mysql -u root -p“, moramo ući u
MariaDB konzolu. Kada upišemo šifru koju smo postavili u prethodnom koraku, uspješno smo
se ulogirali, te možemo kreirati novu potrebnu bazu podatka. Pri kreiranju baze moramo joj
dodijelit standardni transformacijski format UTF8, stoga ćemo kreirati bazu sljedećom
komadom: „create database wordpress default character set utf8 collate utf8-unicode_ci“, a
provjeru uspješnog kreiranja možemo napraviti kako je prikazano na slici 4. Kreiranje korisnika
vršimo naredbom: „create user wordpressuser@localhost identified by '*******“, u kojoj
kreiramo korisnika i dodjeljujemo zaporku. Nakon kreiranja korisnika, moramo mu dati sva
administratorska prava nad novo kreiranom bazom to ćemo postići komandom: „Grant all
privileges on wordpress.* to wordpressuser@localhost“. Završni korak kreiranja baze i korisnika
je naredba: „Flush privileges“ kojom kažemo MySQL-u da je došlo do promjene koje mora
registrirati da bi bilo željenog učinka Na slici 3. možemo vidjeti da smo uspješno kreirali novu
bazu podataka imena „wordpress“.
3
Slika 3. Lista postojećih baza podataka
Kada smo utvrdili pomoću „ls“ komadne, da smo uspješno preuzeli zip datoteku, trebamo
je otpakirati, to ćemo napraviti pomoću naredbe „tar -xvf latest.tar.gz“. Nakon otpakiranja
datoteke unutar novonastale mape „wordpress“, kopiramo u izvorni direktoriji „html“, to ćemo
učiti naredbom: „cp -rf wordpress/* /var/www/html/“, nakon toga možemo izbrisati novonastalu
mapu i zip datoteku. Sljedeći korak je da novonastalim konfiguracijskim datotekama dodijelimo
vlasništvo. Vlasništvo u ovom slučaju moramo dodijeliti Apache korisnicima, a to ćemo postići
naredbom: „chown -R apache:apache /var/www/html/*“. S ovim pravom Apache web server će
moći manipulirati s novim konfiguracijama.
4
Slika 5. Sadržaj direktorija „html“
Nakon toga slijedi jedan od najvažnijih koraka pri instalaciji WordPress-a, ostajemo u
„html“ direktoriju, i moramo kreirati novu konfiguracijsku datoteku, koja se zove „wp-config“, u
kojoj spajamo kreiranu bazu podataka i korisnika s Apache serverom. Novu datoteku kreiramo iz
trenutne datoteke „wp-config-sample-php“ i pomoću naredbe: „cp wp-config-sample.php wp-
config.php“, dobijemo potrebnu datoteku. U njoj, kako je prikazano na slici 6. dodjeljujemo
parametre koje smo kreirali u MySQL-u, te je konfiguracija WordPress-a završena. Nakon toga
ponovo pokrenemo Apache web server naredbom: „systemctl httpd restart“.
Sada slijedi trenutak istine, da vidimo dali smo sve dobro konfigurirali. Otvorimo web
preglednik, i upišemo IP adresu CentOS7 mašine, i ako je sve dobro trebao bi se učitati obrazac
koji nas traži da odaberemo jezik, nakon odabira, otvori se novi obrazac kao na slici 7., gdje
5
trebamo popuniti podatke: ime stranice, ime korisnika, lozinku i e-mail, te kliknuti na opciju
„Install WordPress“. Nakon popunjavanja obrasca, otvara se novi obrazac preko kojeg se
ulogiramo s novo kreiranim podacima, u WordPress aplikaciju.
Kada se ulogiramo dočeka nas radna ploča Wordpress-a, i traži nas da izaberemo podlogu web
stranice, nakon odabira kliknemo na link stranice, te nas doček prizor kao na slici 8.
6
Slika 8. Prikaz novokreirane WordPress stranice
7
3. Konfiguriranje Apache servera i sigurnost WordPress stranice
8
Sada možemo uči u konfiguraciju Apache servera preko komadne: „nano
/etc/httpd/conf/httpd.conf “. Kada otvorimo konfiguraciju odemo na dno stranice i gdje moramo
inicirati ime za novo kreiranu stranicu. Pošto certifikati rade samo na zadanoj domeni, naš server
se mora zvati „wpsercure.vua.cloud“. a konfiguracija je prikazana na slici 11. U kojoj osim
imena servera, lokacije dokumenta, lokacije aktivnosti pogreška i pristupa moramo dodati
parametre koje se tiču certifikata. Osim toga moramo promijeniti postavku „Listen“ kako je
prikazano na slici 12, u kojoj brišemo generički zadani port 80 koji predstavlja HTTP protokol i
iniciramo protokol 443 koji je HTTPS. Sada Apache server se može povezati samo s portom od
HTTPS-a.
Slika 11. Konfiguriranje Apache web servera, kreiranje novog virtualnog hosta
9
Završni korak je da se otiđemo na host računalo i dodamo IP adresu i ime servera u
datoteci „hosts“, koja se nalazi na lokaciji „C:\Windows\System32\drivers\etc“. Sada će naše
računalo moći komunicirati s Apache Web serverom, te će se moći povezati s njim.
Ako je sve dobro konfigurirano, uputimo se u web preglednik te upišemo ime stranice
„wpsecure.vua.cloud“ , te ako je prikazan znak lokota pored imena, znamo da su certifikati dobro
konfigurirani.
10
Nakon implementacije Wordpress stranice i dodavanje potrebnih certifikata, sljedeće što
moramo je dodati programske dodate (Plugins), preko kojih ćemo ojačati sigurnost naše stranice.
Odabrali smo 4 dodatka, koji su prikazani na slici 15.
Hide WP Login- Ovaj dodatak će sakriti WP login postavke, odnosno promijeniti će URL
za prijavu u stranicu. Tako umjesto https://wpsecure.vua.cloud/wordpress/wp-login.php, bit će
potrebno upisati https://wpsecure.vua.cloud/wordpress/wp-login.php?hide_my_wp=1234.
UpdraftPlus- ovaj dodatak radi sigurnosnu kopiju stranice, te je sprema na lokalni ili
vanjski izvor (Amazon S3, Google Drive Dopbox).
WP fail2ban- Ako napadač dozna sakrivenu URL stranicu za prijavu, te pokuša Brute
Force napad, ovaj dodatak koji je povezan sa serverom, radi odličnu zaštitu da se napada sa
određenih IP adresa ne ponovi. Administrator u fail2.ban.log datoteci, ima pregled pokušaja
napada, te može napadačevu IP adresu blokirati trajno ili na određeno vrijeme.
11
4. Ojačavanje CentOS 7 mašine
U ovom dijelu moramo onemogućiti određene datotečne sustave. Kako Linux operacijski
sustav razumije mnogo datotečnih sustava, to predstavlja veću mogućnost prijetnje serveru. Da
bismo onemogućili datotečne sustave, to ćemo učiti pomoću programa „modprobe“. Trebamo
onemogućiti sljedeće datotečne sustave: cramfs, squshfs, udf i FAT. Za svaki spomenuti
datotečni sustav moramo upisati komandu „modprobe -n -v (ime modula). Parametar -n koristi
će za brisanje modula, dok će parametar -v ispisati poruku ako dođe do greške. Nakon toga
kreirati novu konfiguracijsku datoteku na lokaciji „/etc/modprobe.d/CIS.conf “ i upisat sve
datotečne sustave koje želimo ugasiti kao što je prikazano na slici 16.
12
Također trebamo zabraniti i mogućnost USB i FireWire memorije, u istoj
konfiguracijskoj datoteci dodat ćemo 3 linije:
blacklist usb-storage
blacklist firewire-core
install usb-storage /bin/true
Zatim ćemo zabraniti pristup memoriji jezgre „core dumps“, u kojem se mogu nalaziti
razni osjetljivi podaci i ostale mogućnosti manipulacije u jezgri kao: zahtjev za ispravljanje
pogreška, pristup zapisa, randomiziranje memorijskog prostora i skrivanje pokazivača jezgre, u
konfiguracijskoj datoteci /etc/sysctl.conf, moramo dodati sljedeće parametre:
fs.suid_dumpable = 0
kernel.dmesq_restrict = 1
kernel.randomize_va_spaca = 2
kernel.kptr_restrict = 2
13
komande „chmod 3777 /tmp“, kojom dajemo prava samo root administratoru i vlasniku podataka
koje se nalaze u direktoriju. Nakon završetka moramo otići u konfiguracijsku datoteku /etc/fstab
i dodati novo kreiranu particiju, kao što je prikazano na slici 18. Nakon kreiranja svih zasebnih
particija /etc/fstab/ bi trebao izgledati kao na slici 19.
14
Slika 19. Konačna lista kreiranih zasebnih particija
Sljedeće morao konfigurirati ažuriranje softwarea, u kojem moramo provjeriti sa kojeg izvora
preuzimamo pakete preko komade yum repolist, te kako većina Packet Manager-a ima
implementiran GPG ključ, morao ga verificirati, kako je prikazano na slici 20
Zatim trebamo instalirati alat AIDE koji uzima snimak, odnosno „snapshot“ stanja
datotečnih sustava, koji prati modifikacije, dopuštenja i podatkovni hash, te uspoređuje i
detektira promjene ako do njih dođe. Nakon instalacije potrebno je inicijalizirati, narednom „aide
–init“, te tako kreiramo repozitoriji u kojem bilježi promjene. Da vidimo, dali radi kako treba,
otvorili smo direktoriji „/etc/modprobe.d/CIS.conf,te namjerno maknuli onemogućeni FAT
datotečni sustav, koji smo postavili da je ne omogućen, te upisali komadu „aide -check“ i na slici
21. možemo vidjeti da je promjena detektirana. Osim toga, možemo napraviti i cron zadatak koji
provjerava integritet datotečnih sustava, svaki dan u određeno vrijeme, moramo otvoriti crontab,
u root računu komadom: „ crontab -u root -e“, zatim dodati zadatak, koji će provjeravati
integritet svaki dan u 5 sati ujutro naredbom „0 5 * * * /usr/sbin/aide –check“.
15
Slika 21. AIDE popis promjena
16
Slika 22. Davanje root prava za bootloader konfiguraciju
Sljedeće što trebamo je postaviti 3 banera: poruku dana, lokalni login baner i remote
login banner. U kojoj trebamo napisati poruke, koje upozoravaju goste servera, da je pod
nadzorom ili slično. Ove tri poruke treba upisati u konfiguracijske datoteke /etc/motd , /etc/issue
i /etc/issue.net, na slici 23 vidimo prikaz konfiguriranih banera. Da bismo konfigurirali banner za
SSH moramo otiči u konfiguracijsku datoteku „/etc/ssh/sshd_config“ i inicirati novokreirani
baner, dodavanjem linije „Banner /etc/issue.net“
17
4.2 Servisi
18
4.3 Mrežna konfiguracija
Prvo trebamo onemogućiti da izvorni paketi budu preusmjereni, to ćemo učiti dodajući dvije
linije u konfiguracijsku datoteku.
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
Zatim treba zabraniti mogućnost ICMP preusmjeravanja od svih izvora, dodavanjem linija
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
Komande:
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0
19
sysctl -w net.ipv4.conf.all.secure_redirects=0
sysctl -w net.ipv4.conf.default.secure_redirects=0
Zatim treba omogućiti administratoru da pregledava sumnjive pakete, koji možda dolaze od
strane napadača.
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.default.log_martians = 1
Komande:
sysctl -w net.ipv4.conf.all.log_martians=1
sysctl -w net.ipv4.conf.default.log_martians=1
net.ipv4.icmp_echo_ignore_broadcasts = 1
Komanda:
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses = 1
Komadna:
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
Slijedi onemogućavanje IPv6 protokola. Pošto ovaj server radi preko IPv4 protokola
preporučuje se da se ovaj protokol onemogući. Ostajemo u istoj konfiguracijskoj datoteci
/etc/sysctl.conf u kojoj prvo moramo zabraniti reklame od IPv6 rutera, koje bi mogle usmjeriti
promet na kompromitirane strojeve.
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
20
Komade:
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.default.accept_redirects=0
Zatim treba zabraniti istu stavku kao i za prethodni protokol, preusmjeravanje paketa od
svih izvora, također u istoj konfiguracijskoj datoteci.
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
Komade za verifikaciju:
sysctl -w net.ipv6.conf.all.accept_ra=0
sysctl -w net.ipv6.conf.default.accept_ra=0
21
Da bi smo potpuno ugasili ovaj protokol, vračamo se u konfiguracijsku datoteku
/etc/modprobe.d/CIS.conf i dodajemo liniju „options ipv6 disable=1“. Također možemo zabraniti
i Bluethoot modula u jezgri operacijskog sustava, dodavanjem linija:
Sljedeće trebamo onemogućiti 4 mrežna protokola: DCCP, SCTP, RDS i TICP, koji nisu
potrebni za ovaj server, a predstavljaju mogućnost prijetnje. Ostajemo u konfiguracijskoj
datoteci /etc/modprobe.d/CIS.conf, u kojoj ćemo dodati 4 linije za njihovo onemogućavanje.
Slijedi konfiguracija firewall-a, prvo trebamo onemogućiti alat firewalld, te instalirati alat
IP tables, njihova uloga je ista: filtriranje paketa, ali alat iptables obnavlja sva grupna pravila
kada se napravit promjena, za razliku od firewalld alata. Stoga prvo trebamo onemoćati firewalld
alat i staviti mu maskiranu ulogu, odnosno onemogućiti njegovo pokretanje iz razloga, da ne
dođe do sukoba pravila između 2 firewall alata u jezgri os-a. Onemogućavanje firewalld-a,
instalaciju iptables-a napravit ćemo sljedećim komandama:
22
Nakon toga u novokreiranoj datoteci „/etc/sysconfig/iptables“ ćemo napraviti
konfiguraciju firewall-a. Kako se firewall dijeli u 3 lanca pravila: input, output i forward, za
svaki trebamo napraviti izbrisati sva postojeća pravila dodavanjem linija:
-F INPUT
-F OUTPUT
-F FORWARD
Kako u ovom scenariju imamo samo jedan server koje nije router za druge servere,
moramo zabraniti opciju lanca Forward, a potvrditi ostale opcije.
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P FORWARD DROP
Slijedi inicijalizacija pravila koja nam trebaju za naš server, dopuštenih pravila treba biti
minimalno, da bismo smanjili broj neželjenih paketa. Prvo ćemo dodati pravilo za loopback
promet koji mora ostati unutar lokalnog servera, znači da mora prihvaćati promet jedino na
adresi 127.0.0.0/8, a ostale odbiti.
Zatim dozvoljavamo ulazni promet na SSH portu, na mreži u kojoj je server, odnosno
mogućnost SSH konekcije onih uređaja koji su unutar mreže, te istoj mreži zabranjujemo
unutarnji promet sljedećih protokola FTP, telnet i HTTP.
Također dozvolit ćemo ulazi i izlazni promet nad protokolima TCP I UDP
23
-A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
24
4.4 Revizija
max_log_file = 25
Ako se dnevnik revizije napuni to može uzrokovati velike probleme za sigurnost sustava,
da bismo spriječili taj rizik, konfigurirat ćemo da nas Linux obavijesti preko mail-a ako dođe do
te situacije, te će onemogućiti sustav. Osim toga postavit ćemo kada se napuni dnevnik da zapisi
ostaju netaknuti, odnosno da se ne izbrišu automatski.
space_left_action = email
action_mail_acct = root
admin_space_left_action = halt
max_log_file_action = keep_logs
25
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
Nadalje moramo postaviti pravila u slučaju promjena unutar mreže i njene okoline,
preciznije promjena imena servera ili domene. Također moramo promatrati šta korisnik radi u
sustavu prateći njegovu sesiju, a informacije koje nas zanimaju su: prijava, odjava, gašenje i
ponovo pokretanje servera, te koliko se puta pokušao prijaviti na sustav.
SELinux kontrolne liste, su važan faktor svakog operacijskog sustava, jer preko njih
napadač može promijeniti dozvole i pravila nad različitim resursima, koji mogu biti vrlo opasni
po operacijski sustav, zato moramo nadzirati njihove promjene.
26
-w /etc/selinux/ -p wa -k MAC-policy
Moramo dodati pravilo koje će pratiti aktivnost korisnika, odnosno korisnikovu zadnju
i/ili neuspješnu prijavu na servera.
-w /var/log/lastlog -p wa -k logins
-w /var/run/faillock/ -p wa -k logins
27
a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F
exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
find sda2 -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print "-a
always,exit -F path=" $1 " -F perm=x -F auid>=1000 -F auid!=4294967295 -k
privileged" }'
Također trebamo registrirati sistemski poziv mount, koji služi za montiranje datotečnih
sustava na particije, zato ćemo dodati dva pravila pomoću kojih će se u dnevnik revizije zapisati
uspješni i neuspješni pokušaji montiranja.
Kako u Linuxu postoji sudo korisnici koji imaju administratorska prava nad sustavom,
moramo zapisati dali je došlo do promjene u konfiguracijskoj datoteci /etc/sudoers, u kojoj se
nalaze konfiguracije za privilegirane korisnike. Također njihove napravljene provjere se nalaze u
datoteci /var/log/sudo.log, stoga i tu datoteku trebamo implementirati u reviziju.
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d -p wa -k scope
28
-w /var/log/sudo.log -p wa -k actions
Također moramo postaviti nadzor nad promjenama u jezgri preko modula insmod,
rmmod i modprobe.
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit arch=b64 -S init_module -S delete_module -k modules
-e 2
29
4.5 Pristup i autentikacija
U ovom poglavlju konfigurirati ćemo kontrolu pristupa serveru, ovo poglavlje započeti
ćemo konfiguraciju cron demona, koji ćemo ograditi vlasništvo na root račun, te tako
onemogućiti drugim korisnicima da izvršavaju cron zadatke.
Prvo moramo zaštiti direktorije/etc/crontab/ i /etc/cron.d, te postaviti vlasništvo samo na
root korisnika.
Zatim treba zaštiti vremenske cron direktorije za sat, dan, tjedan i mjesec
30
touch /etc/at.allow
chmod og-rwx /etc/cron.allow #određivanje prava
chmod og-rwx /etc/at.allow
chown root:root /etc/cron.allow #određivanje vlasništva
chown root:root /etc/at.allow
Sljedi konfiguracije SSH alata, koji služi za povezivanje na lokalni server, pošto je ovo
jako osjetljiv alat, i postoji mnogo zlonamjernih software-a za hakiranje ovog alata, ova
konfiguracija mora biti maksimalno sigurna. Prvo trebamo zadati prava da samo root račun može
manipulirati konfiguraciju SSH alata.
Pošto postoje dvije verzije SSH protokola, moramo uključiti drugu verziju koja je novija i više
sigurnija. Moramo otići u konfiguracijsku datoteku /etc/ssh/sshd_config, i postaviti parametar
„Protocol 2“.
Kako SSH omogućuje nekoliko načina prijava, korisnicima servera postaviti ćemo INFO
level, koji zapisuje bazične aktivnost od SSH korisnika, da bismo to učinili u istoj datoteci
dodajemo zapis „LogLevel INFO“.
Kako bi izbjegli Brute-force napad, u kojem haker isprobava beskonačan broj pokušaja
ulaska u server pogađanjem zaporki, moramo postaviti ograničenje pokušaja prijave u sustav, u
ovom primjeru stavit ćemo 4, dodajući liniju „MaxAuthTries 4“, osim toga postavit ćemo da
vrijeme za prijavu bude 60 sekundi dodavanjem linije „LoginGraceTime 60“.
Slijedeće moramo postaavii parametar u kojem korisnike tražimo zaporku pri ulasku u
server, to ćemo uspjeti dodavanjem parametra „IgnoreRhosts yes“, zatim moramo zabraniti
mogućnost „Host based Authentication“, koja korisniku SSH-a, ne traži posebni ključ za ulazak
u server, stoga ovaj način nije siguran te ga moramo zabraniti.
Kako root korinsik ima sva prava na serveru, moramo zabraniti SSH konekciju, jer ako se
haker domogne root računa može, te se spoji preko SSH konekcije, ima pristup svemu na
serveru. To ćemo onemoćati dodavanjem linije „PermitRootLogin no“.
Sljedeće moramo onemogućiti mogućnost prazne zaporke, jer ako netko dođe do
korisničkog računa koji nema zaporku, može ući u server, bez problema, to ćemo onemogućiti
31
dodavanjem linije „PermitEmptyPasswords no“.
Da bi se minimalizirala mogućnost zaobilaznija sigurnosne kontrole preko različitih
putanja i mehanizma npr. LD_PRELOAD, moramo postaviti ograničenje
„PermitUserEnvironment no“.
Kako je SSH protokol jako osjetljiv na napade, moramo postaviti Counter algoritam, koji
može minimalizirati pokušaj chosen-plaintext napada, koji pokušava smanjiti sigurnost
postavljenje šifre. To ćemo napraviti dodavanje linije: „Ciphers aes256-ctr,aes192-ctr,aes128-
ctr“. Da bi zaštiti SSH tunel moramo postaviti samo određene MAC algoritme, koji se koriste pri
SSH komunikaciji, prema benchmark-u moramo postaviti sljedeći parametar:
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-
etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
Važno je i postaviti vremensko razbolje ne-aktivnosti na serveru, iz razloga, ako npr. korisnik
se udalji od računala, netko može sjest na njegovo mjesto, te manipulirati serverom, stoga ćemo
postaviti da klijent nasmije biti neaktivan više od 5 minuta, naredbama:
ClientAliveInterval 300
ClientAliveCountMax 0
Sada moramo konfigurirati koji korisnici imaju mogućnost SSH konekcije, a kojim imaju
zabranu. Preko parametra „AllowUsers“, dodajemo imena korisnika koji se mogu spojiti, a
preko DenyUsers, dodajemo imena koje nemaju to pravo.
u kojima inicijaliziramo modul pravila zaporka, uz dodatan parametra „try_first_pass retry“, koji
iz prošlog PAM modela uzima zaporku računa, ako postoji. U slučaju nepostojanja korisnik
mora postaviti novu zaporku. Parametar retry=3 dozvoljava tri pokušaja prijave, u slučaju
neuspješne prijave šalje se poruka neuspjeha. Nakon toga ulazimo u konfiguracijsku datoteku
32
/etc/security/pwquality.conf u kojoj postavljamo opcije zaporke, kao što su minimalna dužina,
obavezna znamenka, specijalan znak, veliko i malo slovo. Primjer ove zaporke je
„dZcLYWpVqdCZeguK*e“.
Slika xy prikazuje kreiranja novog korisnika i postavljanja njegove šifre, te isprobavanje novo
postavljenih pravila.
33
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
Također moramo postaviti opciju da zaporka ne bude ista, kao prošlih 5 zaporki, u istim
konfiguracijskim datotekama dodajemo liniju. Stare zaporke se spremaju u datoteku
/etc/security/opasswd te se uspoređuju sa novom, da bi ovo pravilo vrijedilo.
Sljedeće moramo zadati pravilo, koliko dana vrijedi jedna lozinka, to ćemo konfigurirati
u datoteci /etc/login.defs, pomoću parametra PASS_MAX_DAYS i uz njega napisati broj dana,
u ovom primjeru stavit ćemo 2 mjeseca, odnosno 60 dana.
PASS_MAX_DAYS 60
Zatim u istoj datoteci postavljamo ograničenje broja dana između zadnje promjene
zaporke, u ovom primjeru staviti ćemo tjedan dana, znači ako korisnik promjeni zaporku, ne
može je promijeniti idućih tjedan dana.
PASS_MIN_DAYS 7
PASS_WARN_AGE 7
Zadnje moramo konfigurirati pravilo da sustav izbriše neaktivne korisnike, svi korisnici
koji nisu bili aktivni mjesec dana moraju biti izbrisani, zbog veće sigurnosti i manje mogućnosti
da netko provali u sustav.
useradd -D -f 30
34
Da bismo ova pravila postavili za trenutne korisnike, u komandnu liniju moramo upisati
naredbu „change“ , parametar koji primjenjujemo i ime korisnika. Na primjer ako hoćemo
primijenit za račun Ivicu upozorenje za istek zaporke upisati ćemo
Kada korisnik kreira novu datoteku, na njoj postoje prava određena čitanja, odnosno
vidljivosti, ta pravila se postižu postavljanjem parametra „umask“. Ako postavimo da je
vrijednost parametra 022, svi ostali korisnici će moći tu datoteku moći čitati, vrijednost 077 je
najsigurnija metoda gdje će tu datoteku nitko osim kreatora neće moći vidjeti. Benchmark
savjetuje da se postavi na parametar 027, ova metoda je kreirana da u slučaju ako postoje UNIX
grupe korisnika, da će tu datoteku moći vidjeti samo korisnici grupe iz koje je taj korisnik,
također postoji mogućnost prosljeđivanja pravila drugim grupama. Ovu konfiguraciju postaviti
ćemo u dvije konfiguracijske /etc/bashrc i /etc/profile, umask of 027.
35
5. Zaključak
U ovom radu prikazali smo kreiranje Wordpress stranice, te ojačavanje Linux mašine.
Glavni cilj je bio pokrivanje osnovnih zaštita prema uputama iz Benchmark-a za Centos 7
operacijski sustav. Proces kvalitetnog ojačavanja Linux mašine nije nimalo jednostavan zadatak
jer zahtjeva da se pokriju sve mogućnosti napada sa svih mogućih izvora prijetnje. U radu smo
koristili i neke dodatne oblike zaštite, te probali ovaj sustav napraviti neprobojnim. Treba
zaključiti da ovaj proces beskonačan, odnosno da sistemski administrator treba stalno paziti i
gledati reviziju događaja da na vrijeme primijeti sumnjive aktivnosti na serveru ili stranici.
U ovom radu najviše poteškoća sam imao sa kreiranjem Wordpress aplikacije i uvozom
propisanih certifikata, pošto je ovo prvi put da sam podigao Apache web server, dosta sam
vremena izgubio istražujući o konfiguraciju ovog web servera i samog procesa podizanja
stranice. Ojačavanje Centos mašine, je bio dug proces, i mnogo mi je vremena trebalo da
razumijem sve konfiguracije koje trebam napraviti i da shvatim zašto sam ih napravio, ali pri
završetku ovog rada mogu zaključiti da sam sve potrebne izmjene razumio i da sam uspješno
osigurao Centos server i novokreiranu Wordpress stranicu.
36
6. Literatura
[1.]
https://www.newnettechnologies.com/downloads/cis/Linux/CentOS/CIS_CentOS_Linux_7_Ben
chmark_v2.1.0.pdf
[2.] https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-centos-7
[3.] https://security-24-7.com/wordpress-5-x-hardening-guide-for-centos-7-6/
[4.] https://kinsta.com/blog/wordpress-security-plugins/#wp-fail2ban
[5.] https://community.spiceworks.com/how_to/2220-create-and-protect-tmp-partition
[6.] https://www.lisenet.com/2017/centos-7-server-hardening-guide/
[7.] https://raiyanlive.wordpress.com/2016/09/02/hardening-server-security-using-iptables/
37
7. Popis slika
Slika 11. Konfiguriranje Apache web servera, kreiranje novog virtualnog hosta...........................9
38
Slika 20. Implementacija GPG ključeva........................................................................................15
39