nginx-ի անվտանգ կոնֆիգուրացիա․ HTTPS, անվտանգության վերնագրեր և մուտքի սահմանափակումներ

Գործնական ստուգաթերթ՝ պատրաստի հատվածներով nginx-ով կայքի կամ reverse proxy-ի համար։

nginx-ը արագ է և ճկուն, բայց լռելյայն կոնֆիգուրացիան նախատեսված է ամենուր աշխատելու, ոչ թե խիստ լինելու համար։ Այս կարգավորումները ավելացնում են կոդավորում, պաշտպանական վերնագրեր և մուտքի պարզ վերահսկում։ Համատեղեք դրանք կանոնավոր թարմացումների հետ՝ տե՛ս մեր հոդվածը 2026-ի nginx խոցելիությունների մասին։

Նախքան սկսելը: example.am-ը փոխարինեք ձեր դոմենով, իսկ 192.168.88.0/24-ը՝ գրասենյակային կամ VPN ցանցով։ Յուրաքանչյուր փոփոխություն ստուգեք nginx -t-ով վերաբեռնելուց առաջ և պահեք աշխատող կոնֆիգուրացիայի պատճենը։

Քայլ 1. Ամբողջ HTTP-ն վերահղեք HTTPS

Այցելուները և որոնողական համակարգերը միշտ պետք է հայտնվեն կայքի կոդավորված տարբերակում։

server {
    listen 80;
    server_name example.am www.example.am;
    return 301 https://$host$request_uri;
}

Քայլ 2. Ստացեք անվճար վկայագիր

Let's Encrypt վկայագրերը անվճար են և ավտոմատ երկարաձգվում են certbot-ով։

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.am -d www.example.am

Քայլ 3. Ժամանակակից TLS և անվտանգության վերնագրեր

Թույլատրեք միայն TLS 1.2 և 1.3, թաքցրեք nginx-ի տարբերակը և ավելացրեք վերնագրեր, որոնք պաշտպանում են բրաուզերները տարածված հարձակումներից։ Content-Security-Policy ավելացրեք, երբ իմանաք, թե կայքը ինչ արտաքին սկրիպտներ է օգտագործում։

# in the http { } block:
server_tokens off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
client_max_body_size 10m;
# in the server { } block for HTTPS:
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Քայլ 4. Փակեք թաքնված ֆայլերը և պաշտպանեք ադմինիստրատիվ բաժինները

Տեղադրման մնացորդները, ինչպիսիք են .git-ը կամ .env-ը, երբեք չպետք է ներբեռնվեն։ Ադմինիստրատիվ վահանակները պետք է հասանելի լինեն միայն վստահելի ցանցերից։

# block hidden files such as .git and .env (keep Let's Encrypt working)
location ~ /\.(?!well-known) {
    deny all;
}
# admin area only from the office / VPN
location /admin/ {
    allow 192.168.88.0/24;
    deny all;
}

Քայլ 5. Դանդաղեցրեք գաղտնաբառերի ընտրությունը

Սահմանափակեք, թե որքան հաճախ կարող է մեկ հասցեն դիմել մուտքի էջին։

# in the http { } block:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# in the location that handles the login page:
limit_req zone=login burst=5 nodelay;

Քայլ 6. Ստուգեք և կիրառեք

Ստուգեք կոնֆիգուրացիան, վերաբեռնեք առանց պարապուրդի և համոզվեք, որ վերնագրերը տեղում են։

sudo nginx -t && sudo systemctl reload nginx
curl -sI https://example.am | grep -iE 'strict|x-frame|x-content|server'

Լավ կոնֆիգուրացիան անտեսանելի է սովորական այցելուների համար և շատ անհարմար՝ բոլոր մյուսների համար։

Օգնության կարիք ունե՞ք։ Կապվեք CySec-ի հետ՝ անվճար խորհրդատվության համար։


Բոլոր հոդվածները

Օգնության կարի՞ք ունեք

Մեր ինժեներները կուսումնասիրեն ձեր ներկայիս համակարգը և կառաջարկեն կոնկրետ բարելավումներ։