در این مقاله نکاتی برای بهبود امنیت وب سرور Nginx برای شما ارائه شده است.
چندین معیار در نظر گرفته شده است: امنیت سیستم ، امنیت SSL / TLS ، و حفاظت از داده ها.
- در قسمت اول نحوه تقویت امنیت سرور ما برای محدود کردن نشت داده ها.
- در قسمت دوم ، ما به امنیت SSL / TLS برای محافظت از ارتباط بین سرور و مشتری متمرکز خواهیم شد. nikto pack (یا nikto_console):
nikto -h https: //mywebserver.domainnet/ -sslمقالات مرتبط:
نحوه اسکن سرور وب برای آسیب پذیری ها با اسکنر Nikto
Wikto Scanner – Security Security سرور وب
1. تنظیمات امنیتی اصلی
بهترین راه برای محافظت از وب سرور شما حداقل دادن داده به مهاجم است: شماره نسخه Nginx ، PHP ، OS و غیره.
اطلاعات در هدرهای HTTP پنهان است.
# فقط Nginx را در سربرگ سرورserver_tokens off خاموش کنید ؛
Testing
# header Display curl https://mywebserver.domain.net/ -ksv 2> & 1> / dev / null | grep Server2. امنیت دقیق حمل و نقل (HSTS)
این تنظیمات به این سرویس دهنده HTTP اجازه می دهد که سرور وب خود را به HTTP آگاه سازد.
سیاست HSTS از کاربران در برابر حملات استراق سمع محافظت می کند. ] مرد در حمله میانی نمی تواند درخواست را رهگیری کند در حالی که HSTS فعال است.
add_header Strict-Transport-Security "max-age = 15552001؛ شاملSubdomains ؛ preload" ؛
3. سایر ویژگی های امنیتی
# سرور از طریق ETag مسدود شده etag خاموش می شود. more_clear_headers 'ETag'؛ # Anti-clickjacking add_header X-Frame-Options "SAMEORIGIN"؛
1. پروتکل های رمزگذاری SSL و TLS
وقتی در مورد "SSL" صحبت می کنیم ، در واقع SSL / TLS است.
شما باید بدانید که SSL از سال 1999 لغو شده است ، و آخرین نسخه آن ، SSLv3 ، از سال 1996 آغاز می شود.
از آن زمان ، TLS وارد بازی شد و سه نسخه منتشر شده است: TLSv1.0، TLSv1.1 و TLSv1.2.
تا اکتبر 2014 نسخه های SSLv3 و TLS با هماهنگی کامل زندگی می کردند ، به اصطلاح.
Google ادعا می کند که 14 اکتبر 2014 می تواند پیام های با استفاده از پروتکل SSLv3 را از طریق حمله POODLE رمزگشایی کند.
در حالی که 2/3 از سرورهای وب در اینترنت این پروتکل را می پذیرند و از آن استفاده می کنند ، جامعه این وحشت بود.
مسلماً ، بهره برداری آسان نیست ، اما اگر با حمله ای ترکیب کنیم که سطح رمزنگاری را کاهش می دهد (مثلاً Logjam ، نگاه کنید به زیر) ، و سپس این می تواند بر همه نسخه های TLS تأثیر بگذارد.
بهترین روش برای محافظت غیرفعال کردن SSLv3 است.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2؛ [19459
تست پیکربندی
echo -n | opensl s_client - اتصال mywebserver.domain.net:443 -ssl32. الگوریتم های رمزگذاری
الگوریتم های رمزگذاری به 4 نوع تقسیم می شوند:
- تبادل کلید
- احراز هویت
- رمزگذاری بلوک [196590]از برخی الگوریتم ها (RC4 ، DH ، 3DES ، EXP ، و غیره) باید اجتناب شود ، در حالی که به دیگران اولویت داده می شود.
# بهترین نسبت امنیتی / دسترسی ssl_ciphers CDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES256-GCM-SHA384-A-RSA6A-A-S2A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-E : DHE-DSS-AES128-GCM-SHA256: kEDH + AESGCM: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-A12: -AES256-SHA384: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA: ECDHE-ECDSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE-RSA - -SHA256:! DHE-RSA-AES256-SHA256: DHE-DSS-AES256-SHA:! DHE-RSA-AES256-SHA: AES128-GCM-SHA256 :! AES256-GCM-SHA384: AES128-SHA256:! AES256: AES256: AES256: AES256: AES256: AES256: AES256 : AES128-SHA :! AES256-SHA: AES: DES-CBC3-SHA:! ANULL:! ENULL:! صادرات:! DES :! RC4 :! MD5:! PSK:! AECDH:! EDH-DSS-DES-CBC3 -SHA :! EDH-RSA-DES-CBC3-SHA:! KRB5-DES-CBC3-SHA؛ # امن است ssl_ciphers EECDH + AESGCM: EDH + AESGCM: AES256 + EECDH: AES256 + EDH؛ # جهانی ssl_ciphers EECDH + AESGCM: EDH + AESGCM: AES256 + EECDH: ECDHE-RSA-AES128-SHA: DHE-RSA-AES128-GCM-SHA256: AES256 + EDH: ECDHE-RSA-AES256-G8-R8 -GCM-SHA256: DHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA256: ECDHE-RSA-AES256-SHA: DHE-RSA-AES256-SHE256 -AES128-SHA256: DHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA: ECDHE-RSA-DES-CBC3-SHA: EDH-RSA-DES-CBC3-SHA: AES256-GCM-SHA384: AES128-GCM -SHA256: AES256-SHA256: AES128-SHA256: AES256-SHA: AES128-SHA: DES-CBC3-SHA: HIGH :! ANULL:! ENULL :! EXPORT :! DES :! MD5 :! PSK:! RC4 :! SEED ؛
3. حملات BEAST و RC4
این حمله به شما امکان می دهد بخش هایی از ترافیک را به روشی گسسته رمزگشایی کنید ، بدون اینکه بتوانید بدون شناسایی آن را تغییر دهید.
اگر از پروتکل رمزگذاری TLSv1.0 در هنگام مبادله استفاده می شود ، حمله امکان پذیر است.
دو روش برای نزدیک کردن به اجرای اقدامات متقابل وجود دارد: در طرف مشتری یا سمت سرور.
مرورگرهای اخیر. همه TLSv1.1 و TLSv1.2 را پشتیبانی کنید.
بنابراین ، مشتری فقط باید مرورگر خود را به روز کند تا از BEAST محافظت شود.
در سمت سرور ، می توانید TLSv1.0 را به صورت ریشه ای از لیست پروتکل های مجاز حذف کنید ، اما این منجر به ناسازگاری بسیاری از مشتریانی خواهد شد که از نسخه های اخیر پشتیبانی نمی کنند. TLS به دلیل سخت افزار خیلی قدیمی.
راه دیگر این است که فقط الگوریتم رمزگذاری حجم RC4 اجازه دهیم.
برای سازگاری حداکثر ، می توانید RC4 را غیرفعال کنید ، اما TLSv1.0 را فعال کنید .
این منجر به استفاده از AES254 در رمزنگاری بلوک برای کسانی خواهد شد که تصمیم به استفاده از آن می گیرند (مواردی که TLSv1.1 و TLSv1.2 را پشتیبانی نمی کنند) ، بلکه باعث می شود آنها در مقابل BEAST آسیب پذیر باشند ...
در نتیجه ، حمله BEAST از RC4 جدی تر است.
خودتان انتخاب کنید.
# حفاظت از BEAST ## TLSv1.0 را حذف کنید ssl_protocols TLSv1.1 TLSv1.2؛ # حفاظت از BEAST ، بدون محافظت از RC4 ## TLSv1.0 و force RC4 را مجاز کنید ssl_protocols TLSv1 TLSv1.1 TLSv1.2؛ ssl_ciphers EECDH + ECDSA + AESGCM: EECDH + aRSA + AESGCM: EECDH + ECDSA + SHA384: EECDH + aRSA + SHA384: EECDH + aRSA + SHAH6 :! EECDH + aRSA + SHAH6! LOW:! 3DES:! MD5:! EXP:! PSK:! SRP:! DSS: RC4 :! SEED؛ # بدون حفاظت از BEAST ، محافظت از RC4 ## TLSv1.0 را مجاز کنید و RC4 را از رمزهای انبوه حذف کنید ssl_protocols TLSv1 TLSv1.1 TLSv1.2؛ ssl_ciphers EECDH + ECDSA + AESGCM: EECDH + aRSA + AESGCM: EECDH + ECDSA + SHA384: EECDH + aRSA + SHA384: EECDH + aRSA + SHAH6 :! ECDH + aRSA + SHAH6! LOW:! 3DES:! MD5:! EXP:! PSK:! SRP :! DSS:! RC4 :! SEED؛
آزمایش پیکربندی
# آیا سرور شما از TLSv1.1 پشتیبانی می کند ، نه RC4؟
echo -n | opensl s_client - اتصال mywebserver.domain.net:443-رمزگذاری DHE-RSA-CAMELLIA128-SHA -tls1_1 # آیا سرور شما از TLSv1.0 پشتیبانی می کند؟ echo -n | opensl s_client - اتصال mywebserver.domain.net:443 -tls1
4. حمله فرار (کلیدهای فاکتورسازی RSA-EXPORT)
برای محافظت در برابر این حمله ، باید کلیدهای رمزگذاری را در کتابخانه صادرات غیرفعال کنید.
همان پیکربندی SSLCipherSuite مانند قبل ، EXP.
تست پیکربندی
echo -n | opensl s_client-اتصال mywebserver.domain.net:443 -cipher EXP-EDH-RSA-DES-CBC-SHA5. حمله Logjam
این حمله باعث کاهش سطح رمزنگاری برای تبادل TLS می شود.
برای محافظت در برابر این ، بهتر است فقط پروتکل های TLSv1.0 ، TLSv1.1 و TLSv1.2 را مجاز کنید.
علاوه بر این ، الگوریتم های تبادل کلید دیگر دیگر نباید DH معمولی باشند ، بلکه منحنی های بیضوی: EECDH یا EDH هستند.
در آخر ، سطح پیش فرض را روی بالاترین قرار دهید رمزگذاری و ایجاد یک گروه منحصر به فرد و قدرتمند 4096 بیتی Diffie-Hellman.
opensl dhparam -out /etc/ssl/certs/dhparam.pem 4096 opensl dh -in /etc/ssl/certs/dhparam.pem - متن
ssl_protocols TLSv1 TLSv1.1 TLSv1.2؛ ssl_ciphers EECDH + ECDSA + AESGCM: ETDH + aRSA + AESGCM: EECDH + ECDSA + SHA384: EECDH + aRSA + SHA384: EECDH + aRSA + SHAH6 :! ETDH + aRSA + SHAH6! LOW:! 3DES:! MD5:! EXP:! PSK:! SRP:! DSS:! RC4 :! SEED؛ ssl_prefer_server_ciphers در؛ ssl_dhparam /etc/ssl/certs/dhparam.pem؛ موفق19659085-03. دلچسب
اگر نسخه opensl شما خیلی قدیمی است ، تحت تأثیر این کار قرار گرفتید.
در این حالت ، اگر سرور از نسخه 1.0.1 با هر پچ قبل از "g" استفاده می کند.
dpkg -l opensl7 حمله CRIME
این حمله از فشرده سازی SSL استفاده می کند ، بنابراین فقط آن را غیرفعال کنید.
gzip خاموش ؛
نتیجه گیری
سرور { گوش دادن 443 default_server؛ root / var / www / web؛ # Nginx را فقط در سرصفحه سرور برگردانید server_tokens خاموش است؛ ssl در؛ ssl_certificate /etc/nginx/ssl/server.pem؛ ssl_certificate_key /etc/nginx/ssl/server.key؛ # محافظت از رنگ ## SSLv3 و SSLv2 را حذف کنید ssl_protocols TLSv1 TLSv1.1 TLSv1.2؛ # بهترین نسبت امنیتی / دسترسی ssl_ciphers CDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES256-GCM-SHA384-A-RSA6A-A-S2A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-E : DHE-DSS-AES128-GCM-SHA256: kEDH + AESGCM: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-A12: -AES256-SHA384: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA: ECDHE-ECDSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE-RSA - -SHA256:! DHE-RSA-AES256-SHA256: DHE-DSS-AES256-SHA:! DHE-RSA-AES256-SHA: AES128-GCM-SHA256 :! AES256-GCM-SHA384: AES128-SHA256:! AES256: AES256: AES256: AES256: AES256: AES256: AES256 AES128-SHA :! AES256-SHA: AES: DES-CBC3-SHA:! ANULL:! ENULL :! EXPORT :! DES :! RC4 :! MD5 :! PSK:! AECDH :! EDH-DSS-DES-CBC3 -SHA :! EDH-RSA-DES-CBC3-SHA:! KRB5-DES-CBC3-SHA؛ # حفاظت از LOGJAM ## کلیه TLS پذیرفته شده ، رمزگذار تبادل کلید EECDH / EDH ، رمزگذاری نیرو و استفاده از گروه 4096 بیتی DH ssl_prefer_server_ciphers در؛ ssl_dhparam /etc/ssl/certs/dhparam.pem؛ # محافظت از BREACH ## فشرده سازی SSL را غیرفعال کنید gzip کردن؛ # هدرهای امنیتی add_header Strict-Transport-Security "max-age = 15552001؛ شامل Subdomains؛ preload"؛ etag خاموش؛ more_clear_headers 'ETag'؛ add_header X-Frame- گزینه های "SAMEORIGIN"؛ add_header X-Content-Type- گزینه های nosniff؛ add_header X-XSS-Protection "1؛ mode = block"؛ add_header Content-Security-Policy "default-src" self "؛ script-src" self "" safe-inline "" safe-eval "https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net؛ img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com؛ style-src 'self' 'safe-inline' https://fonts.googleapis.com https://assets.zendesk.com؛ font-src 'self' https://themes.googleusercontent.com؛ frame-src https : //assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com؛ object-src 'هیچ' "؛ # ذخیره حافظه جلسه SSL را برای بهبود عملکرد فعال کنید # http://nginx.org/fa/docs/http/ngx_http_ssl_module.html#ssl_session_cache ssl_session_cache به اشتراک گذاشته شده: SSL: 10m؛ ssl_session_timeout 10m؛ # به طور پیش فرض ، اندازه بافر 16k است که در هنگام ارسال پاسخ های بزرگ به حداقل سربار مربوط می شود. # برای به حداقل رساندن زمان به اولین بایت ممکن است استفاده از مقادیر کوچکتر مفید باشد ssl_buffer_size 8k؛ # OCSP Stapling ssl_stapling در؛ ssl_stapling_verify on؛