Zaštita (hardening) Linux servera
Zaštita (hardening) Linux servera je važna da biste zaštitili svoje podatke i podatke vaših klijenata. Zato ćemo u ovom tekstu objasniti kako da zaštitite svoj Linux server.
Napomena: Naše preporuke se odnose na SectOS/RHEL ili Ubuntu/Debian Linux distribucije.
Enkriptujte komunikaciju za Linux Server
Svi podaci koji se šalju preko mreže mogu biti predmet hakovanja. Zato je važno da enkriptujete takve podatke korišćenjem ključeva / sertifikata.
- koristite SCP, SSH, rsync ili SFTP za transfer podataka. Takođe, možete da mount-ujete remote server file system ili vaš sopstveni home directory korišćenjem specijalnih SSHFS i FUSE alata.
- GnuPG omogućava da enkriptujete i potpišete svoje podatke i komunikaciju. Pored toga poseduje dobar key management system, kao i module za razne vrste javnih ključeva.
- OpenVPN je cenovno pristupačno rešenje za SSL VPN. Takođe, možete koristiti tunelovanje i enkripciju da biste kreirali i obezbedili privatnu mrežu između dva hosta na Internetu.
- Tu su i Lighttpd SSL i Apache SSL rešenja
Izbegavajte da koristite FTP, Telnet i Rlogin / Rsh servise na Linux-u
Kod najvećeg broja mrežnih konfiguracija, korisnička imena, lozinke, FTP / Telnet, rsh komande i tranferovani fajlovi mogu biti presretnuti od bilo koga ko se nalazi na toj mreži. To se radi pomoću tzv packet sniffer-a. Najjednostavnije rešenje za ovaj problem jeste da koristite OpenSSH ili SFTP ili FTPS (FTP over SSL), koji dodaju SSL ili TLS enkripciju za FTP. Kucajte sledeću yum komandu da biste izbrisali NIS, rsh i druge istekle servise:
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
Ako koristite Linux server baziran na Debian/Ubuntu-u probajte apt-get komandu / apt
komandu kako biste uklonili nebezbedne servise:
$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
Smanjite broj instaliranog softvera
Razmislite da li vam je neophodan baš svaki softver koji ste instalirali na vašem Linux Serveru. Izbegavajte da koristite softver koji vam nije neophodan. Koristite neki RPM package manager poput yum ili apt-get i/ili dpkg kako biste pregledali sve softverske pakete instalirane na vašem sistemu. Izbrišite sve pakete kjoji vam nisu neophodni:
# yum list installed
# yum list packageName
# yum remove packageName
ili
# dpkg --list
# dpkg --info packageName
# apt-get remove packageName
Jedan mrežni servis po sistemu ili VM-u
Različite mrežne servise pokrećite na odvojenim serverima ili VM instancama. Ovo ograničava broj servisa koji mogu biti kompromitovani. Na primer, ako napadač uspešno zloupotrebi Apache flow, automatski će dobiti pristup celom serveru, uključujući i druge servise popust MySQL / MariaDB / PGSql, email serveru itd.
Održavajte Linux Kernel i softver ažurnim
Primena sigurnosnih zakrpa je važan deo održavanja Linux servera. Linux obezbeđuje sve neophodne alate za održavanje važeg sistema ažurnim i takođe omogućava jednostavan upgrade na nove verzije. Važno je da sve sigurnosne zakrpe budu primenjene odmah po njihovom objavljivanju. Da biste primenili ova ažuriranja koristite yum
i/ili apt-get
i/ili dpkg
# yum update
ili
# apt-get update && apt-get upgrade
Red hat / CentOS / Fedora Linux možete konfigurisati da šalju yum notifikacije putem email-a. Druga opcija je da primenite sigurnosne zakrpe putem cron job-a. Kod Debian / Ubuntu možete koristiti apticron za slanje security notifikacija.
Koristite bezbednosne ekstenzije za Linux
Linux dolazi sa različitim sigurnosnim zakrpama koje mogu biti korišćene za zaštitu od loše konfigurisanih ili kompromitovanih programa. Ukoliko ste u prilici koristite SELinux i slične bezbednosne ekstenzije kako biste definisali ograničenja na mreži i drugim programima. Na primer, SELinux donosi različite bezbednosne polise za Linux kernel.
SELinux
Naša preporuka je da koristite SELinux koji obezbeđuje fleksibilni MAC (Mandatory Assess Control). Kod standardnog Linux DAC-a (Discretionary Access Control), aplikacija ili proces koji rade kao korisnik (UID ili SUID) imaju koriničke privilegije nad objektima kao što su fajlovi, socket-i i drugi procesi. Pokretanjem MAC-a sistem se štiti od zlonamernih ili ranjivih aplikacija koje mogu oštetiti ili oboriti sistem.
Linux korisnički nalozi i politika jakih lozinki
Koristite komande useradd / usermod za kreiranje i održavanje korisničkih naloga. Uverite se da imate dobru i jaku politiku lozinki. Na primer, dobra lozinka uključuje najmanje 8 znakova i mešavinu slova, brojeva, specijalnih znakova, malih i velikih slova itd. Najvažnije je odabrati lozinku koju možete zapamtiti. Koristite alate kao što je „John the Ripper“ da biste detektovali slabe korisničke lozinke na vašem serveru. Takođe, konfigurišite pam_cracklib.so
da biste primenili politiku jakih lozinki.
Podesite rok trajanja lozinke za veću bezbednost
Pomoću change komande možete promeniti broj dana između dve promene lozinke. Na taj način definišete kada korisnik mora da promeni svoju lozinku. Fajl /etc/login.defs definiše konfiguraciju za shadow password suite uključujući i konfiguraciju za definisanje roka trajanja lozinke.
Za promenu možete kucati:
# chage -M 60 -m 7 -W 7 userName
Onemogućavanje korišćenja prethodnih lozinki
Možete onemogućiti ponovno korišćenje starih lozinki (onih koje su već korišćene ranije). To možete uraditi na sledeći način, korišćenjem pam_unix modul-a.
Otvorite /etc/pam.d/common-password
fajl na Debian / Ubuntu-u, i pokrenite
:
# # cp /etc/pam.d/common-password /root/common-password.bak
vi /etc/pam.d/common-password
Za CentOS / RHEL / RedHat / Fedora, editujte /etc/pam.d/system-auth fajl i pokrenite
:
# cp /etc/pam.d/system-auth /root/system-auth.bak
# vi /etc/pam.d/system-auth
OpenSUSE/SUSE Linux korisci, editujte /etc/pam.d/common-auth
, pokrenite:
# cp /etc/pam.d/common-auth /root/common-auth.bak
# vi /etc/pam.d/common-auth
Zaključavanje korisničkih naloga nakon neuspešnih pokušaja
Za prikazivanje neuspešnih pokušaja logovanja, kao i za podešavanje limita za neuspešno logovanje možete koristiti faillog komandu. Da biste videli pokušaje logovanja unesite:
faillog
Da biste otključali nalog nakon neuspešnih pokušaja logovanja pokrenite:
faillog -r -u userName
Takođe, možete koristiti passwd komandu da zaključate ili otključate naloge:
# lock Linux account
passwd -l userName
# unlock Linux account
passwd -u userName
Zaključajte sve naloge sa praznim lozinkama
Da biste proverili da li postoje nalozi sa praznim loznikama, kucajte sledeću komandu:
# awk -F: '($2 == "") {print}' /etc/shadow
Zaključajte sve naloge sa praznim logovima:
# passwd -l accountName
Pobrinite se da ne postoje non-root nalozi sa UID vrednostima podešenim na 0
Samo root nalog ima UID sa vrednošću 0 (pun pristup sistemu). Da biste prikazali sve naloge sa UID 0 kucajte sledeću komandu:
# awk -F: '($3 == "0") {print}' /etc/passwd
Ako je vaš sistem ispravno konfigurisan, trebalo bi da vidite samo ovu jednu liniju:
root:x:0:0:root:/root:/bin/bash
Ako na vašem sistemu postoje i druge linije, obrišite ih ili proverite zbog čega ti nalozi imaju setovan UID na 0 (možda ste ih iz nekog razloga vi podesili tako).
Onemogućite root login
Nikada se ne logujte kao root user. Za izvršavanje root level komandi koristite sudo. On u značajnoj meri povećava bezbednost vašeg sistema bez potrebe za deljenjem root lozinke sa ostalim korisnicima i administratorima. Pored toga sudo obezbeđuje i jednostavnu tracking funkcionalnost.
Fizička bezbednost servera
Neohodno je da vaš Linux server bude zaštićen od svake vrste neovlašćenog pristupa. Konfigurišite BIOS tako da onemogućite boot-ovanje sa eksternih uređaja kao što su DVD, CD, USB i sl. Podesite BIOS i podesite boot loader lozinku da biste zaštitili svoja podešavanja. Svi produkcioni serveri moraju biti zaključani u serverskim prostorijama i svi korisnici bi trebalo da prođu neku vrstu sigurnosne provere (npr ID kartica) kako bi pristupili serveru.
Onemogućite nepotrebne servise
Onemogućite sve nepotrebne servise i Deamon-e (servise koji rade u pozadini). Potrebno je da ih uklonite tako da se uopšte ne učitavaju prilikom podizanja sistema. Kucajte sledeću komandu da bi ste izlistali sve servise koji se podižu u boot-u (run level #3):
# chkconfig --list | grep '3:on'
Da biste onemogućili određeni servis kucajte:
# service serviceName stop
# chkconfig serviceName off
Imajte u vidu da moderne Linux distribucije sa systemd koriste systemctl komadu za već pomenutu namenu.
Print-ajte listu servisa sa informacijom na kom nivou oni rade:
# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target
Isključite servis u boot time-u:
# systemctl disable service
# systemctl disable httpd.service
Pokrenite / zaustavite / restartujte servise:
# systemctl disable service
# systemctl disable httpd.service
Zatražite status servisa:
# systemctl status service
# systemctl status httpd.service
Pregledajte log poruke:
# journalctl
# journalctl -u network.service
# journalctl -u ssh.service
# journalctl -f
# journalctl -k
Izbrišite X Window Systems (X11)
Nema razloga da na Linux serverima popust Apache ili Nginx koristite X11. Možete da isključite i uklonite X Windows da biste unapredili bezbednost i performanse vašeg servera. Editujte /etc/inittab i podesite run level na 3. Sada uklonite X Windows system:
# yum groupremove "X Window System"
Na CentOS 7 / RHEL 7 server koristite sledeće komande:
# yum group remove "GNOME Desktop"
# yum group remove "KDE Plasma Workspaces"
# yum group remove "Server with GUI"
# yum group remove "MATE Desktop"
Zaštita (hardening) Linux Kernel /etc/sysctl.conf fajla
/etc/sysctl.conf fajl se koristi za konfiguraciju kernel parametara u runtime-u. Linux čita i primenjuje podešavanja iz /etc/sysctl.conf
u boot time-u. Primer /etc/sysctl.conf
:
# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
Razdvojite disk particije na Linux sistemu
Razdvajanje fajlova operativnog sistema od fajlova korisnika može da rezultira boljim i bezbednijim sistemom. Pobrinite se da su sledeći fajl sistemi mount-ovani na odvojenim particijama:
/usr
/home
/var and /var/tmp
/tmp
Kreirajte odvojene particije za Apache i FTP server root-ove. Editujte /etc/fstab fajl i pobrinite se da dodate sledeće konfiguracione opcije:
noexec
– Ne podešavajte izvršavanje bilo koje binarne datoteke na ovoj particiji (sprečava izvršavanje binarnih datoteka, ali dozvoljava skripte).nodev
– Nemojte dozvoliti karaktere ili posebne uređaje na ovoj particiji (sprečava upotrebu datoteka uređaja kao što su zero, sda itd.).nosuid
– Ne postavljajte SUID/SGID pristup na ovoj particiji (sprečite setuid bit).Limitirajte prostor na disku
Pobrinite se da je za sve korisnike podešen limit za prostor na disku. Da biste ovo primenili pratite sledeće korake:
- Omogućite limite po fajl sistemu tako što ćete modifikovati
/etc/fstab
fajl - Uradite remount fajl sistema
- Dodelite polise za limite
Isključite IPv6 ako ga ne koristite
IPv6 donosi novi Internet sloj TCP/IP protokola koji zamenjuje IPv4 i na taj način donosi i neke nove benefite. Ako ne koristite IPv6 onemogućite ga.
Onemogućite neželjene SUID i SGID binarije
SUID/SGID može biti zloupotrebljen kada SUID/SGID exe fajl ima sigurnosni propust. Svi lokalni ili udaljeni korisnici mogu da koriste takav fajl. Koristite find command kao na primeru ispod:
#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
Potrebno je da pažljivo istražite svaki fajl koji se nađe u izveštaju.
World-writable fajlovi
Činjenica da svako može da modifikuje world-writable fajl loše utiče na bezbednost Linux sistema. Pomoću ove komande možete pronaći sve word-writable fajlove:
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Potrebno je da pažljivo proverite svaki pronađeni fajl i ili podesite privilegije za određene korisnike / grupe, ili ih jednostavno uklonite.
Fajlovi koji nemaju vlasnika
Fajlovi koji nisu u vlasništvu nijednog korisnika ili grupe mogu da predstavljaju sigurnosni problem. Da bi ste pronašli takve fajlove kucajte:
find /dir -xdev \( -nouser -o -nogroup \) -print
Potrebno je da pažljivo proverite svaki pronađeni fajl i ili podesite privilegije za određene korisnike / grupe, ili ih jednostavno uklonite.
Koristite centralizovan servis za autentifikaciju
Bez centralizovanog sistema za autentifikaciju, podaci o autentifikaciji korisnika postaju nedosledni, što može dovesti do zastarelih kredencijala i zaboravljenih naloga koje je prvo trebalo izbrisati. Centralizovana usluga autentifikacije vam omogućava da održavate centralnu kontrolu nad Linux/UNIX nalogom i podacima za autentifikaciju. Možete da sinhronizujete podatke o autentifikaciji između servera. Ne koristite NIS servis za centralizovanu autentifikaciju. Koristite OpenLDAP za klijente i servere.
Kerberos
Kerberos vrši autentifikaciju kao pouzdanu third-party uslugu autentifikacije koristeći kriptografsku zaštitu pod pretpostavkom da se paketi koji putuju duž nebezbedne mreže mogu čitati, modifikovati i umetnuti. Kerberos se zasniva na kriptografiji sa simetričnim ključem i zahteva centar za distribuciju ključeva. Pomoću Kerberos-a možete učiniti daljinsko prijavljivanje, daljinsko kopiranje, bezbedno međusistemsko kopiranje datoteka i druge visokorizične zadatke. Dakle, kada se korisnici autentifikuju za mrežne usluge pomoću Kerberos-a, neovlašćeni korisnici koji pokušavaju da prikupe lozinke nadgledanjem mrežnog saobraćaja su efikasno sprečeni da dođu do tih podataka.
Logovanje događaja
Potrebno je da konfigurišete sistem kako bi generisao logove o svim događajima na sistemu, uključujući i pokušaje hakovanja sistema. Logovi takođe mogu biti korisni prilikom otkrivanja pogrešno konfigurisanog softvera, što opet može dovesti do bezbednosne rupe u vašem sistemu. Podrazumevano, syslog čuva podatke u /var/log
direktorijumu.
Nadgledajte sunjive poruke u logovima pomoću LogWatch / Logcheck
Pročitajte svoje logove koristeći naredbu logwatch
(logcheck). Ovi alati olakšavaju vaš život čitanja logova. Putem email-a dobijate detaljne izveštaje o neobičnim stavkama u sistemskom logu. Primer syslog izveštaja:
################### Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
Date Range Processed: yesterday
( 2009-Oct-29 )
Period is day.
Detail Level of Output: 0
Type of Output: unformatted
Logfiles for Host: www-52.nixcraft.net.in
##################################################################
--------------------- Named Begin ------------------------
**Unmatched Entries**
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s)
---------------------- Named End -------------------------
--------------------- iptables firewall Begin ------------------------
Logged 87 packets on interface eth0
From 58.y.xxx.ww - 1 packet to tcp(8080)
From 59.www.zzz.yyy - 1 packet to tcp(22)
From 60.32.nnn.yyy - 2 packets to tcp(45633)
From 222.xxx.ttt.zz - 5 packets to tcp(8000,8080,8800)
---------------------- iptables firewall End -------------------------
--------------------- SSHD Begin ------------------------
Users logging in through sshd:
root:
123.xxx.ttt.zzz: 6 times
---------------------- SSHD End -------------------------
--------------------- Disk Space Begin ------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 450G 185G 241G 44% /
/dev/sda1 99M 35M 60M 37% /boot
---------------------- Disk Space End -------------------------
###################### Logwatch End #########################
Zaštitite OpenSSH server
SSH protokol se preporučuje za udaljeno logovanje i prenos podataka. S druge strane, SSH je predmet mnogih napada. Zato je bitno da zaštitite vaš Open SSH server.
Instalirajte i koristite NIDS (Network Intrusion Detection System)
Network Intrusion Detection System (NIDS) je sistem za otkrivanje upada u mrežu, koji pokušava da otkrije zlonamerne aktivnosti kao što su DoS napadi, skeniranje portova ili čak pokušaji da se upadne u računare praćenjem mrežnog saobraćaja.
Dobra je praksa da se primeni bilo koji softver za proveru integriteta pre nego što sistem postane onlajn u proizvodnom okruženju. Ako je moguće, instalirajte AIDE softver pre nego što se sistem poveže na bilo koju mrežu. AIDE je sistem za otkrivanje upada zasnovan na hostu (HIDS) koji može da nadgleda i analizira unutrašnje delove računarskog sistema. Takođe, preporučujemo da instalirate i koristite rkhunter root kit softver za detekciju.
Onemogućite USB / Firewire / Thunderbolt uređaje
Kucajte sledeću komandu kako biste onemogućili USB uređaje na vašem Linux sistemu:
# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
Možete da koristite isti metod da onemogućite firewire i tunderbolt module:
# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf
Nakon što primenite ove parametre, korisnicima neće moći lako da kopiraju osetljive podatke na USB uređaje ili da instaliraju malware/virus ili omoguće backdoor na vaem Linux sistemu.
Onemogućite nekorišćene servise
Možete da onemogućite nekorišćene servise pomoću komande /systemctl
:
$ sudo systemctl stop service
$ sudo systemctl disable service
Na primer, ako već neko vreme ne koristite Nginx servis, onemogućite ga:
$ sudo systemctl stop nginx
$ sudo systemctl disable nginx
Koristite fail2ban / denyhost kao IDS (Intrusion Detection System)
Fail2ban/denyhost skenira log fajlove u potrazi za prevelikim brojem neuspešnih pokušaja logovanja i blokira IP adresu sa koje se vrše ti pokušaji. Fail2ban možete jednostavno instalirati:
$ sudo apt-get install fail2ban
ili
$ sudo yum install fail2ban
Editujte config fajl prema vašim potrebama
$ sudo vi /etc/fail2ban/jail.conf
Restartujte servis
$ sudo systemctl restart fail2ban.service
Zaštitite Apache / PHP / Nginx server
Editujte httpd.config
fajl i dodajte sledeće:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By
Restartujte httpd/Apache2 server na linuksu:
$ sudo systemctl restart apache2.service
ili
$ sudo systemctl restart httpd.service
Potrebno je i da instalirate i omogućite mod_security
na RHEl / CentOS serveru. Preporuka je da editujete php.ini i takođe ga zaštitite.
Rezervne kopije (backup)
Ne možemo dovoljno da naglasimo važnost pravljenja rezervne kopije vašeg sistema. Pravilno konfigurisan offsite backup vam omogućava da jednostavno oporavite vaš sistem kada dođe do problema na produkcionom serveru (hakerskog napada, pada sistema i sl). Naša preporuka je da ujedno i enkriptujete rezervne offsite kopije.
Zaključak
Kao što ste videli, zaštita (hardening) LInux servera je prilično složen ali bez sumnje neophodan proces koji zahteva permanentnu aktivnost na unapređenju opšte bezbednosti vašeg sistema. Nadamo se da će naši saveti i preporuke pomoći da vaš sistem bude bezbedniji i stabilniji za obavljanje svakodnevnih zadataka.
Bez komentara