Crearea punerii în funcțiune Bazele securității

Ce veți crea

Acest tutorial face parte din Construirea sistemului de pornire cu seria PHP pe Envato Tuts +. În această serie, vă conduc prin lansarea unui startup de la concept la realitate, utilizând ajutorul meu Planificatorul întâlnirilor aplicație ca exemplu de viață reală. Fiecare pas de-a lungul drumului, voi lansa codul Planificatorului de Întâlniri ca exemple de sursă deschisă pe care le puteți învăța. Voi aborda, de asemenea, problemele de afaceri legate de pornire în momentul în care apar.

Serverul de producție pentru Planificatorul de întâlniri rulează în prezent la Oceanul Digital (vedeți alte tutoriale despre ele la Envato Tuts +.) În episodul de astăzi, ne vom arunca cu capul în fundalul securității serverului web. Voi acoperi asigurarea Linux VPS care rulează Planificatorul de întâlniri și unele securitate de bază Yii. În următorul episod, mă voi arunca mai mult în securitatea programelor Yii.

Fac participarea la subiectele de comentarii de mai jos, deci vă rugăm să trimiteți feedback-ul dvs. Spuneți-mi dacă există subiecte de securitate pe care le considerați că mi-a lipsit. Sunt, de asemenea, deschis la idei noi de funcții și sugestii de subiect pentru tutoriale viitoare.

Ca un memento, întregul cod pentru Planificatorul întâlnirilor este scris în cadrul Yii2 Framework for PHP. Dacă doriți să aflați mai multe despre Yii2, consultați seria noastră paralelă Programming With Yii2.

Dacă nu ați făcut-o încă, încercați Planificatorul întâlnirilor chiar acum, planificând prima dvs. întâlnire. Nu ezitați să trimiteți feedback despre experiența dvs. în comentariile de mai jos. 

Gazduire si securitate VPS

Resurse comune

Dacă rulați un VPS Linux generic, poate doriți să revizuiți tutorialul meu anterior Envato Tuts +, Securizarea conectării la server. Acesta acoperă o serie de pași pe care îi vom revizui astăzi, inclusiv securitatea SSH și firewall-urile.

Oceanul digital este, de asemenea, o mare resursă pentru practicile de securitate. O introducere în securizarea VPS Linux este una dintre cele mai bune prezentări pe care le oferă. În plus, au grafică rece.

prin intermediul celor 7 măsuri de securitate digitale pentru a vă proteja serverele

Iată trei alte articole pe care le oferă pe care le-am folosit pentru fundal în acest tutorial:

  • 7 Măsuri de securitate pentru a vă proteja serverele
  • UFW Essentials: Reguli și comenzi firewall comune
  • Cum să protejezi un server Apache cu Fail2Ban pe Ubuntu 14.04

Păstrarea serverului actualizat

În primul rând, este vital să țineți serverul actualizat cu actualizări și upgrade-uri regulate. Acest lucru integrează patch-uri de securitate de la furnizorii de software (și de la sursele deschise) pe care îl utilizați.

Iată pașii de bază - probabil că veți fi familiarizați cu ei:

$ sudo apt-get update Obțineți: 1 http://security.ubuntu.com trusty-security InRelease [65,9 kB] Obțineți: 2 http://security.ubuntu.com Trust-security / principale Surse [118 kB] Obțineți: 3 http://security.ubuntu.com Trust de securitate / univers Surse [38.0 kB] ... Ign http://mirrors.digitalocean.com încredere / univers Traduceri-en_US Preluate 5,298 kB în 10s (526 kB / s) Pachet de lectură listele ... Terminate

Dist-upgrade utilizează câteva informații pentru a gestiona interdependențele pachetelor actualizate:

$ sudo apt-get dist-upgrade Citirea listelor de pachete ... Terminat Crearea unui arbore de dependență Citirea informațiilor de stare ... Terminat Calculând actualizarea ... Terminat Următoarele pachete au fost instalate automat și nu mai sunt necesare: linux-headers-3.13.0-85 linux-headers- 3.13.0-85 generic linux-headers-3.13.0-86 linux-headers-3.13.0-86-generic ... Configurarea cloud-init (0.7.5-0ubuntu1.19) ... Lăsând "deviere de / etc / init / ureadahead.conf la /etc/init/ureadahead.conf.disabled by cloud-init 'Procesoare de procesare pentru libc-bin (2.19-0ubuntu6.9) ... 

Pentru a vă asigura că funcționează complet, este posibil să fie necesar să reporniți ocazional. Întotdeauna opresc baza de date și apoi repornește:

