परिचय: इस ट्यूटोरियल में, आप सीखेंगे कि कैसे NGINX सर्वर ब्लॉक्स और लोकेशन डायरेक्टिव्स को कॉन्फ़िगर करके अपनी वेबसाइट की सुरक्षा को बढ़ाया जाए। आप खोजेंगे कि कैसे विशिष्ट क्लाइंट IP पतों को ब्लॉक किया जाए, भौगोलिक स्थानों के आधार पर पहुंच को प्रतिबंधित किया जाए (जियो-आधारित प्रतिबंध), और HTTP बेसिक ऑथेंटिकेशन का उपयोग करके पासवर्ड-आधारित प्रमाणीकरण लागू किया जाए। ये उपाय आपके वेब सर्वर को अतिरिक्त सुरक्षा प्रदान कर सकते हैं, जबकि आप विशिष्ट वेब पृष्ठों तक पहुंच को नियंत्रित कर सकते हैं।
पूर्वापेक्षाएँ:
- sudo विशेषाधिकारों वाला एक Ubuntu सर्वर
- आपके सर्वर पर NGINX इंस्टॉल किया गया
- NGINX और उसकी कॉन्फ़िगरेशन की बुनियादी समझ
नोट: पासवर्ड-आधारित प्रतिबंध के लिए, यह अनुशंसित है कि आपके सर्वर के लिए HTTPS सक्षम हो।
फ़ॉर्मेटिंग परंपराएँ:
- कुछ कॉन्फ़िगरेशन उदाहरणों में, लुप्त भागों को इंगित करने के लिए दीर्घविराम (...) का उपयोग किया जा सकता है।
- "सर्वर" शब्द आपके NGINX इंस्टॉल किए गए Ubuntu सर्वर को संदर्भित करता है, जबकि "सर्वर ब्लॉक" NGINX कॉन्फ़िगरेशन ब्लॉक को संदर्भित करता है जो इस तरह दिखता है:
server {
...
}
कॉन्फ़िगरेशन स्थान: आपको यह जागरूक होना चाहिए कि NGINX अपनी कॉन्फ़िगरेशन फ़ाइलें कहाँ संग्रहीत करता है:
/etc/nginxNGINX कॉन्फ़िगरेशन निर्देशिका है जहाँ सभी कॉन्फ़िगरेशन फ़ाइलें रखी जाती हैं।/etc/nginx/nginx.confमुख्य NGINX कॉन्फ़िगरेशन फ़ाइल है, जहाँ से NGINX अपनी कॉन्फ़िगरेशन पढ़ना शुरू करता है।/etc/nginx/sites-enabledवह स्थान है जहाँ आप अपनी HTTP(S) सर्वर कॉन्फ़िगरेशन फ़ाइलें रख सकते हैं। NGINX शुरू होने या पुनः लोड होने के बाद, इस निर्देशिका से सभी फ़ाइलें NGINX द्वारा लोड की जाती हैं।/etc/nginx/sites-availableवह स्थान है जहाँ आप अपनी HTTP(S) सर्वर कॉन्फ़िगरेशन फ़ाइलें रख सकते हैं, लेकिन वे NGINX द्वारा तब तक लोड नहीं की जाएंगी जब तक आप/etc/nginx/sites-enabledनिर्देशिका में एक सांकेतिक लिंक नहीं बनाते।
लॉग फ़ाइलें: NGINX दो डिफ़ॉल्ट लॉग फ़ाइलें उत्पन्न करता है:
/var/log/nginx/access.log: सभी अनुरोधों को लॉग करता है।/var/log/nginx/error.log: त्रुटि स्थितियों और स्थिति जानकारी को लॉग करता है।
पुनः लोड करने पर त्रुटि: यदि आपको sudo systemctl reload nginx के साथ अपनी NGINX कॉन्फ़िगरेशन को पुनः लोड करते समय कोई त्रुटि आती है, तो आप sudo nginx -t चलाकर विशिष्ट त्रुटि देख सकते हैं।
चरण 1 - सर्वर ब्लॉक फ़ाइल का पता लगाना
प्रतिबंधों को कॉन्फ़िगर करने के लिए, आपको उस सर्वर ब्लॉक फ़ाइल को ढूंढना होगा जो आपके डोमेन से मेल खाती है। सर्वर ब्लॉक फ़ाइलों की सूची देखने के लिए निम्नलिखित कमांड का उपयोग करें:
ls -al /etc/nginx/sites-available/
यह मानते हुए कि आप एक ऐसे सर्वर ब्लॉक में प्रतिबंध जोड़ना चाहते हैं जो example.com का जवाब देता है, उस सर्वर ब्लॉक का पता लगाएं जिसमें server_name example.com; लाइन हो। उदाहरण के लिए:
server {
...
server_name example.com;
...
}
सुनिश्चित करें कि listen डायरेक्टिव उस पोर्ट से मेल खाता है जिसे आप प्रतिबंधित करना चाहते हैं (उदाहरण के लिए, HTTP के लिए listen 80;)।
चरण 2 - पहुंच की अनुमति देने या अस्वीकार करने के लिए IP पतों का उपयोग करना
NGINX क्लाइंट IP पतों के आधार पर पहुंच को नियंत्रित करने के लिए allow और deny डायरेक्टिव प्रदान करता है। आप विशिष्ट IP पतों, जिसमें परीक्षण के लिए आपका अपना भी शामिल है, तक पहुंच को ब्लॉक कर सकते हैं।
चरण 2.1 - अपने सार्वजनिक IP पते का पता लगाना अपने स्वयं के IP पते को ब्लॉक करने के लिए, आपको पहले अपने सार्वजनिक IP पते का निर्धारण करना होगा। निम्नलिखित कमांड चलाएं:
curl -4 https://2ip.io
आपको आउटपुट के रूप में अपना सार्वजनिक IP पता प्राप्त होगा (उदाहरण के लिए, 15.1.1.1)। यदि कमांड विफल हो जाती है, तो आप Google खोज के माध्यम से अपना IP पता पा सकते हैं।
चरण 2.2 - पहुंच को ब्लॉक करना अपने IP पते को ब्लॉक करने के लिए, अपने सर्वर ब्लॉक में उपयुक्त लोकेशन संदर्भ में निम्नलिखित लाइन जोड़ें, 15.1.1.1) को अपने सार्वजनिक IP से बदलते हुए:
deny 15.1.1.1); यहाँ एक उदाहरण कॉन्फ़िगरेशन स्निपेट है:
server {
listen 80;
server_name example.com;
location / {
deny 15.1.1.1) } } इस परिवर्तन के बाद, कॉन्फ़िगरेशन लागू करने के लिए NGINX को पुनः लोड करें:
sudo systemctl reload nginx
अब, यदि आप अपने IP से अपनी वेबसाइट तक पहुंचने के लिए वही कमांड चलाते हैं:
curl -4 --head http://example.com
आपको एक HTTP 403 Forbidden त्रुटि प्राप्त होनी चाहिए, जो इंगित करती है कि पहुंच अस्वीकार कर दी गई है।
नोट: आप कई allow और deny डायरेक्टिव निर्दिष्ट कर सकते हैं। पहला डायरेक्टिव जो मेल खाता है, लागू किया जाएगा। उदाहरण के लिए:
allow 15.1.1.1; allow 15.1.1.2; deny all; इस उदाहरण में, 15.1.1.1 और 15.1.1.2 के लिए पहुंच की अनुमति है, जबकि अन्य सभी IP पते अस्वीकार कर दिए गए हैं।
चरण 3 - पहुंच की अनुमति देने या अस्वीकार करने के लिए जियो मॉड्यूल का उपयोग करना
NGINX का geo मॉड्यूल IP डेटाबेस का उपयोग करके भौगोलिक स्थानों के आधार पर पहुंच को नियंत्रित करने का एक लचीला तरीका प्रदान करता है। इस सुविधा को सक्षम करने के लिए:
libnginx-mod-http-geoip2पैकेज इंस्टॉल करें:
sudo apt update && sudo apt install libnginx-mod-http-geoip2
- सुनिश्चित करें कि
/etc/nginx/nginx.confमें निम्नलिखित लाइन शामिल है:
include /etc/nginx/modules-enabled/*.conf;
- एक GeoIP2-संगत IP डेटाबेस डाउनलोड करें। आप प्रदान किए गए कमांड का उपयोग कर सकते हैं या MaxMind वेबसाइट पर एक खाता बना सकते हैं और GeoLite2 Country डेटाबेस डाउनलोड कर सकते हैं:
cd /etc/nginx && sudo curl --fail -LO https://github.com/P3TERX/GeoLite.mmdb/releases/latest/download/GeoLite2-Country.mmdb
- GeoIP2 डायरेक्टिव शामिल करने के लिए अपनी NGINX कॉन्फ़िगरेशन संपादित करें:
geoip2 /etc/nginx/GeoLite2-Country.mmdb {
$user_country country iso_code;
}
map $user_country $not_allowed {
CA 1; # Canada
US 1; # United States
default 0; # Allow all other countries
}
server {
listen 80;
server_name example.com;
location / {
if ($not_allowed) {
return 403 "You're not allowed to access.";
}
}
}
इस उदाहरण में, कनाडा (CA) और संयुक्त राज्य अमेरिका (US) के उपयोगकर्ताओं के लिए पहुंच अस्वीकार कर दी गई है, जबकि अन्य सभी देशों की अनुमति है।
परिवर्तनों को लागू करने के लिए NGINX को पुनः लोड करें:
sudo systemctl reload nginx
चरण 4 - पासवर्ड-आधारित प्रमाणीकरण (HTTP बेसिक ऑथेंटिकेश
खोजें