Kodėl Ubuntu serverio saugumas nėra pasirinkimas, o būtinybė
Kai paleidžiate Ubuntu serverį gamybinėje aplinkoje, saugumas turėtų būti jūsų pirmasis rūpestis, o ne kažkas, apie ką pagalvosite vėliau. Per pastaruosius metus mačiau dešimtis įmonių, kurios prarado duomenis, patyrė finansinių nuostolių ar sugadino reputaciją tik todėl, kad manė „mums tai nenutiks”. Realybė tokia – automatizuoti botai nuskaito internetą 24/7, ieškodami pažeidžiamų sistemų. Jūsų serveris nėra per mažas ar per nežymus, kad būtų atakuotas.
Ubuntu Server yra puikus pasirinkimas dėl stabilumo ir bendruomenės palaikymo, tačiau iš dėžės jis nėra idealiai apsaugotas. Numatytoji konfigūracija yra sukurta taip, kad būtų patogi ir veiktų daugelyje scenarijų, bet ne maksimaliai saugi. Tai reiškia, kad jums reikia imtis papildomų žingsnių.
Pradžia: pirmieji žingsniai po serverio įdiegimo
Pirmas dalykas, kurį turėtumėte padaryti po naujo Ubuntu serverio įdiegimo – atnaujinti sistemą. Skamba paprasta, bet būtumėte nustebę, kiek administratorių praleidžia šį žingsnį. Paleiskite šias komandas:
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
Šios komandos užtikrina, kad visos sistemos paketai būtų naujausios versijos su visais saugumo pataisymais. Nustatykite automatinį saugumo atnaujinimų diegimą, kad nereikėtų apie tai galvoti kiekvieną dieną:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Kitas kritinis žingsnis – sukurti ne-root vartotoją su sudo privilegijomis. Niekada, ir aš pabrėžiu, NIEKADA nedirbkite kaip root vartotojas kasdieniams darbams. Sukurkite naują vartotoją:
adduser jususvartotojas
usermod -aG sudo jususvartotojas
Dabar turite vartotoją, kuris gali atlikti administracines užduotis, bet neprisijungia kaip root. Tai sumažina riziką, kad viena klaida sugadins visą sistemą arba suteiks užpuolikui visišką kontrolę.
SSH konfigūracija: jūsų pirmoji gynybos linija
SSH yra pagrindinis būdas prisijungti prie serverio, todėl jo apsauga yra kritinė. Numatytoji SSH konfigūracija yra per daug atlaidi gamybinei aplinkai. Redaguokite SSH konfigūracijos failą:
sudo nano /etc/ssh/sshd_config
Štai pagrindiniai pakeitimai, kuriuos turite padaryti:
Pirmiausia, išjunkite root prisijungimą per SSH. Raskite eilutę „PermitRootLogin” ir pakeiskite į:
PermitRootLogin no
Pakeiskite numatytąjį SSH prievadą nuo 22 į kažką kita. Taip, tai yra „security through obscurity”, bet tai tikrai sumažina automatizuotų atakų skaičių. Pasirinkite prievadą tarp 1024 ir 65535:
Port 2849
Išjunkite slaptažodžių autentifikaciją ir naudokite tik SSH raktus:
PasswordAuthentication no
PubkeyAuthentication yes
Bet prieš tai įsitikinkite, kad įkėlėte savo viešąjį SSH raktą į serverį! Jei to nepadarėte, užrakinsite save. Iš savo vietinio kompiuterio:
ssh-copy-id -p 2849 jususvartotojas@serverio_ip
Taip pat apribokite, kurie vartotojai gali prisijungti per SSH:
AllowUsers jususvartotojas
Po visų pakeitimų, perkraukite SSH servisą:
sudo systemctl restart sshd
Prieš uždarydami esamą SSH sesiją, atidarykite naują terminalą ir patikrinkite, ar galite prisijungti su nauja konfigūracija. Jei kažkas nepavyko, vis dar turite seną sesiją, per kurią galite ištaisyti klaidas.
Ugniasienė: ne tik įjungti, bet ir teisingai sukonfigūruoti
Ubuntu ateina su UFW (Uncomplicated Firewall), kuris yra paprasta sąsaja iptables valdymui. Daugelis žmonių tiesiog įjungia UFW ir leidžia SSH, bet tai tik pradžia.
Pirmiausia, nustatykite numatytuosius taisykles:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Tai reiškia, kad visi įeinantys ryšiai bus blokuojami, nebent aiškiai leisti, o išeinantys ryšiai bus leidžiami. Dabar leiskite SSH (nepamirškite naudoti savo pasirinktą prievadą):
sudo ufw allow 2849/tcp
Jei turite web serverį, leiskite HTTP ir HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Įjunkite UFW:
sudo ufw enable
Bet čia yra dalykas, kurį daugelis praleidžia – rate limiting. Tai apsaugo nuo brute force atakų. Vietoj paprastos taisyklės SSH prievadui, naudokite:
sudo ufw limit 2849/tcp
Tai leis tik 6 prisijungimo bandymus per 30 sekundžių iš vieno IP adreso. Jei kas nors bando brute force ataką, jie bus automatiškai blokuojami.
Norėdami pamatyti aktyvias taisykles:
sudo ufw status verbose
Fail2ban: automatinė apsauga nuo įsilaužėlių
Fail2ban yra įrankis, kuris stebi log failus ir automatiškai blokuoja IP adresus, kurie rodo piktnaudžiavimo požymius. Tai puikus papildymas prie UFW.
Įdiekite Fail2ban:
sudo apt install fail2ban
Fail2ban ateina su numatytąja konfigūracija, bet jūs turėtumėte sukurti savo vietinę konfigūraciją:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Pagrindiniai parametrai, kuriuos turėtumėte pakeisti:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = [email protected]
sendername = Fail2Ban
action = %(action_mwl)s
Tai reiškia, kad po 5 nesėkmingų bandymų per 10 minučių, IP adresas bus užblokuotas 1 valandai, ir jūs gausite el. laišką apie tai.
Įsitikinkite, kad SSH jail yra įjungtas ir naudoja teisingą prievadą:
[sshd]
enabled = true
port = 2849
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Perkraukite Fail2ban:
sudo systemctl restart fail2ban
Norėdami pamatyti užblokuotus IP adresus:
sudo fail2ban-client status sshd
Sistemos stebėjimas ir log failų analizė
Saugumas nėra vienkartinis veiksmas – tai nuolatinis procesas. Turite žinoti, kas vyksta jūsų serveryje. Log failai yra jūsų geriausias draugas čia.
Svarbiausi log failai, kuriuos turėtumėte reguliariai tikrinti:
/var/log/auth.log – visi autentifikacijos bandymai
/var/log/syslog – bendri sistemos pranešimai
/var/log/ufw.log – ugniasienės veikla
Galite naudoti įrankius kaip logwatch, kuris automatiškai analizuoja log failus ir siunčia jums santraukas:
sudo apt install logwatch
sudo logwatch --detail high --mailto [email protected] --service all --range today
Nustatykite tai kaip kasdieninę cron užduotį:
sudo nano /etc/cron.daily/00logwatch
Įdėkite:
#!/bin/bash
/usr/sbin/logwatch --output mail --mailto [email protected] --detail high
Padarykite jį vykdomu:
sudo chmod +x /etc/cron.daily/00logwatch
Kitas naudingas įrankis yra AIDE (Advanced Intrusion Detection Environment), kuris stebi failų sistemos pokyčius:
sudo apt install aide
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Paleiskite AIDE patikrinimą:
sudo aide --check
Tai pranešs apie visus netikėtus failų sistemos pakeitimus, kurie gali būti įsilaužimo požymis.
Programinės įrangos saugumas ir papildomi įrankiai
Jei serveryje paleidžiate web aplikacijas, duomenų bazes ar kitus servisus, kiekvienas iš jų turi savo saugumo aspektus.
Jei naudojate MySQL/MariaDB, paleiskite saugumo skriptą:
sudo mysql_secure_installation
Tai pašalins testavimo duomenų bazes, anoniminius vartotojus ir išjungs nuotolinį root prisijungimą.
Jei turite web serverį (Apache ar Nginx), įsitikinkite, kad:
1. Išjungėte direktorijų naršymą
2. Paslėpėte serverio versijos informaciją
3. Naudojate HTTPS su tinkamais SSL sertifikatais (Let’s Encrypt yra nemokamas)
4. Nustatėte tinkamus failų leidimus (www-data vartotojas neturėtų turėti rašymo teisių, kur nereikia)
Įdiekite rkhunter ir chkrootkit – įrankius, kurie ieško rootkit’ų ir kitų kenkėjiškų programų:
sudo apt install rkhunter chkrootkit
sudo rkhunter --update
sudo rkhunter --check
Nustatykite automatinį tikrinimą per cron:
sudo nano /etc/cron.weekly/rkhunter
#!/bin/bash
/usr/bin/rkhunter --update
/usr/bin/rkhunter --check --skip-keypress --report-warnings-only | mail -s "rkhunter report" [email protected]
Ką daryti toliau: saugumo kultūros kūrimas
Saugumas nėra tikslas, o kelionė. Įdiegėte pagrindines apsaugas, bet tai tik pradžia. Reguliariai atnaujinkite sistemą, tikrinkite log failus, stebėkite neįprastą veiklą. Sukurkite atsarginių kopijų strategiją – geriausias saugumas nieko nereiškia, jei prarandate duomenis dėl aparatinės įrangos gedimo.
Dokumentuokite viską, ką darote. Kai po šešių mėnesių turėsite problemą, būsite dėkingi sau už užrašus apie tai, kaip viską sukonfigūravote. Naudokite konfigūracijos valdymo įrankius kaip Ansible ar Puppet, jei valdote kelis serverius – tai užtikrina nuoseklumą ir leidžia greitai atkurti konfigūraciją.
Ir paskutinis, bet ne mažiau svarbus dalykas – mokykitės iš savo klaidų ir kitų patirties. Sekite saugumo naujienas, skaitykite apie naujas atakas, dalyvaukite bendruomenėse. Ubuntu turi puikią bendruomenę ir dokumentaciją – naudokitės tuo.
Saugumas gali atrodyti bauginantis, ypač jei esate naujokas, bet pradėję nuo šių pagrindinių žingsnių, jau būsite daug geresnėje padėtyje nei dauguma. Nesistenkite būti tobuli iš karto – geriau turėti pagrindines apsaugas veikiančias dabar, nei svajoti apie tobulą saugumo sistemą, kurią įgyvendinsite „kada nors vėliau”. Tas „vėliau” dažnai niekada neateina, o užpuolikai nelauk.
