Ang Kinatibuk-ang Giya sa Secure, Harden ug Pagpauswag sa Performance sa Nginx Web Server


Pinasukad sa nindot nga mga butang nga imong nadungog bahin sa Nginx, tingali nakahukom ka nga sulayan kini. Mahimong ganahan ka kaayo nga naghunahuna nga ilisan ang imong mga instalasyon sa Apache sa Nginx pagkahuman sa pipila ka mga artikulo sa hilisgutan nga among gipatik sa kini nga site.

Kung mao, sigurado ko nga dawaton nimo kini nga giya nga adunay bukas nga mga bukton tungod kay tabonan namon ang mga tip sa 12 aron madugangan ang seguridad sa imong mga server sa Nginx (gikan sa pagpadayon sa pag-update sa Nginx hangtod sa paggamit sa TLS ug pag-redirect sa HTTP sa HTTPS), ug imong mamatikdan nga ang pipila niini susama kaayo sa imong buhaton sa Apache.

Ayaw kalimti:

Atong gamiton ang mosunod nga palibot niini nga giya:

  1. Debian GNU/Linux 8.1 (jessie).
  2. IP address: 192.168.0.25 (tecmintlovesnginx.com) ug 192.168.0.26 (nginxmeanspower.com), sama sa gihulagway sa IP-based virtual hosts section sa
    1. Unsaon Pag-setup sa Name-based ug IP-based Virtual Hosts (Server Blocks) uban sa Nginx

    Uban niana sa hunahuna, magsugod kita.

    TIP #1: Ipadayon ang Nginx hangtod karon

    Sa panahon niini nga pagsulat, ang pinakabag-o nga mga bersyon sa Nginx sa CentOS (sa EPEL) ug Debian nga mga repository mao ang 1.6.3 ug 1.6.2-5, matag usa.

    Bisan kung ang pag-install sa software gikan sa mga repositoryo labi ka dali kaysa pag-compile sa programa gikan sa source code, kini nga katapusan nga kapilian adunay duha nga mga bentaha: 1) gitugotan ka nga maghimo dugang nga mga module sa Nginx (sama sa mod_security), ug 2) kanunay kini maghatag usa ka bag-ong bersyon. kay sa mga repositoryo (1.9.9 karon). Ang mga nota sa pagpagawas kanunay anaa sa Nginx web site.

    Ayaw kalimti:

    TIP #2: Kuhaa ang Dili Kinahanglan nga mga Module sa Nginx

    Aron klaro nga makuha ang mga module gikan sa Nginx samtang nag-install gikan sa gigikanan, buhata:

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

    Pananglitan:

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

    Sama sa imong mahunahunaan, ang pagtangtang sa mga module gikan sa miaging pag-install sa Nginx gikan sa gigikanan nanginahanglan nga himuon pag-usab ang pag-compile.

    Usa ka pulong sa pasidaan: Ang mga direktiba sa pag-configure gihatag sa mga module. Siguruha nga dili nimo pag-disable ang usa ka module nga adunay usa ka direktiba nga kinahanglan nimo sa dalan! Kinahanglan nimong susihon ang nginx docs alang sa lista sa mga direktiba nga magamit sa matag module sa dili pa magdesisyon sa pag-disable sa mga module.

    TIP #3: I-disable ang server_tokens Directive sa Nginx

    Ang server_tokens nga direktiba nagsulti sa Nginx nga ipakita ang karon nga bersyon sa mga panid sa sayup. Dili kini gusto tungod kay dili nimo gusto nga ipaambit kana nga kasayuran sa kalibutan aron mapugngan ang mga pag-atake sa imong web server tungod sa nahibal-an nga mga kahuyangan sa kana nga piho nga bersyon.

    Aron ma-disable ang server_tokens nga direktiba, itakda kung i-off sa sulod sa server block:

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

    I-restart ang nginx ug susiha ang mga pagbag-o:

    TIP #4: Isalikway ang Mga Ahente sa Gumagamit sa HTTP sa Nginx

    Ang usa ka ahente sa gumagamit sa HTTP usa ka software nga gigamit alang sa negosasyon sa sulud batok sa usa ka web server. Naglakip usab kini sa mga malware bot ug crawler nga mahimong makaapekto sa pasundayag sa imong web server pinaagi sa pag-usik sa mga kapanguhaan sa sistema.

    Aron mas dali nga mamentinar ang lista sa dili gusto nga mga ahente sa tiggamit, paghimo og file (/etc/nginx/blockuseragents.rules pananglitan) nga adunay mosunod nga mga sulod:

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

    Sunod, ibutang ang mosunod nga linya sa wala pa ang kahulugan sa block sa server:

    include /etc/nginx/blockuseragents.rules;
    

    Ug usa ka kung pahayag aron ibalik ang usa ka 403 nga tubag kung ang string sa ahente sa gumagamit naa sa itom nga lista nga gihubit sa ibabaw:

    I-restart ang nginx, ug ang tanan nga mga ahente sa tiggamit kansang mga string nga katumbas sa naa sa taas mababagan sa pag-access sa imong web server. Ilisan ang 192.168.0.25 sa IP sa imong server ug ayaw pagpili ug laing string para sa --user-agent switch sa 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: I-disable ang Dili Gusto nga Mga Pamaagi sa HTTP sa Nginx

    Nailhan usab nga mga berbo, ang mga pamaagi sa HTTP nagpaila sa gusto nga aksyon nga himuon sa usa ka kapanguhaan nga giserbisyuhan sa Nginx. Para sa kasagarang mga web site ug aplikasyon, kinahanglan lang nimo nga tugutan ang GET, POST, ug HEAD ug i-disable ang tanan.

    Aron mahimo kini, ibutang ang mosunod nga mga linya sulod sa usa ka block sa server. Ang tubag sa 444 HTTP nagpasabut nga walay sulod nga tubag ug sagad gigamit sa Nginx aron malimbongan ang mga pag-atake sa malware:

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

    Sa pagsulay, gamita ang curl aron magpadala usa ka DELETE nga hangyo ug itandi ang output kung magpadala ka usa ka regular nga GET:

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

    TIP #6: Itakda ang mga Limitasyon sa Laki sa Buffer sa Nginx

    Aron mapugngan ang mga pag-atake sa buffer overflow batok sa imong Nginx web server, ibutang ang mosunod nga mga direktiba sa bulag nga file (paghimo ug bag-ong file nga ginganlag /etc/nginx/conf.d/buffer.conf, pananglitan):

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

    Ang mga direktiba sa ibabaw magsiguro nga ang mga hangyo nga gihimo sa imong web server dili hinungdan sa usa ka buffer overflow sa imong sistema. Sa makausa pa, tan-awa ang mga doc alang sa dugang nga mga detalye kung unsa ang gibuhat sa matag usa kanila.

    Dayon idugang ang usa ka naglakip nga direktiba sa configuration file:

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

    TIP #7: Limitahi ang Gidaghanon sa Koneksyon sa IP sa Nginx

    Aron malimitahan ang mga koneksyon pinaagi sa IP, gamita ang limit_conn_zone (sa konteksto sa http o sa gawas sa server block) ug limit_conn (sa usa ka http, server block, o konteksto sa lokasyon) nga mga direktiba.

    Bisan pa, hinumdomi nga dili tanan nga koneksyon ang giihap - apan ang adunay usa ka hangyo nga giproseso sa server ug ang tibuuk nga header sa hangyo ang nabasa.

    Pananglitan, atong ibutang ang maximum nga gidaghanon sa mga koneksyon ngadto sa 1 (oo, kini usa ka pagpasobra, apan kini makahimo sa trabaho nga maayo niini nga kaso) sa usa ka zone nga ginganlan og addr (mahimo nimo kini ibutang sa bisan unsa ngalan nga gusto nimo):

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

    Usa ka yano nga pagsulay sa Apache Benchmark (Pagbuhat sa Nginx Load) diin ang 10 kinatibuk-ang koneksyon gihimo uban ang 2 dungan nga mga hangyo makatabang kanamo sa pagpakita sa among punto:

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

    Tan-awa ang sunod nga tip para sa dugang nga mga detalye.

    TIP #8: Setup Monitor Logs para sa Nginx

    Kung nahuman na nimo ang pagsulay nga gihulagway sa miaging tip, susiha ang log sa sayup nga gihubit alang sa block sa server:

    Mahimo nimong gamiton ang grep aron ma-filter ang mga log alang sa napakyas nga mga hangyo nga gihimo sa addr zone nga gihubit sa TIP #7:

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

    Ingon usab, mahimo nimong isala ang log sa pag-access alang sa kasayuran nga interesado, sama sa:

    1. Kliyente IP
    2. Browser type
    3. Matang sa hangyo sa HTTP
    4. Gipangayo nga kapanguhaan
    5. Server block nga nagtubag sa hangyo (mapuslanon kung daghang mga virtual host ang nag-log sa parehas nga file).

    Ug buhata ang angay nga aksyon kung makamatikod ka bisan unsang dili kasagaran o dili gusto nga kalihokan.

    TIP #9: Paglikay sa Pag-hotlink sa Imahe sa Nginx

    Ang pag-hotlink sa imahe mahitabo kung ang usa ka tawo magpakita sa laing site sa usa ka imahe nga gi-host sa imoha. Kini maoy hinungdan sa pag-usbaw sa imong paggamit sa bandwidth (nga imong gibayran) samtang ang laing tawo malipayong nagpakita sa hulagway nga daw iya kini nga kabtangan. Sa laing pagkasulti, kini usa ka doble nga kapildihan alang kanimo.

    Pananglitan, ingnon ta nga ikaw adunay subdirectory nga ginganlag img sulod sa imong server block diin imong gitipigan ang tanan nga mga imahe nga gigamit sa kana nga virtual host. Aron mapugngan ang ubang mga site sa paggamit sa imong mga hulagway, kinahanglan nimong isulod ang mosunod nga block sa lokasyon sulod sa imong virtual host definition:

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

    Unya usba ang index.html file sa matag virtual host sama sa mosunod:

    Karon tan-awa ang matag site ug ingon sa imong makita, ang imahe husto nga gipakita sa 192.168.0.25 apan gipulihan sa 403 nga tubag sa 192.168.0.26:

    Timan-i nga kini nga tip nagdepende sa layo nga browser nga nagpadala sa Referer field.

    TIP #10: I-disable ang SSL ug I-enable lang ang TLS sa Nginx

    Kung mahimo, buhata ang tanan aron malikayan ang SSL sa bisan unsang mga bersyon niini ug gamita ang TLS. Ang mosunod nga ssl_protocols kinahanglang ibutang sa usa ka server o http nga konteksto sa imong virtual host file o usa ka bulag nga file pinaagi sa usa ka include directive (ang ubang mga tawo naggamit og file nga ginganlan og ssl.conf , pero naa ra sa imoha):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    Pananglitan:

    TIP #11: Paghimo mga Sertipiko sa Nginx

    Una, paghimo usa ka yawe ug usa ka sertipiko. Mobati nga gawasnon sa paggamit sa lain nga matang sa encryption kon gusto nimo:

    # 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
    

    Dayon idugang ang mosunod nga mga linya sulod sa bulag nga server block agig pagpangandam sa sunod nga tip (http -> https redirection) ug ibalhin usab ang SSL-related nga mga direktiba ngadto sa bag-ong block:

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

    Sa sunod nga tip among susihon kung giunsa karon ang among site nga gigamit ang usa ka gipirmahan nga kaugalingon nga cert ug TLS.

    TIP #12: I-redirect ang trapiko sa HTTP sa HTTPS sa Nginx

    Idugang ang mosunod nga linya sa unang block sa server:

    return 301 https://$server_name$request_uri;
    

    Ang direktiba sa ibabaw magbalik sa usa ka tubag nga 301 (Gibalhin nga permanente), nga gigamit alang sa permanente nga pag-redirect sa URL kung adunay usa ka hangyo nga gihimo sa port 80 sa imong virtual host, ug i-redirect ang hangyo sa block sa server nga among gidugang sa miaging tip.

    Ang hulagway sa ubos nagpakita sa redirection ug nagpamatuod sa kamatuoran nga kami naggamit sa TLS 1.2 ug AES-256 alang sa pag-encrypt:

    Summary

    Niini nga artikulo gipaambit namo ang pipila ka mga tip aron ma-secure ang imong Nginx web server. Gusto namon nga madungog kung unsa ang imong gihunahuna ug, kung adunay ka uban pang mga tip nga gusto nimong ipaambit sa uban nga komunidad, ayaw pagduhaduha nga ipahibalo kanamo pinaagi sa pagpadala kanamo usa ka nota gamit ang porma sa komento sa ubos.