Ntuziaka kacha mma maka nchekwa, sie ike na melite arụmọrụ nke sava weebụ Nginx


Dabere na ọmarịcha ihe ndị ị nụrụ gbasara Nginx, ikekwe ị kpebiri ịnwale ya. O nwere ike ịbụ na ọ masịrị gị nke ukwuu nke na-atụle iji Nginx dochie nrụnye Apache gị mgbe ị gachara ụfọdụ akụkọ gbasara isiokwu anyị bipụtara na saịtị a.

Ọ bụrụ otu a, ejiri m n'aka na ị ga-eji ogwe aka mepere emepe anabata ntuziaka a ebe anyị ga-ekpuchi ndụmọdụ 12 iji mee ka nchekwa nke sava Nginx gị dị elu (site na idobe Nginx ka ọ dị ugbu a n'ụzọ niile iji jiri TLS na redirecting HTTP gaa. HTTPS), ị ga-achọpụta na ụfọdụ n'ime ha yiri ihe ị ga-eme Apache.

Agbagharala:

Anyị ga-eji gburugburu ebe a na ntuziaka a:

  1. Debian GNU/Linux 8.1 (jessie).
  2. Adreesị IP: 192.168.0.25 (tecmintlovesnginx.com) na 192.168.0.26 (nginxmeanspower.com), dị ka akọwara na ngalaba ndị ọbịa nke dabeere na IP na
    1. “Otu esi edobe aha dabere na aha yana IP nke mebere ndị ọbịa (ihe nkesa ihe nkesa) na Nginx“

    N'iburu nke ahụ n'uche, ka anyị malite.

    NDỤMỌDỤ #1: Mee ka Nginx dị ọhụrụ

    N'oge ederede a, ụdị Nginx kachasị ọhụrụ na CentOS (na EPEL) na ebe nchekwa Debian bụ 1.6.3 na 1.6.2-5, n'otu n'otu.

    Ọ bụ ezie na ịwụnye ngwanrọ sitere na ebe nchekwa dị mfe karịa ịchịkọta mmemme ahụ site na koodu isi mmalite, nhọrọ ikpeazụ a nwere uru abụọ: 1) ọ na-enye gị ohere iwulite modul ọzọ n'ime Nginx (dị ka mod_security), yana 2) ọ ga-enye ụdị ọhụụ mgbe niile. karịa ebe nchekwa (1.9.9 dị ka nke taa). Ihe ndetu ntọhapụ na-adị mgbe niile na webụsaịtị Nginx.

    Agbagharala:

    NDỤMỌDỤ #2: Wepu modul na-adịghị mkpa na Nginx

    Iji wepu modul n'ụzọ doro anya na Nginx ka ị na-etinye na isi iyi, mee:

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

    Ọmụmaatụ:

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

    Dị ka ị ga-eche, iwepụ modul site na ntinye Nginx gara aga site na isi iyi chọrọ ịme nchịkọta ahụ ọzọ.

    Okwu ịdọ aka ná ntị: A na-enye ntụziaka nhazi site na modul. Jide n'aka na ị naghị agbanyụọ modul nwere ntuziaka ị ga-achọ ala n'okporo ụzọ! Ị kwesịrị ịlele nginx docs maka ndepụta ntụziaka dị na modul ọ bụla tupu ịme mkpebi na gbanyụọ modul.

    NDỤMỌDỤ #3: Gbanyụọ ntuziaka sava_token na Nginx

    Ntuziaka server_tokens na-agwa Nginx ka ọ gosipụta ụdị ya ugbu a na ibe mperi. Nke a abụghị ihe a na-achọsi ike ebe ọ bụ na ịchọghị ịkọrọ ụwa ozi ahụ iji gbochie mwakpo na sava weebụ gị nke adịghị ike ama ama na ụdị ahụ akọwapụtara.

    Iji gbanyụọ iwu server_tokens, tọọ ma ọ bụrụ na ọ ga-apụ n'ime ngọngọ nkesa:

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

    Malitegharịa nginx wee nyochaa mgbanwe ndị a:

    NDỤMỌDỤ #4: Agọnarị ndị ọrụ HTTP na Nginx

    Onye ọrụ HTTP bụ ngwanrọ eji eme mkparita ụka ọdịnaya megide sava weebụ. Nke a gụnyekwara bots malware na crawlers nwere ike mechaa mebie arụmọrụ sava weebụ gị site na imebi akụrụngwa sistemụ.

    Ka ị na-edobe ndepụta nke ndị ọrụ na-achọghị ngwa ngwa, mepụta faịlụ (/etc/nginx/blockuseragents.rules dịka ọmụmaatụ) yana ọdịnaya ndị a:

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

    Ọzọ, tinye ahịrị ndị a tupu nkọwa ngọngọ nkesa:

    include /etc/nginx/blockuseragents.rules;
    

    Na nkwupụta ọ bụrụ na iweghachi nzaghachi 403 ma ọ bụrụ na eriri onye ọrụ nọ na ndepụta ojii akọwapụtara n'elu:

    Malitegharịa nginx, a ga-egbochi ndị ọrụ niile nke eriri ha dabara na nke dị n'elu ịnweta sava weebụ gị. Dochie 192.168.0.25 na IP nkesa gị wee nweere onwe gị ịhọrọ eriri dị iche maka mgba ọkụ wget --onye ọrụ:

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

    NDỤMỌDỤ #5: Gbanyụọ usoro HTTP achọghị na Nginx

    A makwaara dị ka ngwaa, ụzọ HTTP na-egosi ihe achọrọ ka eme na akụrụngwa Nginx na-enye. Maka webụsaịtị na ngwa a na-ahụkarị, ị ga-ahapụ naanị GET, POST, na isi wee gbanyụọ ndị ọzọ niile.

    Iji mee nke a, tinye ahịrị ndị a n'ime ngọngọ nkesa. Nzaghachi HTTP 444 pụtara nzaghachi efu ma a na-ejikarị ya na Nginx iji ghọgbuo mwakpo malware:

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

    Iji nwalee, jiri curl zipu arịrịọ HIchapụ wee tulee nsonaazụ ya na mgbe izipu GET oge niile:

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

    NDỤMỌDỤ #6: Tọọ mmachi nha nha na Nginx

    Iji gbochie mbuso agha oke ibu megide sava weebụ Nginx gị, tọọ ntuziaka ndị a na faịlụ dị iche (mepụta faịlụ ọhụrụ akpọrọ /etc/nginx/conf.d/buffer.conf, dịka ọmụmaatụ):

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

    Ntuziaka dị n'elu ga-ahụ na arịrịọ ndị a na-arịọ na sava weebụ gị agaghị eme ka ihe nchekwa na-ejupụta na sistemụ gị. Ọzọkwa, rụtụ aka na docs maka nkọwa ndị ọzọ gbasara ihe onye ọ bụla n'ime ha na-eme.

    Tinyezie ntuziaka na faịlụ nhazi:

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

    NDỤMỌDỤ #7: kpachie ọnụ ọgụgụ nke njikọ IP na Nginx

    Iji belata njikọ site na IP, jiri limit_conn_zone (na ọnọdụ http ma ọ bụ opekata mpe na mpụga ngọngọ nkesa) yana limit_conn (na http, ngọngọ sava, ma ọ bụ ọnọdụ ọnọdụ).

    Otú ọ dị, buru n'uche na ọ bụghị njikọ niile ka a na-agụ - kama ọ bụ naanị ndị nwere arịrịọ nke ihe nkesa na-edozi na ihe niile ka a na-agụ.

    Dịka ọmụmaatụ, ka anyị tọọ ọnụ ọgụgụ kachasị nke njikọ na 1 (ee, ọ bụ ikwubiga okwu ókè, mana ọ ga-arụ ọrụ ahụ nke ọma na nke a) na mpaghara aha ya bụ addr (ị nwere ike ịtọ nke a na ihe ọ bụla). aha ị chọrọ):

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

    Nnwale dị mfe na Apache Benchmark (Mee Nginx Load) ebe ejikọtara 10 mkpokọta njikọ na 2 arịrịọ n'otu oge ga-enyere anyị aka igosipụta isi ihe anyị:

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

    Hụ ndụmọdụ na-esote maka nkọwa ndị ọzọ.

    NDỤMỌDỤ #8: Nhazi ndekọ ndekọ maka Nginx

    Ozugbo ịmechara ule ahụ akọwara n'ọnụ ụzọ gara aga, lelee ndekọ njehie nke akọwapụtara maka ngọngọ nkesa:

    Ị nwere ike iji grep nyochaa ndekọ maka arịrịọ ndị dara na mpaghara addr akọwapụtara na NDỤMỌDỤ #7:

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

    N'otu aka ahụ, ị nwere ike nzacha ndekọ ohere maka ozi mmasị, dị ka:

    1. IP onye ahịa
    2. Ụdị ihe nchọgharị
    3. ụdị arịrịọ HTTP
    4. Achọrọ ihe enyemaka
    5. Mgbochi sava na-aza arịrịọ ahụ (ọ bara uru ma ọ bụrụ na ọtụtụ ndị ọbịa na-abanye n'otu faịlụ ahụ).

    Meekwa ihe kwesịrị ekwesị ma ọ bụrụ na ị chọpụta ihe omume ọ bụla na-adịghị ahụkebe ma ọ bụ nke ị na-achọghị.

    NDỤMỌDỤ #9: Gbochie ikpo ọkụ onyonyo na Nginx

    Mkparịta ụka onyonyo na-eme mgbe mmadụ gosipụtara na saịtị ọzọ onyonyo akwadoro na nke gị. Nke a na-ebute mmụba nke iji bandwit gị (nke ị na-akwụ ụgwọ) ebe onye nke ọzọ na-eji obi ụtọ na-egosipụta ihe oyiyi dị ka à ga-asị na ọ bụ ihe onwunwe ya. N'ikwu ya n'ụzọ ọzọ, ọ bụ mfu abụọ maka gị.

    Dịka ọmụmaatụ, ka anyị kwuo na ị nwere subdirectory aha ya bụ img n'ime ngọngọ nkesa gị ebe ị na-echekwa onyonyo niile ejiri na onye nnabata ahụ. Iji gbochie saịtị ndị ọzọ iji onyonyo gị, ị ga-achọ itinye ngọngọ ebe a n'ime nkọwa ndị ọbịa nke mebere gị:

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

    Wee gbanwee faịlụ index.html n'ime onye ọbịa nke ọ bụla dị ka ndị a:

    Ugbu a chọgharịa na saịtị ọ bụla ma dịka ị na-ahụ, egosipụtara onyonyo a nke ọma na 192.168.0.25 mana nzaghachi 403 dochie ya na 192.168.0.26:

    Rịba ama na ndụmọdụ a dabere na ihe nchọgharị dịpụrụ adịpụ na-eziga ubi Referer.

    NDỤMỌDỤ #10: Gbanyụọ SSL na naanị Kwado TLS na Nginx

    Mgbe ọ bụla enwere ike, mee ihe ọ bụla ọ ga-ewe iji zere SSL na ụdị ya ọ bụla wee jiri TLS kama. A ga-etinye ssl_protocols ndị a na sava ma ọ bụ ọnọdụ http na faịlụ nnabata gị ma ọ bụ faịlụ dị iche site na ntuziaka gụnyere (ụfọdụ ndị na-eji faịlụ akpọrọ ssl.conf , ma ọ dị gị n'aka):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    Ọmụmaatụ:

    NDỤMỌDỤ #11: Mepụta Asambodo na Nginx

    Nke mbụ, mepụta igodo na asambodo. Nwere onwe gị iji ụdị nzuzo dị iche ma ọ bụrụ na ịchọrọ:

    # 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
    

    Wee tinye ahịrị ndị a n'ime ngọngọ ihe nkesa dị iche maka nkwadebe maka ntụnye ọzọ (http --> https redirection) wee bugharịa ntuziaka metụtara SSL gaa na ngọngọ ọhụrụ ahụ:

    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'ọnụ na-esote anyị ga-enyocha ka saịtị anyị si eji asambodo ejiri aka ya na TLS ugbu a.

    NDỤMỌDỤ #12: Nyegharịa okporo ụzọ HTTP gaa na HTTPS na Nginx

    Tinye ahịrị ndị a na ngọngọ nkesa nke mbụ:

    return 301 https://$server_name$request_uri;
    

    Ntuziaka dị n'elu ga-eweghachi nzaghachi 301 (Moved na-adịgide adịgide), nke a na-eji maka ntụgharị URL na-adịgide adịgide mgbe ọ bụla a rịọrọ arịrịọ ka ọ banye n'ọdụ ụgbọ mmiri 80 nke onye ọbịa gị, ma ga-emegharị arịrịọ ahụ na ngọngọ ihe nkesa anyị gbakwunyere na njedebe gara aga.

    Onyonyo dị n'okpuru na-egosi redirection wee gosi eziokwu na anyị na-eji TLS 1.2 na AES-256 maka izo ya ezo:

    Nchịkọta

    N'ime edemede a, anyị ekekọrịtala ndụmọdụ ole na ole iji chekwaa sava weebụ Nginx gị. Ọ ga-amasị anyị ịnụ ihe ị chere na, ọ bụrụ na ị nwere ndụmọdụ ndị ọzọ ịchọrọ ịkọrọ ndị obodo ndị ọzọ, nweere onwe gị ime ka anyị mara site na iziga anyị ndetu site na iji ụdị nkọwa n'okpuru.