Izboljšanje varnosti in zaščite strežnika Linux / CentOS na internetu

V tem članku bomo obravnavali osnovne koncepte in posebne nastavitve, ki bodo pomagale povečati varnost vašega strežnika CentOS v internetu. Uporaba teh pristopov bo povečala zaščito strežnika pred krampami in okužbami. Priročnik je večinoma univerzalen, glavne točke pa so primerne za povečanje varnosti katerega koli Linux strežnika.

Vsebina:

  • Možnosti particioniranja in pritrditve diskovnih pogonov za izolacijo
  • Nameščanje in posodabljanje programske opreme v Linuxu (CentOS)
  • Zaščita SSH, ključna avtorizacija
  • Linux se geslo redno spreminja
  • Izboljšanje varnosti strežnika s SELinuxom
  • Konfigurirajte Firewalld
  • Odstranite X Windows
  • Zaščita jedra Linuxa
  • Dovoljenja datotek za Linux
  • Varnost spletnega strežnika
  • Fizična zaščita strežnika
  • Varnostno kopiranje strežnika Linux

Možnosti particioniranja in pritrditve diskovnih pogonov za izolacijo

Ko nameščate CentOS (in katero koli distribucijo Linuxa) na stopnji particije diska, ne ustvarite ene particije, temveč ločite splet-prostor iz glavne particije, ustvarite tudi sistemske particije:

  • / koren
  • / škorenj
  • / var
  • / tmp
  • /

Ko izolirate particije, se napadalci ne bodo mogli dvigniti nad imenik splet pri krampanju spletnega mesta in vanj vnašanju zlonamernih skriptov.

Za varno namestitev nekaterih particij uporabite posebne možnosti:

  • noexec - ne dovoljuje zaganjanja binarnih datotek (ni ga mogoče uporabiti v korenskem imeniku, ker bi to privedlo do neoperabilnosti sistema);
  • nodev - predpostavlja, da datoteke naprave ne bodo ustvarjene v nameščenem datotečnem sistemu / razv. Prav tako ne velja za korenski imenik;
  • nosuid - prepoveduje operacije s suid in trd bitov.

Te parametre lahko nastavite v imenik samo, če obstaja kot ločen razdelek. Lahko prilagodite / etc / fstab Če imate na disku kakršne koli particije na podlagi naslednjih priporočil:

  • / domov - pritrdite z možnostmi nodev, nosuid, usrquota (vključitev kvot);
  • / škorenj - pritrdite z možnostmi nodev, nosuid, noexes - ta razdelek je potreben za zagon sistema, prepovedujemo, da bi se kaj spremenilo v njem;
  • / var - nosuid - teče kot root ni prepovedano;
  • / var / log - pritrdite z možnostmi nodev, nosuid, noexes;
  • / var / www - pritrdite z možnostmi nodev, nosuid;
  • / tmp - pritrdite z možnostmi nodev, nosuid, noexe - ta razdelek je potreben samo za shranjevanje in snemanje začasnih datotek.
Vsi zgornji odseki so nameščeni z opcijo rw (zapisljivo).

Nameščanje in posodabljanje programske opreme v Linuxu (CentOS)

Pri nameščanju strežnika nikoli ne uporabljajte distribucij OS, ki so jih pripravile neznane osebe. Različice prenašajte samo z uradnih ogledal in za namestitev ne uporabljajte datotek za hitri začetek drugih. Če ne razumete kode nekoga drugega, je bolje, da to podvig v celoti prekličete in vse namestite ročno ali v celoti analizirate datoteko kickstart, da na strežnik ne namestite nekaj zlonamernega..

Namestite samo minimalno zahtevano programsko opremo. Namestitev in nastavitev samo za primer in s pomočjo namestitvenega programa yum in dnf. Preverite vso nameščeno programsko opremo in odstranite nepotrebne pakete:

seznam je nameščen
yum seznam paketName
yum odstranite paketName

Uporabljajte samo uradna in zaupanja vredna skladišča paketov..

Ne uporabljajte šifriranih FTP, Telnet, Rlogin, Rsh.

Onemogočite neporabljene storitve na vašem strežniku, če vam trenutek odstranitev storitve ne ustreza.

Če želite preveriti seznam vseh storitev, uporabite ukaz:

systemctl seznam-enota-datoteke --type = storitev