$ sudo service mysql Stop mysql stop / de așteptare $ sudo reboot $ mesaj de difuzare de la meetingplanner.io (/ dev / pts / 0) la 13: 51 ... Sistemul se duce în jos pentru a reporni ACUM! Conexiunea la meetingplanner.io închisă de gazdă la distanță. Conexiunea la meetingplanner.io a fost închisă.

Când Planificatorul întâlnirilor are mai mulți utilizatori, pot fi necesare mecanisme de repornire mai elaborate.

Configurarea conectării SSH

Imagine prin intermediul celor 7 măsuri de securitate digitale pentru a vă proteja serverele

Aveți opțiunea de a utiliza cheia privată atunci când creați o picătură de ocean digital. Când am creat planificatorul de întâlniri, am repetat pașii pe care i-am prezentat aici: securizarea conectării la server.

De asemenea, am mutat login-ul SSH la un port personalizat, nu la portul utilizat (și atacat) 22.

Configurarea unui paravan de protecție

Imagine prin intermediul celor 7 măsuri de securitate digitale pentru a vă proteja serverele

Apoi, am instalat UFW, paravanul de protecție necomplicat:

$ sudo ufw enable Command poate întrerupe conexiunile ssh existente. Continuați cu operația (y | n)?

Cu toate acestea, nu am răspuns la această solicitare. Avertizarea mi-a amintit că verificam toate cerințele SSH-ului meu.

De exemplu, am dezactivat portul SSH implicit și l-am activat pe cel pe care îl folosesc:

$ sudo ufw permite 31345 $ sudo ufw neagă 22

Apoi, am stabilit o cerere sudo pentru viitor pentru a dezactiva UFW în cazul în care setările mele nu au fost corecte:

$ sudo acum + 5 minute avertisment: comenzile vor fi executate folosind / bin / sh la> sudo ufw dezactivat la>  job 9 la Mie Jul 18 16:14:00 2016

Apoi, am activat UFW și am trecut prin setările rămase:

$ sudo ufw implicit refuza intrarea $ sudo ufw implicit permite ieșirea $ sudo ufw permite http $ sudo ufw permite https $ sudo ufw deni mysql $ sudo ufw enable Comandă poate întrerupe conexiunile ssh existente. Continuați cu operația (y | n)? y Firewall-ul este activ și activat la pornirea sistemului

Iată rezultatele:

$ sudo ufw status Stare: activă la acțiune de la - ------ ---- 31345 ALLOW oriunde 80 ALLOW oriunde 443 ALLOW oriunde 22 DENY oriunde 3306 DENY oriunde 31345 (v6) ALLOW Anywhere (v6) 80 (v6) (V6) 443 (v6) ALLOW Anywhere (v6) 22 (v6) DENI Oriunde (v6) 3306 (v6) DENY Oriunde (v6) 

Notă: Deoarece baza mea de date se execută în prezent pe același server ca și serviciile web ale Planificatorului de întâlniri, pot să blochez portul 3306. Cu toate acestea, deoarece utilizarea site-ului se face pe mai multe servere, vor fi necesare modificări.

De asemenea, am modificat configurația UFW pentru a activa paravanul de protecție când serverul repornește:

$ sudo nano /etc/ufw/ufw.conf activată = activată

Din cauza comenzii întârziate de dezactivare, a trebuit să activez din nou UFW după cinci minute.

În plus față de securizarea autentificării serverului dvs., Digital Ocean ghidează UFW Essentials: Regulile și comenzile obișnuite de firewall și modul de configurare a unui firewall cu UFW pe un Ubuntu și Debian Cloud Server sunt utile atunci când configurați UFW.

Configurarea SSL

Pentru securitatea persoanelor care utilizează Planificatorul de întâlniri, am setat și SSL așa cum este descris în Utilizarea Let's Encrypt SSL Cu Proiectul WordPress.

Și, poate ați observat, am permis accesul https la portul 443 când am configurat paravanul de protecție de mai sus. Solicitările către http://meetingplanner.io se redirecționează automat la https://meetingplanner.io.

Noțiuni de bază cu securizarea aplicației Yii2

Dincolo de fundația de securitate Linux, trebuie să ne gândim și la asigurarea cadrului Yii pe partea de sus a PHP. Poate doriți să citiți Programarea cu Yii2: Security, majoritatea pe care o vom revizui în următorul episod.

Cu toate acestea, astăzi vom implementa câteva funcții de bază de control al accesului pentru Planificatorul de întâlniri.

