firewalld, AlmaLinux 9 और Rocky Linux 9 का डिफ़ॉल्ट फ़ायरवॉल मैनेजर है। आपके VPS Linux Infrawire पर इससे आप सिर्फ़ ज़रूरी सेवाएँ खोल सकते हैं, SSH को अपने IP तक सीमित कर सकते हैं और पोर्ट रीडायरेक्ट कर सकते हैं, वह भी कच्चे nftables नियमों को छुए बिना।
सबसे बड़ा जोखिम अपना ही SSH सत्र कट जाना है। यह गाइड इसी को ध्यान में रखकर बनी है: हर जोखिम भरा बदलाव पहले runtime कॉन्फ़िगरेशन में परखा जाता है, फिर स्थायी किया जाता है।
📋 पूर्वापेक्षाएँ
- AlmaLinux 9 या Rocky Linux 9 वाला VPS
- root SSH एक्सेस (IP और root पासवर्ड आपके क्लाइंट एरिया में मिलते हैं)
- नियम बदलते समय खुला रखने के लिए दूसरा SSH सत्र
1. firewalld इंस्टॉल करें और शुरू करें
Bashdnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state
आख़िरी कमांड को running दिखाना चाहिए। डिफ़ॉल्ट ज़ोन public है, जो SSH, Cockpit और DHCPv6 क्लाइंट को पहले से अनुमति देता है और बाकी आने वाले कनेक्शन गिरा देता है।
2. ज़ोन, सेवाएँ और पोर्ट समझें
ज़ोन नियमों का ऐसा समूह है जो किसी इंटरफ़ेस पर लागू होता है। सेवा पोर्टों का नामित समूह है (ssh यानी 22/tcp, http यानी 80/tcp, https यानी 443/tcp)।
Bashfirewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20
दो कॉन्फ़िगरेशन होते हैं। Runtime तुरंत लागू होता है और रीलोड या रीबूट पर मिट जाता है। स्थायी (--permanent) डिस्क पर सहेजा जाता है, पर firewall-cmd --reload के बाद ही सक्रिय होता है।
3. सेवाएँ और पोर्ट खोलें
Bash# सेवाएँ firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # कस्टम पोर्ट firewall-cmd --permanent --add-port=8080/tcp # पोर्ट की श्रेणी firewall-cmd --permanent --add-port=30000-30100/udp # स्थायी कॉन्फ़िगरेशन लागू करें firewall-cmd --reload
कुछ बंद करने के लिए संबंधित --remove-service या --remove-port विकल्प इस्तेमाल करें। वेब कंसोल का उपयोग नहीं करते तो cockpit सेवा हटा दें: firewall-cmd --permanent --remove-service=cockpit।
4. rich rule से SSH सिर्फ़ अपने IP से अनुमत करें
Rich rule स्रोत पता जैसी शर्तें व्यक्त करते हैं। जब तक प्रतिबंधित नियम काम करता साबित न हो, सामान्य SSH नियम कभी न हटाएँ।
Bash# 1. नियम सिर्फ़ runtime में जोड़ें (अपने सार्वजनिक IP से बदलें) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. नया टर्मिनल खोलें और पुष्टि करें कि YOUR_IP से SSH अब भी चलता है # 3. इसे स्थायी करें, फिर सबके लिए खुली SSH सेवा हटा दें firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload
अगर आपका IP बदल गया तो एक्सेस चला जाएगा: रिकवरी के रास्ते के तौर पर क्लाइंट एरिया से VPS कंसोल उपलब्ध रखें। IPv6 पते के लिए family="ipv6" और IPv6 पता लिखें।
5. पोर्ट रीडायरेक्ट करें
पोर्ट 80 पर आने वाला ट्रैफ़िक उसी सर्वर पर 8080 पर सुन रही एप्लिकेशन तक भेजने के लिए:
Bashfirewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload
किसी दूसरी मशीन पर भेजने के लिए forward-port विकल्प में toaddr=TARGET_IP जोड़ें और firewall-cmd --permanent --add-masquerade से masquerading चालू करें। कर्नेल को भी फ़ॉरवर्डिंग की अनुमति देनी होती है, जिसे masquerading के लिए firewalld संभाल लेता है।
6. कॉन्फ़िगरेशन जाँचें
Bashfirewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp
runtime और स्थायी सूचियों की तुलना करें: रीलोड के बाद वे एक जैसी होनी चाहिए। किसी दूसरी मशीन से nc -zv VPS_IP 80 से पोर्ट परखें। सुनती हुई सेवा (ss -tlnp) तभी पहुँच में आती है जब फ़ायरवॉल उसका पोर्ट अनुमत करे।
🛠️ समस्या निवारण
FirewallD is not running: इसे systemctl enable --now firewalld से शुरू करें और त्रुटियों के लिए journalctl -u firewalld देखें।
नए नियम का कोई असर नहीं: आपने --permanent इस्तेमाल किया पर रीलोड नहीं किया। firewall-cmd --reload चलाएँ।
INVALID_SERVICE या INVALID_ZONE: नाम में टाइपो है। मान्य नाम firewall-cmd --get-services और --get-zones से देखें।
पोर्ट खुला होने पर भी कस्टम पोर्ट पर SSH अस्वीकार होता है: SELinux को पोर्ट की जानकारी होनी चाहिए। semanage port -a -t ssh_port_t -p tcp 2222 चलाएँ (पहले policycoreutils-python-utils इंस्टॉल करें), firewalld में पोर्ट खोलें और sshd रीस्टार्ट करें।
एक्सेस खो गया: क्लाइंट एरिया से VPS कंसोल इस्तेमाल करें, फिर firewall-cmd --permanent --add-service=ssh और firewall-cmd --reload चलाएँ। firewall-cmd --panic-on से बचें, जो आपके सत्र समेत सारा ट्रैफ़िक रोक देता है।
🔒 आपका VPS अब वही उजागर करता है जो आप चुनें, और SSH आपकी पहुँच में रहता है!