Če želite onemogočiti in odstraniti storitev pri zagonu v CentOS-u, uporabite systemctl:

sistem stopl storitev
sistemctl onemogoči storitev

Na primer, da onemogočite storitev httpd uporabi se naslednji ukaz:

systemctl ustavi httpd.service
systemctl onemogoči httpd.service

Vedno posodabljajte nameščeno programsko opremo na vašem strežniku. Časovno posodobljena programska oprema vas bo zaščitila pred znanimi ranljivostmi. Samodejne posodobitve sistema lahko nastavite tako, da vam tega ni treba izvajati vsakokrat ročno.

posodobitev - posodobitev sistema

Zaščita SSH, ključna avtorizacija

Za varno avtorizacijo na strežniku uporabite zasebni ključ. Ustvari ključ s pripomočkom ssh-keygen:

# ssh-keygen

Ustvarjanje ključa v obliki javnega / zasebnega rsa. Vnesite datoteko, v katero želite shraniti ključ (/root/.ssh/id_rsa): Vnesite geslo (prazno brez gesla): Ponovno vnesite isto geslo: Vaša identifikacija je bila shranjena v /root/.ssh/id_rsa. Vaš javni ključ je bil shranjen v /root/.ssh/id_rsa.pub. Ključni prstni odtis je: SHA256: ffIDjWIfOgMZmOVbQmDWaOCADK4G3cYYy0dTIjqLkD8 [email protected] Naključna slika ključa je: + --- [RSA 2048] ---- + | * + .B = + | | oO @oO. | | *. *. B +. | | = + o *. o | | + .E + S * o | | ... o + * | | +. o | | o. | | | + ---- [SHA256]-----+ 

Po generaciji se lahko s to tipko povežete s strežnikom prek ssh-odjemalec.

Ustvarite dodatnega uporabnika in izvajajte ukaze skozi sudo.

sudo groupadd sudo - ustvari skupino sudo

adduser webmaster - ustvari uporabnika

passwd webmaster - spremenite geslo

usermod -aG sudo webmaster - doda uporabnika v skupino sudo

V datoteki / itd / sudoers dodaj vrstico:

% sudo VSE = (VSE: VSE) VSE

Onemogoči v nastavitvi ssh-dovoljenje strežnika prek koren in prijava / geslo:

nano / etc / ssh / sshd_config

In spremenite vrednost spodnjih vrstic v:

PermitRootLogin no PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no AuthenticationMethods publickey PubkeyAuthentication da 

Spremenite privzeta vrata za ssh. Privzeta vrata za ssh, bo najprej nagnjena k razpokanju.

Če želite standardna vrata spremeniti v ssh, v konfiguracijski datoteki / etc / ssh / sshd_config nadomestite vrednost v vrstici:

Pristanišče 22

Linux se geslo redno spreminja

Če še vedno uporabljate gesla za avtorizacijo v Linuxu, nastavite geslo za geslo s pomočjo pripomočka gojiti.

Če želite preveriti, koliko dni bo geslo veljavno za katerega koli uporabnika, uporabite ukaz:

chage -l koren

Privzeto sem imel 99999 dni nastavljeno za root:

# chage -l koren

Zadnja sprememba gesla: nikoli Geslo ne poteče: nikoli Geslo neaktivno: nikoli Račun ne poteče: nikoli Minimalno število dni med spremembo gesla: 0 Najdaljše število dni med spremembo gesla: 99999 Število dni opozorila pred iztekom gesla: 7 

Če želite spremeniti obdobje veljavnosti gesla (na primer 9 dni), uporabite ukaz:

chage -M 9 koren

Zdaj so se pri preverjanju podatkov o poteku gesla za korenskega uporabnika podatki spremenili:

# chage -l koren

Zadnja sprememba gesla: nikoli Geslo ne poteče: nikoli Geslo neaktivno: nikoli Račun ne poteče: nikoli Minimalno število dni med spremembo gesla: 0 Najdaljše število dni med spremembo gesla: 9 Število dni opozorila pred iztekom gesla: 7 

S pomočjo pomoči lahko dobite več možnosti za pripomoček Chage:

človeški klet

Če želite uporabnike blokirati pri vnosu napačnega gesla, uporabite pripomoček fail2ban (omogoča izvajanje analognega pravilnika o skupinah za zaustavitev računa v sistemu Windows). Fail2ban ščiti strežnik in storitve Linuxa pred ugibanjem gesla.

