Fullkominn leiðarvísir til að tryggja, herða og bæta árangur Nginx vefþjóns


Byggt á því frábæra sem þú hefur heyrt um Nginx, ákvaðstu kannski að prófa það. Þú gætir hafa líkað við það svo mikið að þú ert að íhuga að skipta um Apache uppsetningarnar þínar fyrir Nginx eftir að hafa farið í gegnum nokkrar af greinunum um efnið sem við höfum birt á þessari síðu.

Ef svo er, þá er ég viss um að þú munt taka þessari handbók opnum örmum þar sem við ætlum að fjalla um 12 ráð til að auka öryggi Nginx netþjónanna þinna (allt frá því að halda Nginx uppfærðum alla leið til að nota TLS og beina HTTP til HTTPS), og þú munt taka eftir því að sum þeirra eru mjög svipuð því sem þú myndir gera með Apache.

Ekki missa af:

Við munum nota eftirfarandi umhverfi í þessari handbók:

  1. Debian GNU/Linux 8.1 (jessie).
  2. IP vistfang: 192.168.0.25 (tecmintlovesnginx.com) og 192.168.0.26 (nginxmeanspower.com), eins og lýst er í hlutanum um sýndarhýsingar sem byggja á IP á
    1. “Hvernig á að setja upp nafn- og IP-byggða sýndargestgjafa (þjónablokkir) með Nginx“

    Með það í huga skulum við byrja.

    ÁBENDING #1: Haltu Nginx uppfærðum

    Þegar þetta er skrifað eru nýjustu Nginx útgáfurnar í CentOS (í EPEL) og Debian geymslunum 1.6.3 og 1.6.2-5, í sömu röð.

    Þó að það sé auðveldara að setja upp hugbúnað úr geymslunum en að setja forritið saman úr frumkóða, þá hefur þessi síðasti kostur tvo kosti: 1) hann gerir þér kleift að byggja aukaeiningar inn í Nginx (eins og mod_security), og 2) hann mun alltaf veita nýrri útgáfu en geymslurnar (1.9.9 frá og með deginum í dag). Útgáfuskýrslur eru alltaf tiltækar á Nginx vefsíðunni.

    Ekki missa af:

    ÁBENDING #2: Fjarlægðu óþarfa einingar í Nginx

    Til að fjarlægja einingar sérstaklega úr Nginx meðan þú setur upp frá uppruna skaltu gera:

    # ./configure --without-module1 --without-module2 --without-module3
    

    Til dæmis:

    # ./configure  --without-http_dav_module --withouthttp_spdy_module 
    

    Eins og þú munt líklega giska á, að fjarlægja einingar úr fyrri Nginx uppsetningu frá uppruna krefst þess að framkvæma samantektina aftur.

    Varúðarorð: Stillingarleiðbeiningar eru veittar af einingum. Gakktu úr skugga um að þú slökktir ekki á einingu sem inniheldur tilskipun sem þú þarft á götunni! Þú ættir að skoða nginx skjölin fyrir lista yfir tilskipanir sem eru tiltækar í hverri einingu áður en þú tekur ákvörðun um að slökkva á einingar.

    ÁBENDING #3: Slökktu á tilskipun server_tokens í Nginx

    server_tokens tilskipunin segir Nginx að sýna núverandi útgáfu sína á villusíðum. Þetta er ekki æskilegt þar sem þú vilt ekki deila þessum upplýsingum með heiminum til að koma í veg fyrir árásir á vefþjóninn þinn af völdum þekktra veikleika í þeirri tilteknu útgáfu.

    Til að slökkva á server_tokens tilskipuninni skaltu stilla ef slökkt er á inni í netþjónsblokk:

    server {
        listen       192.168.0.25:80;
        server_tokens        off;
        server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
        access_log  /var/www/logs/tecmintlovesnginx.access.log;
        error_log  /var/www/logs/tecmintlovesnginx.error.log error;
            root   /var/www/tecmintlovesnginx.com/public_html;
            index  index.html index.htm;
    }
    

    Endurræstu nginx og staðfestu breytingarnar:

    ÁBENDING #4: Neita HTTP notendaumboðsmönnum í Nginx

    HTTP notendaumboðsmaður er hugbúnaður sem er notaður til að semja um efni gegn vefþjóni. Þetta felur einnig í sér spilliforrit og vefskriðlar sem geta haft áhrif á afköst vefþjónsins þíns með því að sóa kerfisauðlindum.

    Til þess að auðveldara sé að viðhalda listanum yfir óæskilega notendafulltrúa skaltu búa til skrá (/etc/nginx/blockuseragents.rules til dæmis) með eftirfarandi innihaldi:

    map $http_user_agent $blockedagent {
            default         0;
            ~*malicious     1;
            ~*bot           1;
            ~*backdoor      1;
            ~*crawler       1;
            ~*bandit        1;
    }
    

    Næst skaltu setja eftirfarandi línu fyrir skilgreiningu miðlarablokkarinnar:

    include /etc/nginx/blockuseragents.rules;
    

    Og if yfirlýsing til að skila 403 svari ef notendaumboðsstrengurinn er á svarta listanum sem skilgreindur er hér að ofan:

    Endurræstu nginx og öllum notendaumboðsmönnum sem samsvara strengnum hér að ofan verður lokað fyrir aðgang að vefþjóninum þínum. Skiptu út 192.168.0.25 með IP netþjóninum þínum og ekki hika við að velja annan streng fyrir --user-agent rofann á wget:

    # wget http://192.168.0.25/index.html
    # wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html 
    

    ÁBENDING #5: Slökktu á óæskilegum HTTP aðferðum í Nginx

    Einnig þekktar sem sagnir, HTTP aðferðir gefa til kynna hvaða aðgerð á að grípa til á auðlind sem Nginx þjónar. Fyrir algengar vefsíður og forrit ættir þú aðeins að leyfa GET, POST og HEAD og slökkva á öllum öðrum.

    Til að gera það skaltu setja eftirfarandi línur inn í netþjónsblokk. 444 HTTP svar þýðir tómt svar og er oft notað í Nginx til að blekkja spilliforrit:

    if ($request_method !~ ^(GET|HEAD|POST)$) {
       return 444;
    }
    

    Til að prófa, notaðu curl til að senda DELETE beiðni og bera saman úttakið við þegar þú sendir venjulega GET:

    # curl -X DELETE http://192.168.0.25/index.html
    # curl -X POST http://192.168.0.25/index.html 
    

    ÁBENDING #6: Stilltu takmarkanir á stærð stuðpúða í Nginx

    Til að koma í veg fyrir árásir á biðminni gegn Nginx vefþjóninum þínum skaltu setja eftirfarandi tilskipanir í sérstaka skrá (búa til nýja skrá sem heitir /etc/nginx/conf.d/buffer.conf, til dæmis):

    client_body_buffer_size  1k;
    client_header_buffer_size 1k;
    client_max_body_size 1k;
    large_client_header_buffers 2 1k;
    

    Tilskipanirnar hér að ofan munu tryggja að beiðnir sem gerðar eru á vefþjóninn þinn valdi ekki biðminni yfirflæði í kerfinu þínu. Enn og aftur, skoðaðu skjölin fyrir frekari upplýsingar um hvað hver þeirra gerir.

    Bættu síðan við tilskipun um innihald í stillingarskránni:

    include /etc/nginx/conf.d/*.conf;
    

    ÁBENDING #7: Takmarkaðu fjölda tenginga með IP í Nginx

    Til að takmarka tengingar með IP, notaðu limit_conn_zone (í http samhengi eða að minnsta kosti utan netþjónsblokkarinnar) og limit_conn (í http, miðlarablokk eða staðsetningarsamhengi) tilskipunum.

    Hins vegar, hafðu í huga að ekki eru allar tengingar taldar - heldur aðeins þær sem hafa beiðni unnin af þjóninum og allt beiðnihaus hans hefur verið lesið.

    Til dæmis skulum við stilla hámarksfjölda tenginga á 1 (já, það er ýkjur, en það mun gera starfið bara fínt í þessu tilfelli) á svæði sem heitir addr (þú getur stillt þetta á hvað sem er nafn sem þú vilt):

    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 1;
    

    Einfalt próf með Apache Benchmark (Perform Nginx Load) þar sem 10 heildartengingar eru gerðar með 2 samtímis beiðnum mun hjálpa okkur að sýna fram á mál okkar:

    # ab -n 10 -c 2 http://192.168.0.25/index.html
    

    Sjá næstu ábendingu fyrir frekari upplýsingar.

    ÁBENDING #8: Uppsetning skjáskrár fyrir Nginx

    Þegar þú hefur framkvæmt prófið sem lýst er í fyrri ábendingunni skaltu athuga villuskrána sem er skilgreind fyrir netþjónsblokkina:

    Þú gætir viljað nota grep til að sía annála fyrir misheppnaðar beiðnir sem gerðar eru til adr svæðisins sem skilgreint er í RÁÐ #7:

    # grep addr /var/www/logs/tecmintlovesnginx.error.log --color=auto
    

    Sömuleiðis geturðu síað aðgangsskrána fyrir áhugaverðar upplýsingar, svo sem:

    1. IP viðskiptavinar
    2. Tegund vafra
    3. Tegund HTTP beiðni
    4. Tilfang beðið um
    5. Blokkun netþjóns sem svarar beiðninni (gagnlegt ef nokkrir sýndarhýsingar eru að skrá sig inn í sömu skrána).

    Og gríptu til viðeigandi aðgerða ef þú finnur einhverja óvenjulega eða óæskilega virkni.

    ÁBENDING #9: Komdu í veg fyrir myndatengingar í Nginx

    Hotlinking mynda á sér stað þegar einstaklingur sýnir á annarri síðu mynd sem hýst er á þinni. Þetta veldur aukinni bandbreiddarnotkun þinni (sem þú borgar fyrir) á meðan hinn aðilinn sýnir myndina með ánægju eins og hún væri hans eða hennar eign. Með öðrum orðum, það er tvöfalt tap fyrir þig.

    Til dæmis, segjum að þú sért með undirmöppu sem heitir img inni í netþjónareitnum þínum þar sem þú geymir allar myndirnar sem notaðar eru í sýndarhýslinum. Til að koma í veg fyrir að aðrar síður noti myndirnar þínar þarftu að setja eftirfarandi staðsetningarblokk inn í skilgreiningu sýndarhýsilsins:

    location /img/ {
      valid_referers none blocked 192.168.0.25;
       if ($invalid_referer) {
         return   403;
       }
    }
    

    Breyttu síðan index.html skránni í hverjum sýndarhýsil sem hér segir:

    Skoðaðu nú hverja síðu og eins og þú sérð er myndin rétt sýnd í 192.168.0.25 en í staðinn kemur 403 svar í 192.168.0.26:

    Athugaðu að þessi ábending er háð því að ytri vafri sendir tilvísunarreitinn.

    ÁBENDING #10: Slökktu á SSL og virkjaðu aðeins TLS í Nginx

    Þegar mögulegt er, gerðu allt sem þarf til að forðast SSL í hvaða útgáfu sem er og notaðu TLS í staðinn. Eftirfarandi ssl_samskiptareglur ættu að vera settar í netþjón eða http samhengi í sýndarhýsingarskránni þinni eða er aðskilin skrá með include tilskipun (sumt fólk notar skrá sem heitir ssl.conf , en það er algjörlega undir þér komið):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    Til dæmis:

    ÁBENDING #11: Búðu til skírteini í Nginx

    Fyrst skaltu búa til lykil og vottorð. Ekki hika við að nota aðra tegund af dulkóðun ef þú vilt:

    # openssl genrsa -aes256 -out tecmintlovesnginx.key 1024
    # openssl req -new -key tecmintlovesnginx.key -out tecmintlovesnginx.csr
    # cp tecmintlovesnginx.key tecmintlovesnginx.key.org
    # openssl rsa -in tecmintlovesnginx.key.org -out tecmintlovesnginx.key
    # openssl x509 -req -days 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.key -out tecmintlovesnginx.crt
    

    Bættu síðan við eftirfarandi línum inn í sérstakan netþjónsblokk til að undirbúa næstu ábendingu (http --> https tilvísun) og færðu einnig SSL-tengdar tilskipanir í nýja blokkina:

    server {
        listen 192.168.0.25:443 ssl;
        server_tokens off;
        server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
        root   /var/www/tecmintlovesnginx.com/public_html;
        ssl_certificate /etc/nginx/sites-enabled/certs/tecmintlovesnginx.crt;
        ssl_certificate_key /etc/nginx/sites-enabled/certs/tecmintlovesnginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    }
    

    Í næstu ábendingu munum við sannreyna hvernig vefsíðan okkar notar nú sjálfsskrifað vottorð og TLS.

    ÁBENDING #12: Beindu HTTP umferð yfir á HTTPS í Nginx

    Bættu eftirfarandi línu við fyrstu netþjónablokkina:

    return 301 https://$server_name$request_uri;
    

    Ofangreind tilskipun mun skila 301 (Fært varanlega) svari, sem er notað fyrir varanlega vefslóð tilvísun í hvert sinn sem beiðni er lögð á höfn 80 sýndarhýsilsins þíns, og mun beina beiðninni á netþjónsblokkina sem við bættum við í fyrri ábendingunni.

    Myndin hér að neðan sýnir tilvísunina og staðfestir þá staðreynd að við erum að nota TLS 1.2 og AES-256 fyrir dulkóðun:

    Samantekt

    Í þessari grein höfum við deilt nokkrum ráðum til að tryggja Nginx vefþjóninn þinn. Okkur þætti vænt um að heyra hvað þér finnst og ef þú hefur önnur ráð sem þú vilt deila með restinni af samfélaginu, ekki hika við að láta okkur vita með því að senda okkur athugasemd með því að nota athugasemdareyðublaðið hér að neðan.