Nginx में सेल्फ-साइन्ड प्रमाणपत्र का उपयोग करके एप्लिकेशन लेयर के L7 स्तर पर रॉ IP पते पर HTTP/HTTPS संचार को अस्वीकार करना

5 min

language: ja bn en es hi pt ru zh-cn zh-tw

नमस्ते, मैं अक्षम हूँ।
इस एज कंप्यूटिंग सेवा के प्रसार के बीच, कुछ डोमेन के लिए जानबूझकर unbound जैसे DNS सर्वर का उपयोग करने की आवश्यकता नहीं है, लेकिन कुछ लोगों के लिए यह अभी भी आवश्यक है।
उदाहरण के लिए, मेरे जैसे लोगों के लिए जो अपने स्वयं के ईमेल सर्वर को होस्ट करते हैं जो ईमेल भेज और प्राप्त कर सकते हैं, OpenDKIM जैसी निर्भरताएँ unbound को स्थापित कर सकती हैं।
और इस तरह, सार्वजनिक रूप से उजागर किए गए रॉ IP पते DDoS हमलों के लिए एक संभावित भेद्यता हो सकते हैं, और रॉ IP के माध्यम से एक्सेस किया जाना मानसिक स्वास्थ्य के लिए अच्छा नहीं है, इसलिए मैं इसे ब्लॉक करने का निर्णय लेता हूँ।

खैर, DDoS के खिलाफ Fail2ban से ब्लॉक करना संभव है, लेकिन ऐसा लगता है कि यह लॉग से ब्लॉक किए जाने वाले IP पतों के DB में डालकर प्रबंधित करता है, जिससे लोड बढ़ने की संभावना होती है। यदि Fail2ban का उपयोग करना है, तो इसे डोमेन-वार किया जाना चाहिए। इसलिए, इस बार, मैं Nginx की तरफ से HTTP/HTTPS संचार से उन रॉ IP पतों को बचाने के लिए एक अलग तरीका अपनाऊंगा जिनका आमतौर पर उपयोग नहीं किया जाता है।

केवल HTTP संचार को ब्लॉक करने का सरल तरीका

मेरे मामले में, वैश्विक सार्वजनिक IP पता नीचे दिया गया है, इसलिए यह ऐसा होगा।

# http通信
server {
    listen 80;
    listen [::]:80;

    server_name 167.179.75.206;

    return 444;
}

हालांकि, SSL संचार के मामले में, Nginx को listen 443 ssl; के रूप में स्पष्ट रूप से SSL संचार के रूप में निर्दिष्ट करके HTTPS के लिए सुनना संभव है।

और इस तरह, यदि आप इसे http सेक्शन में डालते हैं और nginx -t चलाते हैं...

# https通信
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name 167.179.75.206;

    # IPアドレスへのアクセスを拒否
    return 444;
}

क्या होगा?

# nginx -t
nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /usr/local/etc/nginx/nginx.conf:90
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed

हाँ, क्योंकि यह SSL संचार है, आपको यह कहकर डांटा जाएगा कि कोई कुंजी नहीं है
ऐसे मामलों में, सेल्फ-साइन्ड की आवश्यकता होती है... 'यह मैं हूँ! मैं ही हूँ!' के रूप में, आपको यह कहना होगा, 'यह मेरा प्रमाणपत्र है, हाहा।' मैं खुद को प्रमाणित करता हूँ, अभी, यहीं पर...

तो, OpenSSL, क्या आप कुछ कर सकते हैं?

OpenSSL की मदद से, आइए इस 'मैं ही हूँ' (सेल्फ-साइन्ड) प्रमाणीकरण को करें।
OpenBSD से निकली LibreSSL को अगले युग की जिम्मेदारी सौंपने की भावना से इनकार नहीं किया जा सकता है, लेकिन इसके सामान्य होने में काफी समय लगने की संभावना है।
फिलहाल, चूंकि केवल मैं ही इसका उपयोग करूंगा, मैं इसे 3 साल के लिए सेट करता हूँ।

openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /usr/local/etc/nginx/selfsigned.key -out /usr/local/etc/nginx/selfsigned.crt

और, यदि आप Enter दबाकर बिना कुछ डाले आगे बढ़ते हैं, तो निर्दिष्ट निर्यात स्थान पर कुंजी उत्पन्न हो जाएगी।

Nginx, मैं वापस आ गया हूँ

आइए Nginx में इस कुंजी को निर्दिष्ट करें।

# https通信
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name 167.179.75.206;

    # 自己署名証明書と秘密鍵の指定
    ssl_certificate /usr/local/etc/nginx/selfsigned.crt;
    ssl_certificate_key /usr/local/etc/nginx/selfsigned.key;

    return 444;
}

यह हो गया।
समाप्त।

Related Posts