Za namestitev fail2ban run:

umestite epel-release fail2ban -y

Konfiguracijska datoteka fail2ban se nahaja v /etc/fail2ban/jail.conf. Nastavitve se bomo dotaknili:

  • bantime = 600 - čas prepovedi blokiranja
  • maxretry = 3 - število poskusov napačnega vnosa gesla, po katerem bo uporabnik blokiran
  • najti čas = 600 - časovno obdobje, v katerem se mora uporabnik prijaviti

Druge nastavitve se uporabljajo po želji. Poleg tega lahko konfigurirate pošiljanje poročil po e-pošti.

Ustvari datoteko /etc/fail2ban/jail.local in dodajte naslednje vrstice:

Po spremembi konfiguracijske datoteke znova zaženite storitev.

[DEFAULT] ignoreip = 127.0.0.1/24 [ssh-iptables] omogočeno = resnično vrata = ssh filter = sshd action = iptables [ime = sshd, port = ssh, protokol = tcp] logpath = / var / log / secure 

Nato shranite datoteko in znova zaženite storitev fail2ban:

sistemctl znova zaženite fail2ban

Tako smo za ssh postavili blokado uporabnikov:

Če je geslo vneseno napačno, sem bil blokiran 10 minut. Napake2ban lahko konfigurirate za delo s katero koli storitvijo, ki deluje z uporabniki, na primer:

  • proftpd
  • exim
  • postfix

Izboljšanje varnosti strežnika s SELinuxom

Običajno pri nastavitvi strežnika izklopim SELinux, čeprav to ni priporočljivo. Toda nastavitev SELinux zelo specifičen in obsežen. Konfiguriranje SELinux-a na strežniku lahko traja nekaj dni. Če imate čas za konfiguriranje in odpravljanje napak v sistemu SELinux, ga uporabite za zaščito strežnika.

SELinux ima 3 načine delovanja:

  • Uveljavitev
  • Dopustno
  • Invalidi

V načinu izvrševanje SELinux uporablja svojo politiko do sistema in spremlja nepooblaščen dostop uporabnikov. Vsi poskusi so zabeleženi.

V načinu permisivno Politika SELinux ne velja, vse informacije pa se zapišejo v dnevnike, po katerih jih lahko analizirate. Ta način je uporaben pri nastavitvi in ​​odpravljanju napak v sistemu..

In onemogočen zato v celoti onemogoči SELinux in njegova politika sploh ne velja.

Konfiguracijska datoteka SELinux - / etc / selinux / config

Natančna nastavitev SELinux lahko pišete na več člankov, če potrebujete podrobne informacije, lahko uporabite uradno dokumentacijo Redhat. Običajno pri nastavitvi strežnika vse deluje v celoti, sem vklopljen SELinux opazil, da obstajajo težave s ftp-strežnik, pa tudi nekaj plačane programske opreme.

Preverjanje stanja:
# sestatus

Stanje SELinux: onemogočeno

Za bolj priročno preučevanje dnevnikov SELinux priporočam uporabo pripomočkov aureport in sealer.

Konfigurirajte Firewalld

Odprite le minimalno potreben niz vrat na strežniku, ki so resnično potrebna za delo. Na primer za delo splet-dovolj je, da odprete strežnike 80 in 443. Če uporabljate mysql /mariadb, onemogočite možnost povezovanja z oddaljenih strežnikov na vrata 3306 (če se vaša baza podatkov uporablja samo lokalno, ni vključena v skupino Galera in se ne uporablja v skriptah podvajanja).

Če je vaš računalnik / dostopni prehod nastavljen na statično IP naslov, dodajte svoj zaupanja vreden naslov izjemam požarnega zidu in se z njim povežite s strežnikom. Več o konfiguriranju firewalld-a v CentOS-u (če ste vajeni iptables, glejte članek Konfiguriranje požarnega zidu Linux s pomočjo iptable-ov).

Če želite preveriti odprta vrata na strežniku, uporabite pripomoček netstat:

netstat -tulpn

Odstranite X Windows

Ne uporabljajte sistema na vašem strežniku X okna. Odstranite vso programsko opremo, ki je povezana s tem sistemom, ni ga treba uporabljati Linux strežnik:

