Il-Gwida Ultimate biex Tiżgura, Tibbies u Ttejjeb il-Prestazzjoni ta 'Nginx Web Server


Ibbażat fuq l-affarijiet mill-isbaħ li smajt dwar Nginx, forsi ddeċidejt li tipprovaha. Jista 'jkollok għoġobha tant li qed tikkunsidra li tissostitwixxi l-installazzjonijiet Apache tiegħek b'Nginx wara li għaddejt minn xi wħud mill-artikoli dwar is-suġġett li ppublikajna fuq dan is-sit.

Jekk iva, jien ċert li int se tilqa’ din il-gwida b’idejha miftuħa peress li se nkopru 12-il tip biex tiżdied is-sigurtà tas-servers Nginx tiegħek (li jvarjaw minn iż-żamma ta’ Nginx aġġornata sa l-użu ta’ TLS u direzzjoni mill-ġdid ta’ HTTP għal HTTPS), u tinnota li xi wħud minnhom huma simili ħafna għal dak li tagħmel b'Apache.

Titlifx:

Se nużaw l-ambjent li ġej f'din il-gwida:

  1. Debian GNU/Linux 8.1 (jessie).
  2. indirizz IP: 192.168.0.25 (tecmintlovesnginx.com) u 192.168.0.26 (nginxmeanspower.com), kif deskritt fit-taqsima tal-hosts virtwali bbażati fuq IP fi
    1. “Kif Tissettja Hosts Virtwali bbażati fuq ismijiet u bbażati fuq IP (Blokki tas-Server) b'Nginx“

    B'dan f'moħħna, ejja nibdew.

    TIP #1: Żomm Nginx aġġornat

    Fiż-żmien ta 'din il-kitba, l-aħħar verżjonijiet ta' Nginx fiċ-Repożitorji CentOS (f'EPEL) u Debian huma 1.6.3 u 1.6.2-5, rispettivament.

    Għalkemm l-installazzjoni tas-softwer mir-repożitorji hija aktar faċli milli tikkumpila l-programm mill-kodiċi tas-sors, din l-aħħar għażla għandha żewġ vantaġġi: 1) tippermettilek tibni moduli żejda f'Nginx (bħal mod_security), u 2) dejjem tipprovdi verżjoni aktar ġdida. mir-repożitorji (1.9.9 mil-lum). In-noti ta 'rilaxx huma dejjem disponibbli fis-sit web ta' Nginx.

    Titlifx:

    TIP #2: Neħħi l-Moduli mhux meħtieġa f'Nginx

    Biex tneħħi b'mod espliċitu moduli minn Nginx waqt l-installazzjoni mis-sors, agħmel:

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

    Pereżempju:

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

    Kif probabilment taħsbu, it-tneħħija tal-moduli minn installazzjoni preċedenti ta 'Nginx mis-sors teħtieġ li terġa' titwettaq il-kumpilazzjoni.

    Kelma ta' kawtela: Direttivi ta' konfigurazzjoni huma pprovduti minn moduli. Kun żgur li ma tiddiżattivax modulu li fih direttiva li ser ikollok bżonn fit-triq! Għandek tiċċekkja n-nginx docs għal-lista ta 'direttivi disponibbli f'kull modulu qabel tieħu deċiżjoni dwar id-diżattivazzjoni tal-moduli.

    TIP #3: Iddiżattiva d-Direttiva server_tokens f'Nginx

    Id-direttiva server_tokens tgħid lil Nginx biex juri l-verżjoni attwali tiegħu fuq paġni ta 'żball. Dan mhux mixtieq peress li ma tridx taqsam dik l-informazzjoni mad-dinja sabiex tipprevjeni attakki fuq is-server tal-web tiegħek ikkawżati minn vulnerabbiltajiet magħrufa f'dik il-verżjoni speċifika.

    Biex tiddiżattiva d-direttiva server_tokens, issettja jekk tridx tintefa' ġewwa blokka server:

    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;
    }
    

    Ibda mill-ġdid nginx u vverifika l-bidliet:

    TIP #4: Iċħad l-Aġenti tal-Utenti HTTP f'Nginx

    Aġent tal-utent HTTP huwa softwer li jintuża għan-negozjar tal-kontenut kontra server tal-web. Dan jinkludi wkoll bots u crawlers tal-malware li jistgħu jispiċċaw jaffettwaw il-prestazzjoni tas-server tal-web tiegħek billi jaħlu r-riżorsi tas-sistema.

    Sabiex iżżomm aktar faċilment il-lista tal-aġenti tal-utent mhux mixtieqa, oħloq fajl (/etc/nginx/blockuseragents.rules pereżempju) bil-kontenut li ġej:

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

    Sussegwentement, poġġi l-linja li ġejja qabel id-definizzjoni tal-blokk tas-server:

    include /etc/nginx/blockuseragents.rules;
    

    U dikjarazzjoni if biex tirritorna tweġiba 403 jekk is-sekwenza tal-aġent tal-utent tkun fil-lista sewda definita hawn fuq:

    Ibda mill-ġdid nginx, u l-aġenti kollha tal-utent li s-sekwenza tagħhom taqbel ma 'hawn fuq se jiġu mblukkati milli jaċċessaw is-server tal-web tiegħek. Ibdel 192.168.0.25 bl-IP tas-server tiegħek u tħossok liberu li tagħżel string differenti għas-swiċċ --user-agent ta’ wget:

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

    TIP #5: Iddiżattiva Metodi HTTP mhux mixtieqa f'Nginx

    Magħruf ukoll bħala verbi, il-metodi HTTP jindikaw l-azzjoni mixtieqa li għandha tittieħed fuq riżors moqdi minn Nginx. Għal siti web u applikazzjonijiet komuni, għandek tippermetti biss GET, POST, u HEAD u tiddiżattiva l-oħrajn kollha.

    Biex tagħmel dan, poġġi l-linji li ġejjin ġewwa blokka server. Reazzjoni HTTP 444 tfisser rispons vojt u spiss tintuża f'Nginx biex iqarraq bl-attakki malware:

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

    Biex tittestja, uża curl biex tibgħat talba DELETE u qabbel l-output ma' meta tibgħat GET regolari:

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

    TIP #6: Issettja Limitazzjonijiet tad-Daqs tal-Buffer f'Nginx

    Biex tipprevjeni attakki ta' buffer overflow kontra s-server tal-web Nginx tiegħek, issettja d-direttivi li ġejjin f'fajl separat (oħloq fajl ġdid bl-isem /etc/nginx/conf.d/buffer.conf, pereżempju):

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

    Id-direttivi t'hawn fuq jiżguraw li t-talbiet li jsiru lis-server tal-web tiegħek ma jikkawżawx buffer overflow fis-sistema tiegħek. Għal darb'oħra, irreferi għad-doks għal aktar dettalji dwar dak li jagħmel kull wieħed minnhom.

    Imbagħad żid direttiva tal-inklużjoni fil-fajl tal-konfigurazzjoni:

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

    TIP #7: Illimita n-numru ta’ Konnessjonijiet bl-IP f’Nginx

    Sabiex tillimita l-konnessjonijiet bl-IP, uża d-direttivi limit_conn_zone (f'kuntest http jew għall-inqas barra mill-blokk tas-server) u limit_conn (f'kuntest http, blokk tas-server, jew kuntest tal-lokazzjoni).

    Madankollu, żomm f'moħħok li mhux il-konnessjonijiet kollha jingħaddu - iżda dawk biss li għandhom talba pproċessata mis-server u l-header kollu tat-talba tiegħu inqrat.

    Pereżempju, ejja nissettjaw in-numru massimu ta' konnessjonijiet għal 1 (iva, hija esaġerazzjoni, iżda se tagħmel ix-xogħol tajjeb f'dan il-każ) f'żona msemmija addr (tista' tissettja dan għal kwalunkwe isem li tixtieq):

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

    Test sempliċi b'Apache Benchmark (Perform Nginx Load) fejn isiru 10 konnessjonijiet totali b'2 talbiet simultanji se jgħinna nuru l-punt tagħna:

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

    Ara l-ponta li jmiss għal aktar dettalji.

    TIP #8: Setup Monitor Logs għal Nginx

    Ladarba tkun għamilt it-test deskritt fil-ponta preċedenti, iċċekkja r-reġistru tal-iżbalji li huwa definit għall-blokk tas-server:

    Tista' tkun trid tuża grep biex tiffiltra r-reġistri għal talbiet falluti li saru fiż-żona addr definita fit-TIP #7:

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

    Bl-istess mod, tista' tiffiltra r-reġistru tal-aċċess għal informazzjoni ta' interess, bħal:

    1. IP tal-Klijent
    2. Tip ta' browser
    3. Tip ta' talba HTTP
    4. Riżorsi mitluba
    5. Blokk tas-server li jwieġeb it-talba (utli jekk diversi hosts virtwali qed jidħlu fl-istess fajl).

    U ħu azzjoni xierqa jekk tiskopri xi attività mhux tas-soltu jew mhux mixtieqa.

    TIP #9: Ipprevjeni l-Hotlinking tal-Immaġni f'Nginx

    Il-hotlinking tal-immaġni jiġri meta persuna turi f'sit ieħor immaġini ospitata fuq tiegħek. Dan jikkawża żieda fl-użu tal-bandwidth tiegħek (li tħallas għaliha) filwaqt li l-persuna l-oħra turi l-immaġni bil-ferħ bħallikieku kienet il-proprjetà tiegħu jew tagħha. Fi kliem ieħor, huwa telf doppju għalik.

    Pereżempju, ejja ngħidu li għandek sottodirettorju jismu img ġewwa l-blokk tas-server tiegħek fejn taħżen l-immaġini kollha użati f'dak il-host virtwali. Biex tipprevjeni siti oħra milli jużaw l-immaġini tiegħek, ser ikollok bżonn daħħal il-blokka tal-lokazzjoni li ġejja ġewwa d-definizzjoni tal-host virtwali tiegħek:

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

    Imbagħad immodifika l-fajl index.html f'kull host virtwali kif ġej:

    Issa bbrawżja għal kull sit u kif tistgħu taraw, l-immaġni hija murija b'mod korrett f'192.168.0.25 iżda hija sostitwita b'rispons 403 f'192.168.0.26:

    Innota li din il-ponta tiddependi fuq il-browser remot li jibgħat il-qasam tar-Referer.

    TIP #10: Iddiżattiva SSL u Ippermetti TLS biss f'Nginx

    Kull meta jkun possibbli, agħmel dak kollu li hemm bżonn biex tevita SSL fi kwalunkwe mill-verżjonijiet tagħha u uża TLS minflok. Il-ssl_protocols li ġejjin għandhom jitqiegħdu f'kuntest ta' server jew http fil-fajl host virtwali tiegħek jew huwa fajl separat permezz ta' direttiva include (xi nies jużaw fajl bl-isem ssl.conf , iżda huwa kompletament f'idejk):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    Pereżempju:

    TIP #11: Oħloq Ċertifikati f'Nginx

    L-ewwelnett, iġġenera ċavetta u ċertifikat. Ħossok liberu li tuża tip differenti ta' encryption jekk trid:

    # 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
    

    Imbagħad żid il-linji li ġejjin ġewwa blokka server separata bi tħejjija għall-ponta li jmiss (http --> https direzzjoni mill-ġdid) u ċċaqlaq id-direttivi relatati mal-SSL għall-blokk il-ġdid ukoll:

    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;
    }
    

    Fil-ponta li jmiss se nivverifikaw kif is-sit tagħna issa qed juża ċertifikat u TLS iffirmat minnu nnifsu.

    TIP #12: Idderieġi mill-ġdid it-traffiku HTTP għal HTTPS f'Nginx

    Żid il-linja li ġejja mal-ewwel blokk tas-server:

    return 301 https://$server_name$request_uri;
    

    Id-direttiva ta 'hawn fuq se tirritorna tweġiba 301 (Imċaqlaq b'mod permanenti), li tintuża għal direzzjoni mill-ġdid tal-URL permanenti kull meta ssir talba lejn il-port 80 tal-host virtwali tiegħek, u se terġa' tindirizza t-talba lejn il-blokk tas-server li żidna fil-ponta preċedenti.

    L-immaġni hawn taħt turi d-direzzjoni mill-ġdid u tikkonferma l-fatt li qed nużaw TLS 1.2 u AES-256 għall-encryption:

    Sommarju

    F'dan l-artikolu qsamna ftit suġġerimenti biex niżguraw is-server tal-web Nginx tiegħek. Nixtiequ nisimgħu x'taħseb u, jekk għandek pariri oħra li tixtieq taqsam mal-bqija tal-komunità, tħossok liberu li tgħarrafna billi tibgħatilna nota billi tuża l-formola tal-kummenti hawn taħt.