Itọsọna Gbẹhin lati Ni aabo, Ikunkun ati Ṣiṣe Iṣe ti Server Nginx Web Server


Da lori awọn ohun iyanu ti o ti gbọ nipa Nginx, boya o pinnu lati fun ni igbiyanju kan. O le ti fẹran rẹ pupọ ti o nroro rirọpo awọn fifi sori Apache rẹ pẹlu Nginx lẹhin lilọ diẹ ninu awọn nkan lori koko ti a ti tẹjade lori aaye yii.

Ti o ba ri bẹ, Mo ni idaniloju pe iwọ yoo gba itọsọna yii pẹlu awọn ọwọ ṣiṣi nitori a yoo bo awọn imọran 12 lati mu aabo awọn olupin Nginx rẹ pọ (lati ori Nginx titi di oni ni gbogbo ọna si lilo TLS ati titọ HTTP si HTTPS), ati pe iwọ yoo ṣe akiyesi pe diẹ ninu wọn jọra pupọ si ohun ti iwọ yoo ṣe pẹlu Apache.

Maṣe padanu:

A yoo lo agbegbe atẹle ni itọsọna yii:

  1. Debian GNU/Linux 8.1 (jessie).
  2. Adirẹsi IP: 192.168.0.25 (tecmintlovesnginx.com) ati 192.168.0.26 (nginxmeanspower.com), bi a ti ṣalaye ninu apakan awọn ọmọ ogun foju-orisun IP ni
    1. “Bii a ṣe le ṣeto Orin ti o da lori ati IP Awọn orisun Foju (Awọn bulọọki olupin) pẹlu Nginx“

    Pẹlu iyẹn lokan, jẹ ki a bẹrẹ.

    Sample # 1: Jeki Nginx di oni

    Ni akoko kikọ yi, awọn ẹya Nginx tuntun ni CentOS (ni EPEL) ati awọn ibi ipamọ Debian jẹ 1.6.3 ati 1.6.2-5, lẹsẹsẹ.

    Botilẹjẹpe fifi sori ẹrọ sọfitiwia lati awọn ibi-ipamọ jẹ rọrun ju ikopọ eto naa lati koodu orisun, aṣayan ikẹhin yii ni awọn anfani meji: 1) o fun ọ laaye lati kọ awọn modulu afikun si Nginx (bii mod_security), ati 2) yoo ma pese ẹya tuntun ju awọn ibi ipamọ (1.9.9 bi ti oni lọ). Awọn akọsilẹ ifasilẹ wa nigbagbogbo ni oju opo wẹẹbu Nginx.

    Maṣe padanu:

    Sample # 2: Yọ Awọn modulu ti ko ṣe pataki ni Nginx

    Lati yọ awọn modulu kuro ni gbangba lati Nginx lakoko fifi sori ẹrọ lati orisun, ṣe:

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

    Fun apere:

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

    Bi o ṣe le jasi gboju, yiyọ awọn modulu lati fifi sori ẹrọ Nginx ti tẹlẹ lati orisun nilo ṣiṣe akopọ lẹẹkansii.

    Ọrọ ti iṣọra: Awọn itọsọna iṣeto ni a pese nipasẹ awọn modulu. Rii daju pe o ko mu module kan ti o ni itọsọna kan ninu iwọ yoo nilo ni opopona! O yẹ ki o ṣayẹwo awọn iwe nginx fun atokọ awọn itọsọna ti o wa ni module kọọkan ṣaaju ṣiṣe ipinnu lori awọn modulu idibajẹ.

    Sample # 3: Mu Disfin olupin_tokens ṣiṣẹ ni Nginx

    Itọsọna server_tokens sọ fun Nginx lati han ẹya rẹ lọwọlọwọ lori awọn oju-iwe aṣiṣe. Eyi kii ṣe ifẹkufẹ nitori o ko fẹ lati pin alaye yẹn pẹlu agbaye lati le ṣe idiwọ awọn ikọlu ni olupin wẹẹbu rẹ ti o fa nipasẹ awọn ailagbara ti a mọ ninu ẹya kan pato.

    Lati mu itọsọna server_tokens ṣiṣẹ, ṣeto ti o ba wa ni pipa ni inu apo olupin kan:

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

    Tun nginx bẹrẹ ki o jẹrisi awọn ayipada:

    AKỌRỌ # 4: Sọ Awọn aṣoju olumulo HTTP ni Nginx

    Aṣoju olumulo HTTP jẹ sọfitiwia ti o lo fun iṣunadura akoonu lodi si olupin ayelujara kan. Eyi tun pẹlu awọn botilẹtẹ malware ati awọn crawlers ti o le pari ni ipa lori iṣẹ olupin ayelujara rẹ nipa jijẹ awọn orisun eto.

    Lati le ni rọọrun ṣetọju atokọ ti awọn oluranlowo olumulo ti ko fẹ, ṣẹda faili kan ( /etc/nginx/blockuseragents.rules fun apẹẹrẹ) pẹlu awọn akoonu wọnyi:

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

    Nigbamii, gbe laini atẹle ṣaaju asọye idiwọ olupin:

    include /etc/nginx/blockuseragents.rules;
    

    Ati pe ti o ba jẹ alaye lati da esi 403 pada ti okun okun oluṣe olumulo ba wa ninu atokọ dudu ti a ṣalaye loke:

    Tun bẹrẹ nginx, ati gbogbo awọn aṣoju olumulo ti okun wọn baamu eyi ti o wa loke yoo ni idiwọ lati wọle si olupin ayelujara rẹ. Rọpo 192.168.0.25 pẹlu IP olupin rẹ ati ni ominira lati yan okun ti o yatọ fun --user-agent yipada ti wget:

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

    Sample # 5: Mu Awọn ọna HTTP Ti aifẹ Mu ni Nginx

    Tun mọ bi awọn ọrọ-ọrọ, awọn ọna HTTP tọka igbese ti o fẹ lati mu lori orisun ti Nginx ṣiṣẹ. Fun awọn oju opo wẹẹbu ti o wọpọ ati awọn ohun elo, o yẹ ki o gba GET, POST, ati HEAD nikan ki o mu gbogbo awọn miiran ṣiṣẹ.

    Lati ṣe bẹ, gbe awọn ila wọnyi sinu inu bulọọki olupin kan. Idahun HTTP 444 kan tumọ si idahun ofo ati nigbagbogbo lo ni Nginx lati ṣe aṣiwere awọn ikọlu malware:

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

    Lati ṣe idanwo, lo curl lati firanṣẹ ibeere piparẹ ki o ṣe afiwe iṣuwe si nigbati o ba fi GET deede:

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

    AKỌRỌ # 6: Ṣeto Awọn idiwọn Iwọn Buffer ni Nginx

    Lati ṣe idiwọ awọn ikọlu ṣiṣipamọ ti o kọju si olupin ayelujara Nginx rẹ, ṣeto awọn itọsọna wọnyi ni faili ọtọtọ (ṣẹda faili tuntun ti a npè ni /etc/nginx/conf.d/buffer.conf , fun apẹẹrẹ):

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

    Awọn itọsọna ti o wa loke yoo rii daju pe awọn ibeere ti o ṣe si olupin wẹẹbu rẹ kii yoo fa ki iṣuṣọn saarin kan ninu eto rẹ. Lẹẹkan si, tọka si awọn iwe fun awọn alaye siwaju sii lori ohun ti ọkọọkan wọn ṣe.

    Lẹhinna ṣafikun itọsọna pẹlu ninu faili iṣeto:

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

    Sample # 7: Ṣe idinwo Nọmba Awọn isopọ nipasẹ IP ni Nginx

    Lati le ṣe idinwo awọn isopọ nipasẹ IP, lo awọn limit_conn_zone (ni ipo ti o tọ http tabi o kere ju ni ita idena olupin) ati limit_conn (ninu http, bulọọki olupin, tabi ipo ipo) awọn itọsọna.

    Sibẹsibẹ, ranti pe kii ṣe gbogbo awọn asopọ ni a ka - ṣugbọn awọn ti o ni ibeere ti o ṣiṣẹ nipasẹ olupin ati gbogbo akọle ibeere ni a ti ka.

    Fun apẹẹrẹ, jẹ ki a ṣeto nọmba ti o pọ julọ ti awọn isopọ si 1 (bẹẹni, o jẹ apọju, ṣugbọn yoo ṣe iṣẹ ni o kan ninu ọran yii) ni agbegbe ti a npè ni addr (o le ṣeto eyi si ohunkohun ti Orukọ ti o fẹ):

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

    Idanwo ti o rọrun pẹlu Apoti Benchmark (Ṣiṣe Login Nginx) nibiti 10 apapọ awọn isopọ ṣe pẹlu 2 awọn ibeere igbakanna yoo ran wa lọwọ lati ṣe afihan aaye wa:

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

    Wo aba ti nbọ fun awọn alaye siwaju sii.

    Sample # 8: Awọn Atẹle Atẹle Eto fun Nginx

    Lọgan ti o ba ti ṣe idanwo ti a ṣalaye ninu aba iṣaaju, ṣayẹwo akọọlẹ aṣiṣe ti o ṣalaye fun bulọọki olupin naa:

    O le fẹ lati lo ọra lati ṣe àlẹmọ awọn àkọọlẹ fun awọn ibeere ti o kuna ti a ṣe si agbegbe addr ti o ṣalaye ni TIP # 7:

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

    Bakanna, o le ṣe àlẹmọ iwe wiwọle fun alaye ti iwulo, gẹgẹbi:

    1. Onibara IP
    2. Iru aṣawakiri
    3. Iru ibeere HTTP
    4. Ohun elo ti a beere
    5. Àkọsílẹ olupin ti n dahun ibeere naa (wulo ti ọpọlọpọ awọn ogun foju foju wọle si faili kanna).

    Ati ṣe igbese ti o ba yẹ ti o ba rii eyikeyi iṣẹ dani tabi iṣẹ ti ko fẹ.

    Sample # 9: Dena Hotlinking Aworan ni Nginx

    Asopo hotlinking aworan ṣẹlẹ nigbati eniyan ba han ni aaye miiran aworan ti o gbalejo lori tirẹ. Eyi fa ilosoke ninu lilo bandwidth rẹ (eyiti o san fun) lakoko ti eniyan miiran fi ayọ ṣe afihan aworan naa bi ẹni pe o jẹ ohun-ini rẹ. Ni awọn ọrọ miiran, o jẹ pipadanu ilọpo meji fun ọ.

    Fun apeere, jẹ ki a sọ pe o ni itọnisọna kekere ti a npè ni img inu apopọ olupin rẹ nibiti o tọju gbogbo awọn aworan ti o lo ni ile-iṣẹ foju yẹn. Lati yago fun awọn aaye miiran lati lilo awọn aworan rẹ, iwọ yoo nilo lati fi sii ibi-atẹle ipo wọnyi ninu asọye alejo gbigba foju rẹ:

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

    Lẹhinna yipada index.html faili ni olugbala foju kọọkan bi atẹle:

    Bayi lọ kiri si aaye kọọkan ati bi o ti le rii, aworan naa han ni deede ni 192.168.0.25 ṣugbọn o rọpo nipasẹ idahun 403 ni 192.168.0.26:

    Akiyesi pe aba yii da lori ẹrọ aṣawakiri latọna jijin ti o n firanṣẹ Aaye Itọkasi.

    AKỌRỌ # 10: Mu SSL ṣiṣẹ ki o nikan Mu TLS ṣiṣẹ ni Nginx

    Nigbakugba ti o ba ṣee ṣe, ṣe ohunkohun ti o gba lati yago fun SSL ni eyikeyi awọn ẹya rẹ ati lo TLS dipo. Atẹle ssl_protocols yẹ ki a gbe sinu olupin kan tabi ipo-ọrọ http ninu faili alejo gbigba rẹ tabi jẹ faili ọtọtọ nipasẹ itọsọna pẹlu (diẹ ninu awọn eniyan lo faili ti a npè ni ssl.conf , ṣugbọn o jẹ patapata si ọ):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    Fun apere:

    Sample # 11: Ṣẹda Awọn iwe-ẹri ni Nginx

    Ni akọkọ, ṣe ina bọtini kan ati ijẹrisi kan. Ni ominira lati lo iru oriṣiriṣi fifi ẹnọ kọ nkan ti o ba fẹ:

    # 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
    

    Lẹhinna ṣafikun awọn ila wọnyi inu apo-iṣẹ olupin ọtọtọ ni igbaradi fun ipari ti nbọ ( http -> https redirection) ki o gbe awọn itọsọna ti o ni ibatan SSL lọ si bulọọki tuntun naa:

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

    Ninu aba ti n bọ a yoo jẹrisi bawo ni aaye wa ti nlo cert ti a fi ọwọ si ati TLS bayi.

    AKỌRỌ # 12: Ṣe atunṣe ijabọ HTTP si HTTPS ni Nginx

    Ṣafikun laini atẹle si bulọọki olupin akọkọ:

    return 301 https://$server_name$request_uri;
    

    Ilana ti o wa loke yoo da esi 301 (Ti a gbe lọ titi lailai) pada, eyiti a lo fun lilọ kiri URL ti o wa titi nigbakugba ti a ba beere fun si ibudo 80 ti oluṣakoso foju rẹ, ati pe yoo ṣe atunṣe ibeere si bulọọki olupin ti a fi kun ni aba iṣaaju.

    Aworan ti o wa ni isalẹ n ṣe afihan itọsọna ati jẹrisi otitọ pe a nlo TLS 1.2 ati AES-256 fun fifi ẹnọ kọ nkan:

    Akopọ

    Ninu nkan yii a ti pin awọn imọran diẹ lati ni aabo olupin ayelujara Nginx rẹ. A nifẹ lati gbọ ohun ti o ro ati pe, ti o ba ni awọn imọran miiran ti iwọ yoo fẹ lati pin pẹlu iyoku agbegbe, ni ọfẹ lati jẹ ki a mọ nipa fifiranṣẹ akọsilẹ kan si wa nipa lilo fọọmu asọye ni isalẹ.