Takket være den voksende overflod av nyttige, self-hosted apps som WordPress og den rimelige veksten av cloud hosting-leverandører, blir kjører din egen server stadig mer overbevisende for et bredere publikum. Men sikring av disse serverne krever en ganske bred kjennskap til Linux systemadministrasjon; Denne oppgaven er ikke alltid egnet for nybegynnere.
Når du registrerer deg for den typiske cloud hosting-kontoen, vil du motta en e-post med et rotkonto, passord og IP-adresse og instruksjoner for å logge på via SSH på port 22. Men det er viktig å ta flere trinn utover det grunnleggende tilgangskonfigurasjoner. Det første root-passordet nedenfor er faktisk bare utgangspunktet for sikkerhet. Det er mye mer å gjøre.
Denne opplæringen vil gi en oversikt over vanlige inkrementelle tilnærminger for å sikre din typiske Linux-server.
I forbindelse med denne opplæringen bruker jeg en ny Ubuntu 14.04-dråpe fra Digital Ocean med LAMP-konfigurasjonen; Hvis du ønsker å følge med samme konfigurasjon, forklares eksempelkonfigurasjonstrinnene her.
Når du har kartlagt ditt valgte domenenavn, er du klar til å begynne. Jeg bruker http://secure.lookahead.io for mitt eksempel.
Du kan logge på serveren din med SSH: ssh [email protected]
. Serveren må kreve at du endrer passordet ditt under første påloggingsforsøk:
Nå er resten opp til deg. Her er en håndfull vanlige tilnærminger for å forbedre serverens innloggingssikkerhet:
For det første er det viktig å regelmessig oppdatere Linux-systemkomponentene dine. Vanligvis, når du logger på, vil Ubuntu fortelle deg hvor mange pakker du har som må oppdateres. Kommandoene for å oppdatere pakkene dine er:
sudo apt-get oppdatering sudo apt-get dist-upgrade
Det siste Shellshock-sikkerhetsproblemet som ble avslørt i Bash, er et perfekt eksempel på behovet for regelmessig å oppdatere systemfilene dine.
Hver gang du logger på, vil Ubuntu fortelle deg om det finnes pakker og sikkerhetsoppdateringer som kan oppdateres.
Hvis du ønsker det, kan du aktivere uoppdaterte oppgraderinger:
sudo apt-get installere uovervåket oppgraderinger sudo dpkg -konfigurere uovervåtte oppgraderinger
Å forlate SSH-tilgang på port 22 gjør det raskere og lettere for hackere å målrette mot serverne. La oss endre standard SSH-porten til noe mer uklar.
Rediger SSH-konfigurasjonsfilen:
sudo nano / etc / ssh / sshd_config
Bytt til et annet portnummer, for eksempel:
# Hvilke porter, IPer og protokoller vi lytter etter Port 33322
Start SSH på nytt:
sudo service ssh restart
Deretter logger du ut og prøver å logge på igjen. Du bør se denne feilmeldingen:
ssh [email protected] ssh: koble til vert secure.lookahead.io port 22: Connection nektet
Denne gangen bruker du følgende SSH-kommando, endrer porten til 33322: ssh -p 33322 [email protected]
. Du bør kunne logge inn med hell.
Bruke en brannmur kan bidra til å blokkere tilgang til porter som er unødvendig åpne og lukke angrepvektorer. det kan også hjelpe til med å logge forsøk på inntrengninger.
Hvis du tilfeldigvis bruker Amazon AWS-skygtjenester, er det et fint nettbrukergrensesnitt for brannmuren som kalles sikkerhetsgrupper. Konsollen for AWS-sikkerhetsgrupper gjør det enkelt å slå av tilgang til alle porter, unntatt den nye valgte SSH-porten og porten 80 for nettlesing. Du kan se et visuelt eksempel på dette her:
Hvis du ønsker å implementere Linux-baserte brannmurer, kan du studere ufw og iptables. Mens det er utenfor omfanget av denne opplæringen, vil jeg gi et kort eksempel på å bruke ufw
, den "ukompliserte brannmuren".
Først vil vi aktivere ufw
og deretter gi tilgang til SSH-porten 33322, samt all http-trafikk, på port 80. Da vil vi nekte tilgang på standard SSH-port 22.
sudo ufw enable sudo ufw tillate 33322 sudo ufw tillate http sudo ufw nekte 22 sudo ufw status
Vær forsiktig med å konfigurere ufw
, som du kan låse deg ut av en eksisterende konsolløkt og hele serveren din.
Hvis du ønsker å gå dypere, gir port-knapping en måte å tydeligere SSH-tilgangsporten din fullt ut. Det er en detaljert veiledning for avanserte brukere av Justin Ellingwood: Slik bruker du Port Porting for å skjule din SSH-demon fra angripere.
La oss nå eliminere root login brukeren (eller ubuntu på enkelte systemer) og tilpasse administratorens innlogging.
Vi legger til en bruker som heter "hal". Erstatt "hal" med ditt foretrukne brukernavn i eksemplene nedenfor:
sudo adduser hal
Legg til din nye bruker i sudo-gruppen for administratorer:
sudo adduser hall sudo
Legg til den nye brukeren til sudoers-gruppen. Rediger sudoers-filen:
sudo nano / etc / sudoers
Legg denne linjen til sudoers-filen, i delen Brukerrettigheter:
hall ALLE = (ALLE) NOPASSWD: ALL
Rediger SSH-konfigurasjonsfilen igjen:
sudo nano / etc / ssh / sshd_config
Fjern rot- eller ubuntu-kontoen fra AllowUsers
felt. Du må kanskje også legge til denne linjen hvis den ikke er i konfigurasjonsfilen din:
Tillat brukerne hal
Forsikre PermitRootLogin
er av:
PermitRootLogin nr
Start tjenesten på nytt:
sudo service ssh restart
Logg ut og prøv å logge på igjen som root. Du burde ikke kunne. Prøv deretter å logge inn som Hal: ssh-p 33322 [email protected]
. Det burde fungere fint.
Vær oppmerksom på at enkelte brukere kanskje ønsker å starte SSH, logg ut og bekreft at du kan logge inn som Hal før du slår av root-loggingen.
Nå skal vi legge til tofaktorautentisering til serverinnlogging din; med andre ord, når vi prøver å logge på serveren, vil vi bli pålagt å gi en tidsfølsom kode fra en app på telefonen vår.
For dette eksempelet bruker vi Google Authenticator. Sørg for å laste ned Google Authenticator fra iTunes App Store eller Play Store.
Deretter installerer du Google Authenticator-pakken fra serverkonsollen din:
sudo apt-get installer libpam-google-autentiserer
Deretter redigerer vi Pluggable Authentication Module (PAM) for SSH for å kreve tofaktorautentisering fra Google:
nano /etc/pam.d/sshd
Legg til følgende linje øverst:
auth kreves pam_google_authenticator.so
Deretter går du tilbake til å redigere SSH-konfigurasjonsfilen igjen:
sudo nano / etc / ssh / sshd_config
Endre ChallengeResponseAuthentication
til ja:
# Endre til ja for å aktivere utfordringsresponspassord (pass opp problemer med # noen PAM-moduler og tråder) ChallengeResponseAuthentication yes
Lagre endringen og aktiver autentiseringen:
google-autentifikatoren
I tillegg til å se en stor QR-kode (som vist øverst i denne opplæringen), ser du også et sett med hemmelige innloggingstaster og blir spurt noen spørsmål for å tilpasse konfigurasjonen din:
Ved hjelp av Google Authenticator-appen på telefonen, velg redigeringsikonet øverst til høyre og legg til en ny oppføring ved hjelp av knappen nederst. Du kan enten skanne QR-koden med kameraet eller angi den hemmelige nøkkelen. Når du er ferdig, vil Google Authenticator være klar til å gi koder til deg for neste pålogging.
Skriv ut en kopi av disse beredskapskrappekodene og lagre dem på et sikkert sted, hvis du trenger å gjenopprette påloggingen din uten tofaktors autentisering.
Start SSH-tjenesten på nytt og logg ut:
sudo service ssh restart logout
Logg på igjen, og denne gangen blir du bedt om en bekreftelseskode før passordet ditt. Skriv inn den seks sifrede verifiseringskoden fra Google Authenticator på telefonen din:
Tillegget av tofaktorsautentisering legger til et sterkt lag av sekundær sikkerhet til serveren din. Likevel er det mer vi kan gjøre.
Det er lurt å slå av serverens passordbaserte pålogging til fordel for sikkerhetsnøkler; nøklene er langt mer motstandsdyktige mot angrep. Passordene er korte og underlagt ordboksangrep; Nøklene er lengre, og for det meste kan det bare kompromitteres av statlige supercomputers.
For å opprette SSH-nøkkelen, følg disse instruksjonene. Bytt til hjemmekatalogen for den nye brukeren din:
cd / hjemme / hal
Lag en SSH-katalog og sett tillatelser:
mkdir .ssh chmod 700 .ssh
Generer et nytt nøkkelpar. Når du blir bedt om det, er det opp til deg om du vil legge til et passord til nøkkelen:
cd .ssh ssh-keygen -b 1024 -f id_hal -t dsa
Legg til den offentlige nøkkelen til authorized_keys
fil:
katt ~ / .ssh / id_hal.pub> ~ / .ssh / authorized_keys
Angi tillatelsene for nøkkelfilen:
chmod 600 ~ / .ssh / *
Flytt privatnøkkelen til en tempmappe for nedlasting til din lokale datamaskin:
cp ~ / .ssh / * / tmp chmod 644 / tmp / *
Last ned den nye private nøkkelen til datamaskinen din ved hjelp av Ubuntu-kontoen din. På din datamaskin, bruk Terminal:
scp -P 33322 -i ~ / .ssh / id_hal [email protected]: / tmp / * ~ / .ssh
Angi tillatelser og test:
cd ~ / .ssh chmod 400 id_hal ssh -p 33322 -i ~ / .ssh / id_hal [email protected]
Hvis du får feil, kan du prøve å se loggen på AWS-serveren mens du prøver å logge inn:
hale -f /var/log/auth.log
Fjern de midlertidige nøkkelfilene fra serverens tmp-katalog:
rm -rf / tmp / *
Rediger SSH-konfigurasjonsfilen igjen:
sudo nano / etc / ssh / sshd_config
Slå av passordgodkjenning:
PasswordAuthentication nr
Start SSH-tjenesten på nytt:
sudo service ssh restart
Nå vil ingen kunne logge på serveren uten din private nøkkel. For å logge på serveren din, bruk følgende kommando:
ssh -p 33322 -i ~ / .ssh / id_hal [email protected]
Sørg for at du holder datamaskinen du bruker med den private nøkkelen på den; Det er også lurt å lagre en kopi av din private nøkkel på en flash-stasjon et sted fysisk sikkert.
Legg merke til at Google Authenticator-tofaktorautentisering er omgått ved bruk av SSH-nøkkel sikkerhet.
Også, hvis du noen gang blir låst ut av serveren din under disse konfigurasjonene, gir DigitalOcean en webkonsoll som fungerer som om et tastatur ble koblet til serveren din. For andre verter må du kanskje få hjelp fra deres støtteteam.
Selv om innloggingsportalen til serveren din er et alvorlig sikkerhetsproblem, er det sannsynligvis de programmene du velger å installere, å gi enda større risiko. For eksempel har jeg nylig lest at bruk av feil sikret regelmessige uttrykk i PHP-appen din kan åpne serveren din for ReDoS-angrep.
Men et vanlig eksempel er det siste WordPress-plugin-sikkerhetsproblemet med Slider Revolution. Et tema jeg hadde installert, faktisk samlet dette pluginet, så jeg måtte oppdatere temaet for å fikse feilen.
Applikasjonsproblemer kan være vanskelig å følge med. Det kan gjøre retur til administrert hosting synes attraktivt igjen; ikke gi opp! Vær forsiktig med programmer du installerer, hold deg på postlister for kodeleverandørene dine og hold deg oppdatert regelmessig.
Vær proaktiv, og gjør det du kan for å beskytte appene dine. For eksempel, se på hvordan jeg beskriver å legge til Apache-brukersikkerhet til installasjonen av populær webapp, PHPMyAdmin, som brukes til å forenkle MySQL-databasetilgang og administrasjon. Fordi bare administratorer trenger tilgang til PHPMyAdmin, og konsekvensene av at det er hacket, er høyt, er det ganske passende å legge til et ekstra lag med passordsikkerhet for denne appen.
Sikkerhet er en stor bekymring og et stort område for å gripe. Jeg håper du har funnet denne opplæringen nyttig. Ta gjerne inn dine egne ideer, rettelser, spørsmål og kommentarer nedenfor. Jeg ville være spesielt interessert i alternative og utvidede tilnærminger. Du kan også nå meg på Twitter @ reifman eller email meg direkte.