Controlul accesului

Unul dintre beneficiile inițiale ale utilizării unui cadru PHP MVC este că toate cererile pentru pagini sunt direcționate printr-un singur fișier index.php. Așa cum am descris în programarea cu Yii2: Routing și creare de URL-uri, Yii gestionează cu atenție cererile de intrare pentru pagini și le direcționează către controlorii și metodele de acțiune corespunzătoare.

În plus, este de datoria noastră să asigurăm cererile controlorilor atunci când intră în aplicație. În primul rând, cine este această persoană și are dreptul să acceseze această pagină?

După cum sa discutat în tutorialul de securitate Yii2, Yii are o varietate de opțiuni pentru gestionarea accesului. Planificatorul de întâlniri utilizează în primul rând capacitatea de control al accesului.

Securizarea cererilor de aplicație frontală

Iată un exemplu de trafic care intră în controlerul de întâlnire pe care utilizatorii de obicei accesează:

clasa MeetingController extinde Controler comportamente funcționale publice () return ... 'access' => ['class' => \ common \ filters \ MeetingControl :: className (), // \ yii \ filters \ AccessControl :: className , "numai" => ["index", "vizualizare", "creare", "actualizare", "ștergere", " , "târziu"], "reguli" => [// permite utilizatorilor autentificați ['permit' => true, 'actions' => , 'declina', 'anula', 'comanda', 'download', 'wizard', 'trash', 'late'], 'roles' => ['@'],] , 'acțiuni' => ['comanda'], 'roluri' => ['?'],], // orice altceva este respins],],]; 

Comportamentul de acces protejează toate metodele menționate în 'numai'.  acţiuni listate cu rolurile '@' necesită utilizatori autentificați - cu alte cuvinte, numai utilizatorii care s-au conectat pot vedea aceste pagini. Utilizatorii care nu sunt conectați sunt redirecționați către pagina de pornire implicită. Cu toate acestea, paginile cu rolurile'?' sunt deschise publicului.

De exemplu, numai un utilizator autentificat poate crea o întâlnire, dar oricine poate introduce aplicația prin URL-ul întâlnirii / comenzii. Asta pentru că folosim adresa URL a comenzii pe scară largă în e-mailuri și are un alt nivel de autentificare, descris în tutorialul "Delivering Invitations". 

URL-ul de comandă permite utilizatorilor care nu sunt conectați (și chiar participanții la întâlniri care nu au mai fost pe site înainte) să acceseze în siguranță anumite pagini.

Securizarea cererilor de solicitare back-end

Pentru sistemul back-end al Planificatorului de întâlniri, numai administratorii pot accesa aceste pagini. Deoarece administratorii sunt notați în tabelul nostru de utilizatori într-o metodă personalizată, specifică aplicației, a trebuit să construiesc o regulă de acces personalizată pentru a le verifica. Rolurile de bază ale lui Yii suportă doar autentificate @ și neautorizate ?.

Să ne uităm la MessageController din spate pentru a trimite utilizatorilor noștri actualizări de e-mail la nivel de site:

Clasa MessageController extinde controlerul / ** * @inheritdoc * / funcțiile publice funcții () return '[' access '=> [' class '=> AccessControl :: className (),' rules '=> [[ > true, 'matchCallback' => functie ($ rule, $ action) retur (! \ Yii :: $ app-> user-> isGuest && \ common \ models \ User :: findOne (Yii :: $ app-> user-> getId ()) -> isAdmin ()); ],],],

Regula personalizată asigură că utilizatorul nu este un oaspete și că trece isAdmin () înainte de a le trimite la acțiunea corespunzătoare. Alți utilizatori sunt redirecționați către pagina de autentificare din spate.

Am realizat multe astăzi, dar mai avem multe de făcut.

Privind înainte

Dacă rulați un server, probabil că ați apreciat revizuirea de astăzi a securității de bază a Linux-ului și a gazduirii. În următorul episod, vom examina pașii de securitate legați mai strâns de cadrul Yii și de aplicația Planificator de întâlniri.

Uita-te pentru viitoarele tutoriale în Building Your Startup cu seria PHP. Sunt mai multe caracteristici mari care vin.

Link-uri conexe

  • Planificatorul întâlnirilor
  • Urmăriți profilul de finanțare al întâlnirii
  • Asigurarea conectării la server
  • Programare cu seria Yii2 (Envato Tuts +) 
  • Schimbul de dezvoltatori Yii2
Cod