Nginx web serweriniň howpsuzlygyny üpjün etmek, berkitmek we öndürijiligini gowulandyrmak üçin iň soňky gollanma
Nginx hakda eşiden ajaýyp zatlaryňyza esaslanyp, belki synap görmek kararyna geldiňiz. Bu sahypada çap eden mowzugymyzdaky käbir makalalary öwreneniňizden soň, Apache gurnamalaryňyzy Nginx bilen çalyşmagy göz öňünde tutýan gaty gowy gören bolmagyňyz mümkin.
Şeýle bolsa, bu gollanmany aç-açan garşy aljakdygyňyza ynanýaryn, sebäbi Nginx serwerleriňiziň howpsuzlygyny ýokarlandyrmak üçin 12 maslahaty (Nginx-i tä tä tä TLS-den peýdalanmakdan başlap, HTTP-e gönükdirmekden başlap 12 maslahat) açarys. HTTPS), we olaryň käbiri Apache bilen etjek işleriňize gaty meňzeýändigini bellärsiňiz.
Missitirmäň:
Bu gollanmada aşakdaky gurşawy ulanarys:
- Debian GNU/Linux 8.1 (jessi).
- IP salgysy: IP esasly wirtual hostlar bölüminde görkezilişi ýaly 192.168.0.25 (tecmintlovesnginx.com) we 192.168.0.26 (nginxmeanspower.com)
- “Ady esasly we IP esasly wirtual hostlary (serwer bloklary) Nginx bilen nädip sazlamaly“
Şuny göz öňünde tutup, başlalyň.
Maslahat # 1: Nginx-i täzeläň
Bu ýazylanda CentOS-da (EPEL-de) we Debian ammarlarynda iň soňky Nginx wersiýalary degişlilikde 1,6.3 we 1.6.2-5.
Ammarlardan programma üpjünçiligini gurnamak programmany deslapky koddan düzmekden has aňsat bolsa-da, bu soňky wariantyň iki artykmaçlygy bar: 1) Nginx-de goşmaça modullary gurmaga mümkinçilik berýär (mod_security ýaly) we 2) elmydama täze wersiýa üpjün eder ammarlaryndan has köp (şu günki güne görä 1,9.9). Çykyş bellikleri Nginx web sahypasynda elmydama elýeterlidir.
Missitirmäň:
Maslahat 22: Nginx-de gereksiz modullary aýyryň
Çeşmeden gurnanyňyzda Nginx-den modullary aç-açan aýyrmak üçin:
# ./configure --without-module1 --without-module2 --without-module3
Mysal üçin:
# ./configure --without-http_dav_module --withouthttp_spdy_module
Probablyhtimal, çak edişiňiz ýaly, öňki Nginx gurnamasyndan modullary çeşmeden aýyrmak, ýene bir gezek düzmegi talap edýär.
Üns beriň: Sazlama görkezmeleri modullar bilen üpjün edilýär. Roadolda zerur görkezmäni öz içine alýan moduly öçürmeýändigiňize göz ýetiriň! Modullary öçürmek barada karar kabul etmezden ozal her modulda bar bolan görkezmeleriň sanawy üçin nginx resminamalaryny barlamaly.
Maslahat # 3: Nginx-de server_tokens Direktiwasyny öçüriň
server_tokens
direktiwasy Nginx-a häzirki wersiýasyny säwlik sahypalarynda görkezmegi tabşyrýar. Bu islenmeýär, sebäbi belli bir wersiýadaky belli gowşaklyklar sebäpli web serweriňize hüjümleriň öňüni almak üçin bu maglumatlary dünýä bilen paýlaşmak islemeýärsiňiz.server_tokens
direktiwasyny öçürmek üçin serwer blokynyň içinde ýapyljakdygyny belläň: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; }
Nginx-i täzeden açyň we üýtgeşmeleri barlaň:
Maslahat # 4: Nginx-de HTTP ulanyjy agentlerini ret ediň
HTTP ulanyjy agenti, web serwerine garşy mazmun gepleşikleri üçin ulanylýan programma üpjünçiligi. Mundan başga-da, ulgam çeşmelerini ýitirip, web serweriňiziň işine täsir edip biljek zyýanly programma üpjünçiligi botlary we gözlegçiler hem bar.
Islenilmeýän ulanyjy agentleriniň sanawyny has aňsat saklamak üçin aşakdaky mazmunly bir faýl dörediň (
/etc/nginx/blockuseragents.rules
).map $http_user_agent $blockedagent { default 0; ~*malicious 1; ~*bot 1; ~*backdoor 1; ~*crawler 1; ~*bandit 1; }
Ondan soň, serwer blok kesgitlemesinden öň aşakdaky setiri ýerleşdiriň:
include /etc/nginx/blockuseragents.rules;
Ulanyjy agentiniň setiri ýokarda kesgitlenen gara sanawda bolsa, 403 jogap gaýtarmak üçin jümle:
Nginx-i täzeden açyň we setiri ýokardakylara gabat gelýän ähli ulanyjy agentleri web serweriňize girip bilmez. 192.168.0.25-i serweriňiziň IP-si bilen çalyşyň we wgetiň
--user-agent
wyklýuçateli üçin başga bir setir saýlap bilersiňiz:# wget http://192.168.0.25/index.html # wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html
Maslahat # 5: Nginx-de islenmeýän HTTP usullaryny öçüriň
Işlikler diýlip hem atlandyrylýan HTTP usullary, Nginx tarapyndan hödürlenýän çeşmede edilmeli çäreleri görkezýär. Umumy web sahypalary we amaly programmalar üçin diňe GET, POST we HEAD rugsat bermeli we beýlekileriň hemmesini öçürmeli.
Munuň üçin aşakdaky setirleri serwer blokynyň içinde goýuň. 444 HTTP jogaby boş jogaby aňladýar we köplenç zyýanly programma hüjümlerini aldamak üçin Nginx-de ulanylýar:
if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; }
Synag üçin, DELETE haýyşyny ibermek üçin egri ulanyň we çykyşy adaty GET ibereniňizde deňeşdiriň:
# curl -X DELETE http://192.168.0.25/index.html # curl -X POST http://192.168.0.25/index.html
Maslahat # 6: Nginx-de bufer ölçeg çäklendirmelerini düzüň
Nginx web serweriňize garşy bufer akymynyň öňüni almak üçin aşakdaky görkezmeleri aýratyn faýlda düzüň (mysal üçin
/etc/nginx/conf.d/buffer.conf
atly täze faýl dörediň):client_body_buffer_size 1k; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;
Aboveokardaky görkezmeler web serweriňize edilen haýyşlaryň ulgamyňyzda bufer akymyna sebäp bolmazlygyny üpjün eder. Olaryň hersiniň näme edýändigi barada has giňişleýin maglumat üçin resminamalara ýüz tutuň.
Soňra konfigurasiýa faýlyna goşmaça görkezme goşuň:
include /etc/nginx/conf.d/*.conf;
Maslahat # 7: Nginx-de IP arkaly birikmeleriň sanyny çäklendiriň
IP arkaly baglanyşyklary çäklendirmek üçin
limit_conn_zone
(http kontekstinde ýa-da iň bolmanda serwer blokynyň daşynda) we limit_conn (http, serwer blokunda ýa-da ýerleşiş kontekstinde) görkezmelerini ulanyň.Şeýle-de bolsa, ähli birikmeleriň sanalmaýandygyny ýadyňyzdan çykarmaň - diňe serwer tarapyndan işlenip düzülen haýyş we ähli haýyş sözbaşysy okaldy.
Mysal üçin, iň köp sanly birikmäni
1
belläliň (hawa, bu ulaltmak, ýöne bu ýagdaýda bu işi gowy ýerine ýetirer) addr atly zonada (muny islän zadyňyza düzüp bilersiňiz) isleýän adyňyz):limit_conn_zone $binary_remote_addr zone=addr:5m; limit_conn addr 1;
Apache Benchmark (Nginx Load-y ýerine ýetiriň) bilen ýönekeý synag, şol bir wagtyň özünde
2
bilen birleşdirilen10
umumy baglanyşyklar biziň pikirimizi görkezmäge kömek eder:# ab -n 10 -c 2 http://192.168.0.25/index.html
Has giňişleýin maglumat üçin indiki maslahata serediň.
Maslahat # 8: Nginx üçin gurnama monitor ýazgylary
Öňki maslahatda beýan edilen synagy ýerine ýetireniňizden soň, serwer bloky üçin kesgitlenen säwlik gündeligini barlaň:
Grep ulanyp, 7-nji Maslahatda kesgitlenen addr zonasyna edilen şowsuz haýyşlar üçin surnallary süzmek üçin ulanyp bilersiňiz:
# grep addr /var/www/logs/tecmintlovesnginx.error.log --color=auto
Şonuň ýaly-da, gyzyklanma maglumatlary üçin giriş gündeligini süzüp bilersiňiz:
- Müşderi IP
- Brauzer görnüşi
- HTTP haýyş görnüşi
- Resurs talap edildi
- Haýyşa jogap berýän serwer bloky (birnäçe wirtual host şol bir faýla girýän bolsa peýdaly).
Haýsydyr bir üýtgeşik ýa-da islenmeýän çäräni ýüze çykarsaňyz, degişli çäreleri görüň.
Maslahat # 9: Nginx-de suratlaryň baglanyşygynyň öňüni alyň
Surat gyzgyn baglanyşygy, bir adam başga bir sahypada özüňizde ýerleşdirilen suraty görkezende bolýar. Bu, geçirijilik giňligiňiziň ulanylmagyna sebäp bolýar (töleýärsiňiz), beýleki adam bolsa suraty edil öz emlägi ýaly görkezýär. Başgaça aýdylanda, bu siziň üçin goşa ýitgi.
Mysal üçin, serwer blokuňyzyň içinde şol wirtual hostda ulanylýan ähli suratlary saklaýan
img
atly bukjanyňyzyň bardygyny aýdalyň. Beýleki sahypalaryň suratlaryňyzy ulanmagynyň öňüni almak üçin, wirtual host kesgitlemäňize aşakdaky ýerleşiş blokyny girizmeli bolarsyňyz:location /img/ { valid_referers none blocked 192.168.0.25; if ($invalid_referer) { return 403; } }
Soňra her wirtual hostdaky
index.html
faýlyny aşakdaky ýaly üýtgediň:Indi her sahypa göz aýlaň we görşüňiz ýaly surat 192.168.0.25-de dogry görkezilýär, ýöne 192.168.0.26-da 403 jogap bilen çalşylýar:
Bu maslahatyň “Referer” meýdançasyny iberýän uzakdaky brauzere baglydygyny unutmaň.
Maslahat # 10: SSL-i öçüriň we diňe Nginx-de TLS-i işlediň
Mümkin boldugyça islendik wersiýasynda SSL-den gaça durmak üçin zerur zatlary ediň we ýerine TLS ulanyň. Aşakdaky
ssl_protocols
wirtual host faýlyňyzda serwerde ýa-da http kontekstinde ýerleşdirilmelidir ýa-da öz içine alýan görkezme arkaly aýratyn faýl bolmaly (käbir adamlarssl.conf
atly faýly ulanýarlar) , ýöne bu size doly bagly):ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Mysal üçin:
Maslahat # 11: Nginx-de şahadatnamalar dörediň
Ilki bilen açar we şahadatnama dörediň. Isleseňiz, başga bir şifrlemek görnüşini ulanyp bilersiňiz:
# 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
Soňra indiki maslahata (
http -> https
gönükdirme) taýýarlyk görmek üçin aýratyn serwer blokynyň içine aşakdaky setirleri goşuň we SSL bilen baglanyşykly görkezmeleri täze blokda hem geçiriň: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; }
Indiki maslahatda, sahypamyzyň indi öz-özüne gol çekilen şahadatnamany we TLS-ni nähili ulanýandygyny barlarys.
Maslahat # 12: HTTP traffigini Nginx-de HTTPS-e gönükdiriň
Ilkinji serwer blokyna aşakdaky setiri goşuň:
return 301 https://$server_name$request_uri;
Aboveokardaky görkezme, wirtual öý eýesiniň 80-nji portuna haýyş edilende hemişelik URL gönükdirmek üçin ulanylýan 301 (hemişelik göçürildi) jogabyny yzyna getirer we haýyşy öňki maslahatda goşan serwer blokyna ugrukdyrar.
Aşakdaky surat gönükdirmäni görkezýär we şifrlemek üçin TLS 1.2 we AES-256 ulanýandygymyzy tassyklaýar:
Gysgaça mazmun
Bu makalada Nginx web serweriňizi goramak üçin birnäçe maslahatlary paýlaşdyk. Pikirleriňizi eşitmek isleýäris we beýleki jemgyýetler bilen paýlaşmak isleýän beýleki maslahatlaryňyz bar bolsa, aşakdaky düşündiriş formuny ulanyp bellik iberip bize habar beriň.