yum group odstrani "GNOME Desktop"
yum group odstranite "KDE Plasma Workspaces"
yum group odstrani "Strežnik z GUI"
yum group odstrani "MATE Desktop"

Zaščita jedra Linuxa

Uporabite nastavitve v datoteki /etc/sysctl.conf za dodatno varnost med zagonom jedra Linuxa.

Vklopite execshield:

kernel.exec-ščit = 1

Onemogoči usmerjanje IP (če vaš strežnik ni uporabljen kot dostop do interneta iz omrežja LAN):

net.ipv4.conf.all.accept_source_route = 0

Omogoči zaščito pred izolacijo

net.ipv4.conf.all.rp_filter = 1

Omogoči prezreti zahteve za oddajanje

net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_messages = 1

Omogoči registracijo sumljivih paketov

net.ipv4.conf.all.log_martians = 1

Dovoljenja datotek za Linux

Zaženite iskanje datotek brez uporabnika in skupine, takšne datoteke so potencialno nevarne in jih lahko uporabljajo kibernetski kriminalci. Če želite najti takšne datoteke, uporabite ukaz:

find / imenik -xdev \ (-nouser -o -nogrupa \) -print

Če so datoteke najdene, spremenite lastnika in jih združite.

Nastavite zastavo chattr do potrebnih datotek, da jih zaščitimo pred spremembami. Noben uporabnik ne more spremeniti datoteke, ko je ta zastavica nastavljena. Na primer:

chattr + i /etc/mysript.sh

Ne nastavite previsokih dovoljenj za imenike in datoteke, na primer standardne pravice za splet:

  • 755 za imenike
  • 644 za datoteke

V nekaterih primerih lahko obstajajo izjeme, vendar vedno previdno pristopite k temu vprašanju. Prepovedati uporabnikom, da nastavljajo dovoljenje 777. Takšne datoteke lahko najdete:

find / home -tip f -perm 777

Varnost spletnega strežnika

Če uporabljate strežnik pod splet, poskrbite za vzpostavitev spletnih storitev. Vsebino imenika zaprite prek Možnosti -Indexes, dodaj tudi X-okvir.

Glava vedno priloži možnosti X-Frame SAMEORIGIN

Ta parameter bo prepovedal odpiranje strani v okvirju, kar bo preprečilo vdelavo vsebine vašega spletnega mesta na druga spletna mesta.

Onemogoči prikaz različice svojega splet-strežnik. Za apache v konfiguracijsko datoteko napišite:

serverSignature Off

Za nginx v konfiguracijski datoteki do razdelka http zapišite:

server_tokens off;

Če uporabljate php, do onemogočite nevarne funkcije php.ini:

expose_php = Izklopljeno

- prepovedati prikazovanje različice php

onesposobiti_funkcije = exec, passthru, shell_exec, sistem, proc_open, popen

- prepoveduje uporabo teh funkcij

Konfigurirajte tudi omejitve za izvajanje skript in njihovo velikost, to vas bo zaščitilo pred manjšimi napadi.

Na svoje spletno mesto in pošto namestite potrdilo SSL, tako da bo povezava v brskalniku in pri pošiljanju pošte šifrirana. Uporabite lahko brezplačno potrdilo podjetja Let Encrypt ali kupite poceni plačano potrdilo.

Fizična zaščita strežnika

Če ima vaš strežnik konzolo za daljinski dostop ILO/IPMI/ BMC, zaprite dostop do njega od zunaj, pustite samo zaupanja vreden IP, to se bo omejilo pred nepotrebnimi težavami.

Če se vaš fizični strežnik nahaja zunaj pisarne / doma, zaprite BIOS / UEFI geslo.

In glavna točka je, da svoje strežnike postavite z zaupanja vrednimi ponudniki.

Varnostno kopiranje strežnika Linux

Seveda ne pozabite na varnostno kopiranje strežnika. Izvajate lahko varnostne kopije celotnega strežnika, pa tudi posameznih datotek ali imenikov (varnostno kopijo lahko konfigurirate tako, da brezplačno skripte za shranjevanje v oblaku). V primeru incidenta boste imeli vedno pri roki trenutno varnostno kopijo, iz katerega lahko namestite strežnik ali zamenjate konfiguracijske datoteke.