ارتقاء امنیت وب‌سایت با استفاده از کانفیگ‌های امنیتی Nginx

nginx_banner
به این مقاله چند ستاره میدی؟
0 / 5 امتیاز: 5 رای 1

امتیاز شما به این مطلب:

فهرست عناوین :

در دنیای امروز، امنیت وب‌سایت‌ها یکی از مهمترین دغدغه‌های صاحبان کسب‌وکارهای آنلاین و توسعه دهندگان وب است. با افزایش روزافزون حملات سایبری و تهدیدات مختلف، نیاز به پیاده‌سازی کانفیگ‌های امنیتی مناسب برای وب‌سرورها امری ضروری است. در این مقاله، به بررسی یک نمونه کانفیگ امنیتی برای Nginx میپردازیم که میتواند به شما در محافظت از وب‌سایت‌تان در برابر انواع مختلف حملات کمک کند.

چرا امنیت وب‌سایت اهمیت دارد؟

امنیت وب‌سایت نه تنها برای محافظت از اطلاعات کاربران و داده‌های حساس شما اهمیت دارد، بلکه برای حفظ اعتبار و اعتماد مشتریان نیز ضروری است. حملات سایبری می‌توانند خسارات جبران‌ناپذیری به کسب‌وکارها وارد کنند، از جمله سرقت اطلاعات، از دست رفتن اعتماد مشتریان و خسارات مالی.

کانفیگ امنیتی Nginx برای محافظت از وب‌سایت شما

در این مقاله، یک نمونه کانفیگ امنیتی برای Nginx را بررسی می‌کنیم که به شما کمک می‌کند تا امنیت وب‌سایت خود را در برابر حملات سایبری مختلف افزایش دهید. این تنظیمات شامل پیکربندی‌های مختلفی برای مقابله با تهدیدات رایج مانند XSS، تزریق SQL، حملات DDoS و موارد دیگر است.

۱. تنظیمات پایه

در ابتدای فایل nginx.conf، تنظیمات پایه‌ای مانند کاربر اجرایی و تعداد فرآیندهای کاری Nginx مشخص می‌شوند:

				
					user www-data;
worker_processes auto;
pid /run/nginx.pid;

				
			

۲. تنظیمات امنیتی HTTP

برای غیرفعال کردن نمایش نسخه Nginx و حذف هدر Server از پاسخ‌ها:

				
					server_tokens off;
more_clear_headers 'Server';

				
			

۳. محدودیت‌های درخواست

برای محدود کردن اندازه درخواست‌ها و تنظیم تایم‌اوت‌ها جهت جلوگیری از اتصالات طولانی مدت:

				
					client_max_body_size 10M;
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

				
			

۴. فشرده‌سازی

تنظیمات Gzip برای فشرده‌سازی پاسخ‌ها و کاهش پهنای باند مصرفی:

				
					gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

				
			

۵. هدرهای امنیتی

هدرهای امنیتی برای جلوگیری از حملات مختلف:

				
					add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-src 'none';" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

				
			

۶. تنظیمات SSL

برای استفاده از پروتکل‌های TLS و انتخاب رمزنگاری‌های قوی:

				
					ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

				
			

۷. ریدایرکت به HTTPS

برای اطمینان از اینکه تمام ترافیک به HTTPS ریدایرکت میشود:

				
					server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name yourdomain.com www.yourdomain.com;

    return 301 https://$host$request_uri;
}

				
			

۸. تنظیمات سرور SSL

تنظیمات مربوط به SSL و مسیرهای گواهی:

				
					server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/ssl/certs/your_certificate.crt;
    ssl_certificate_key /etc/ssl/private/your_private_key.key;

    root /var/www/yourproject;
    index index.html index.htm index.nginx-debian.html;

    location /static/ {
        alias /var/www/yourproject/static/;
    }

    location /media/ {
        alias /var/www/yourproject/media/;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/run/gunicorn.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~* \.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)$ {
        deny all;
    }
}

				
			

این تنظیمات به شما کمک میکنند تا امنیت وب‌سایت خود را بهبود بخشید و از بسیاری از تهدیدات سایبری جلوگیری کنید. با پیاده‌سازی این پیکربندی‌ها، میتوانید اطمینان حاصل کنید که وب‌سایت شما در برابر حملات مختلف محافظت شده است.

نمونه کانفیگ امنیتی برای Nginx

در این بخش، یک نمونه کانفیگ امنیتی برای Nginx ارائه می‌دهیم که شامل تنظیمات امنیتی برای مقابله با حملات سایبری مختلف و افزایش امنیت وب‌سایت شما است.

تنظیمات nginx.conf

				
					user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # امنیت HTTP
    server_tokens off;
    more_clear_headers 'Server';

    # محدودیت اندازه درخواست‌ها
    client_max_body_size 10M;

    # زمان‌های محدودیت اتصال
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

    # تنظیمات لاگ
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;

    # فشرده‌سازی
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # سیاست امنیتی محتوای (CSP)
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-src 'none';" always;

    # جلوگیری از Clickjacking
    add_header X-Frame-Options "DENY" always;

    # جلوگیری از XSS
    add_header X-XSS-Protection "1; mode=block" always;

    # جلوگیری از Sniffing
    add_header X-Content-Type-Options "nosniff" always;

    # استفاده از HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # تنظیمات سرور SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

    # پیکربندی سرور
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name yourdomain.com www.yourdomain.com;

        # ریدایرکت به HTTPS
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;
        server_name yourdomain.com www.yourdomain.com;

        # مسیر گواهی SSL
        ssl_certificate /etc/ssl/certs/your_certificate.crt;
        ssl_certificate_key /etc/ssl/private/your_private_key.key;

        # روت سایت
        root /var/www/yourproject;
        index index.html index.htm index.nginx-debian.html;

        # تنظیمات سرور برای دایرکتوری‌های ثابت
        location /static/ {
            alias /var/www/yourproject/static/;
        }

        location /media/ {
            alias /var/www/yourproject/media/;
        }

        # تنظیمات پروکسی برای دایرکتوری /app/
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://unix:/run/gunicorn.sock;
        }

        # جلوگیری از دسترسی به فایل‌های مخفی
        location ~ /\.ht {
            deny all;
        }

        # جلوگیری از دسترسی به فایل‌های پشتیبان
        location ~* \.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)$ {
            deny all;
        }
    }
}

				
			

توضیحات

  1. تنظیمات پایه:

    • user www-data; برای اجرای Nginx به عنوان کاربر www-data.
    • worker_processes auto; برای استفاده بهینه از منابع سیستم.
  2. تنظیمات امنیتی HTTP:

    • server_tokens off; برای غیرفعال کردن نمایش نسخه Nginx.
    • more_clear_headers 'Server'; برای حذف هدر Server از پاسخ‌ها.
  3. محدودیت‌های درخواست:

    • client_max_body_size 10M; برای محدود کردن اندازه درخواست‌ها.
    • تنظیمات تایم‌اوت برای جلوگیری از اتصالات طولانی مدت.
  4. فشرده‌سازی:

    • تنظیمات Gzip برای فشرده‌سازی پاسخ‌ها و کاهش پهنای باند مصرفی.
  5. هدرهای امنیتی:

    • Content-Security-Policy برای جلوگیری از XSS و تزریق کدهای مخرب.
    • X-Frame-Options "DENY" برای جلوگیری از حملات Clickjacking.
    • X-XSS-Protection "1; mode=block" برای جلوگیری از XSS.
    • X-Content-Type-Options "nosniff" برای جلوگیری از Sniffing.
    • Strict-Transport-Security برای استفاده از HSTS.
  6. تنظیمات SSL:

    • استفاده از پروتکل‌های TLSv1.2 و TLSv1.3.
    • تنظیمات ssl_ciphers برای انتخاب رمزنگاری‌های قوی.
  7. ریدایرکت به HTTPS:

    • سرور HTTP برای ریدایرکت ترافیک به HTTPS.
  8. تنظیمات سرور SSL:

    • مسیرهای گواهی SSL و کلید خصوصی.
    • تنظیمات پروکسی برای Gunicorn.
  9. محافظت از فایل‌ها:

    • جلوگیری از دسترسی به فایل‌های مخفی و پشتیبان.

با استفاده از این تنظیمات، می‌توانید امنیت وب‌سایت خود را به طور قابل توجهی افزایش دهید و از بسیاری از تهدیدات امنیتی رایج جلوگیری کنید.

به این مقاله چند ستاره میدی؟
0 / 5 امتیاز: 5 رای 1

امتیاز شما به این مطلب:

مطلب بالا را با دوستان خود به اشتراک بگذارید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *