SSD Nodes Learn Hosting plans →
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-09-04

Rocky किंवा AlmaLinux VPS वर firewalld वापरण्याची पद्धत

Rocky किंवा AlmaLinux VPS वर firewalld ने SSH उघडा, web port परवानगी द्या, port बंद करा आणि reboot नंतर नियम टिकवा. zones व --permanent मधील सापळा समजून घ्या.

firewalld म्हणजे काय आणि Rocky व AlmaLinux मध्ये ते का समाविष्ट असते

firewalld हे Rocky Linux, AlmaLinux आणि Red Hat Enterprise Linux (RHEL) च्या इतर rebuilds मध्ये default ने install केलेले firewall manager आहे. दोन्ही distributions ने हा default स्वतः निवडलेला नसून तो वारशाने मिळाला आहे. CentOS ने दिशा बदलल्यानंतर Rocky आणि AlmaLinux ने Red Hat चे काम कसे पुन्हा build केले हे समजल्यावर यामागचे कारण स्पष्ट होते. firewalld स्वतः packets ची तपासणी करत नाही. ते saved configuration ठेवते आणि त्या configuration चे nftables rules मध्ये रूपांतर करते. सर्व्हर online असतानाही firewall-cmd ही एक command वापरून configuration संपादित करता येते. या guide मधील कोणतीही गोष्ट या दोन distributions मध्ये बदलत नाही, कारण Rocky आणि AlmaLinux यांच्यातील वास्तविक फरक firewall मध्ये नसून compatibility promise आणि अजूनही supported असलेल्या CPUs च्या range मध्ये आहेत.

तुम्हाला Ubuntu VPS वर ufw कसे कार्य करते हे आधीच माहीत असल्यास, त्याचे मूलभूत काम तुम्हाला माहीत आहे. firewalld मध्ये ufw मध्ये नसलेल्या दोन संकल्पना आहेत. पहिली म्हणजे zones: packets ज्या named policy नुसार वर्गीकृत केले जातात. दुसरी म्हणजे live rules आणि saved rules यांच्यातील फरक. यासाठी --permanent flag वापरला जातो आणि हेच या tool मधील गोंधळाचे सर्वात मोठे कारण आहे.

खालील प्रत्येक command तुम्ही तुमच्या स्वतःच्या सर्व्हरवर चालवायची आहे. प्रत्येक बदलाची चाचणी दुसऱ्या machine वरून करा, कारण सर्व्हरवर योग्य दिसणारा rule इंटरनेटवरून पाहिल्यावर चुकीचा ठरू शकतो.

इतर कोणतीही कृती करण्यापूर्वी SSH उघडे आहे याची खात्री करा

बहुतेक Rocky आणि AlmaLinux installation मध्ये firewalld आधीपासून स्थापित आणि सुरू असते. त्याच्या उपलब्ध configuration मध्ये SSH ला परवानगी असते. काही minimal cloud images मधून ते काढलेले असते. गृहीत धरण्याऐवजी तपासा.

sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state

firewall-cmd --state चा परिणाम running असा येतो. सेवा थांबलेली असल्यास, इतर प्रत्येक firewall-cmd call ला FirewallD is not running असा प्रतिसाद मिळतो आणि तो non-zero स्थितीसह बंद होतो. एखादी command अजिबात काहीही करत नसल्यासारखी वाटली, तर सर्वप्रथम हे तपासा.

आता सध्या कोणत्या गोष्टींना परवानगी आहे ते पाहा.

sudo firewall-cmd --list-all

प्रत्यक्ष output मध्ये आणखी काही ओळी असतात. येथे महत्त्वाच्या ओळी दिल्या आहेत:

public (active)
  target: default
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  rich rules:

services: ओळीतील ssh मुळे तुमचे session अजूनही कार्यरत आहे. ते नसल्यास, इतर कोणतीही कृती करण्यापूर्वी ते जोडा. SSH rule शिवाय firewall सुरू केल्यास session बंद होईल आणि तुम्हाला पुन्हा server मध्ये प्रवेश करता येणार नाही.

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

target: default याचा अर्थ असा की कोणत्याही rule शी जुळत नसलेले packet ICMP (internet control message protocol) host-prohibited reply सह नाकारले जाते. त्यामुळे बंद port वर connection करण्याचा प्रयत्न करणाऱ्या client ला लगेच No route to host दिसते. Target DROP वर सेट केल्यास server त्याऐवजी शांत राहतो आणि scanners timeout होईपर्यंत प्रतीक्षा करतात.

sudo firewall-cmd --permanent --zone=public --set-target=DROP
sudo firewall-cmd --reload

ही command चालवण्यापूर्वी त्याची किंमत समजून घ्या: DROP मुळे server ping ला प्रतिसाद देणेही थांबवतो. त्यामुळे तुमचे स्वतःचे monitoring देखील शांत होते.

माझा नियम गायब का झाला? --permanent फ्लॅग

firewalld एकाच वेळी दोन configuration ठेवते. runtime configuration म्हणजे kernel सध्या लागू करत असलेली configuration. permanent configuration /etc/firewalld/zones/public.xml मध्ये साठवलेली असते आणि reload किंवा reboot नंतर पुन्हा लागू होते.

--permanent शिवाय दिलेला command फक्त runtime configuration बदलतो. तो लगेच कार्यरत होतो, पण पुढील reload किंवा boot वेळी नाहीसा होतो. --permanent सह दिलेला command file मध्ये लिहितो, पण सध्या कार्यरत असलेल्या configuration मध्ये कोणताही बदल करत नाही. त्यामुळे reload करेपर्यंत port बंद राहतो. यापैकी कोणतेही वर्तन bug नाही. दोन्हीमुळे वापरकर्ते गोंधळतात, कारण command दोन्ही प्रकारे success दाखवतो.

प्रत्येक वेळी ही जोडी लिहा.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

दोन्ही configuration वाचता येतात. त्यामुळे तुम्ही केलेल्या दोन चुकांपैकी कोणती चूक झाली हे सर्वात जलद समजते.

sudo firewall-cmd --list-services
sudo firewall-cmd --permanent --list-services

पहिला command live set दाखवतो. दुसरा saved set दाखवतो. live set मध्ये एखादी service असेल पण saved set मध्ये नसेल, तर पुढील reload वेळी तो नियम नाहीसा होईल. saved set मध्ये एखादी service असेल पण live set मध्ये नसेल, तर तुम्ही reload करणे विसरलात. sudo firewall-cmd --runtime-to-permanent live configuration मधील सर्वकाही saved file मध्ये copy करतो. प्रयोगांच्या सत्रानंतर हे उपयुक्त ठरते.

--reload connection tracking state कायम ठेवतो, त्यामुळे तुमचे SSH session सुरू राहते. --complete-reload kernel modules देखील पुन्हा load करतो आणि तो state गमावतो. त्यामुळे तुमच्यासह सर्व open connection सहसा बंद होतात. साधा reload वापरा.

एक safety net अंगभूत आहे. runtime rule स्वतःहून कालबाह्य होऊ शकतो.

sudo firewall-cmd --add-service=http --timeout=5m

हा rule पाच मिनिटांनंतर स्वतः काढला जातो. तो --permanent सोबत वापरता येत नाही. यामागचा उद्देश हाच आहे: तुम्हाला खात्री नसलेल्या बदलाची चाचणी करण्यासाठी तो वापरता येतो. जुना safety net अधिक चांगला आहे. नियम संपादित करताना दुसरे SSH session उघडे ठेवा. नवीन rules कार्यरत असल्याचे fresh login ने सिद्ध होईपर्यंत ते session बंद करू नका.

Zones आणि VPS वर default zone का महत्त्वाची आहे

Zone म्हणजे trust level जोडलेला permissions चा नामांकित संच. firewalld प्रत्येक incoming packet नेमक्या एका zone मध्ये ठेवते. ते प्रथम packet चा source address प्रत्येक zone च्या sources: list शी जुळवते. कोणताही match न मिळाल्यास, incoming interface ज्या zone शी bound आहे ती zone वापरते. Interface कोणत्याही zone शी bound नसल्यास, packet default zone मध्ये जातो.

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones

एका network interface असलेल्या VPS वर पहिला पर्याय जवळजवळ नेहमीच public असतो आणि तुम्ही वापरणारी हीच एकमेव zone असेल. firewall-cmd सोबत --zone= argument न दिल्यास ते default zone वर कार्य करते. म्हणून या guide मधील प्रत्येक short command zone चे नाव न देता चालते.

दुपार वाया घालवणारी चूक अशी आहे. Interface दुसऱ्या एखाद्या zone शी bound असल्यास, तुमचे rules public मध्ये लागू होतात; पण traffic दुसरीकडे हाताळला जातो. त्यामुळे तुम्ही जोडलेल्या कोणत्याही rule चा परिणाम होत नाही आणि कोणतीही warning मिळत नाही. Binding पाहण्यासाठी --get-active-zones वापरा:

public
  interfaces: eth0

Interface एखाद्या वेगळ्या zone नावाखाली दिसत असल्यास, --zone= वापरून rules त्या zone मध्ये लिहा किंवा interface दुसऱ्या zone मध्ये हलवा.

sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reload

Rocky आणि AlmaLinux वर NetworkManager interfaces व्यवस्थापित करते आणि connection सुरू झाल्यावर zone पुन्हा लागू करते. Reboot नंतर तुमचे बदल रद्द होऊ नयेत यासाठी तेथेही zone सेट करा. पहिल्या command मधून connection name घ्या, कारण ते device name सारखेच असेलच असे नाही.

sudo nmcli connection show
sudo nmcli connection modify "System eth0" connection.zone public

Source matching ला interface matching पेक्षा प्राधान्य मिळते. त्यामुळे एका address साठी वेगळी policy लागू करता येते. अंगभूत trusted zone सर्वकाही स्वीकारते.

sudo firewall-cmd --permanent --zone=trusted --add-source=203.0.113.10/32
sudo firewall-cmd --reload

याबाबत सावध रहा. त्या address साठी server वरील प्रत्येक port उघडतो. यात तुम्ही private समजत असलेला database देखील येतो. एका host साठी नव्हे, तर एका port साठी नियम हवा असल्यास rich rule वापरा.

firewalld service म्हणजे काय?

Service म्हणजे XML फाइलच्या स्वरूपात वितरित केलेला ports चा नामांकित संच. --add-service=https 443/tcp उघडतो, कारण /usr/lib/firewalld/services/https.xml https म्हणजे काय ते परिभाषित करतो.

sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=https

नावामागे असलेले ports --info-service दाखवतो:

https
  ports: 443/tcp

नाव उपलब्ध असल्यास ते वापरा. सहा महिन्यांनंतर --list-all मध्ये ते स्पष्टपणे समजते. Cockpit सारखी packages स्वतःची service file install करतात. कोणतीही definition नसलेल्या गोष्टींसाठी --add-port वापरा.

लक्षात ठेवण्यासारखी मर्यादा अशी आहे: ssh service म्हणजे 22/tcp आणि त्याव्यतिरिक्त काहीही नाही. सर्व्हरवरील SSH access hardening करताना तुम्ही SSH दुसऱ्या port वर हलवला असेल, तर --add-service=ssh तुम्ही प्रत्यक्षात वापरत असलेला port उघडत नाही.

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

RHEL rebuild मध्ये त्या दारावर आणखी एक lock असतो. SELinux (security-enhanced Linux) port numbers ला labels लावतो. sshd ला त्याच्या labels च्या बाहेरील port वर bind करता येत नाही. त्यामुळे ते सुरू होण्यास नकार देते आणि log मध्ये error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. असे दिसते. आधी port ला label द्या.

sudo dnf install -y policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222

सध्या कोणते पोर्ट खुले आहेत हे कसे पाहावे?

sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
sudo nft list table inet firewalld | head -n 40

पहिल्या दोन कमांडमध्ये firewalld च्या मते असलेली स्थिती दिसते. तिसरी कमांड kernel मध्ये प्रत्यक्ष असलेले नियम वाचते. हे नियम firewalld च्या मालकीच्या table मध्ये असतात. दोन्हींचे परिणाम सारखे असावेत.

यापैकी कोणतीही गोष्ट पुरावा नाही. दुसऱ्या मशीनवरून चाचणी करा:

nc -zv 203.0.113.20 443

ही चाचणी सर्व्हरवरच चालवू नका. firewalld loopback interface वरून येणारी प्रत्येक विनंती स्वीकारतो. त्यामुळे तुमचे नियम काहीही असले तरी curl http://localhost:8080 यशस्वी होते. या चाचणीवरून सेवा सुरू आहे हे समजते. मात्र firewall बद्दल काहीही समजत नाही.

वेब पोर्टला अनुमती द्या

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

शेवटच्या command मध्ये आता आधीच्या नोंदींसोबत http https देखील दिसला पाहिजे. साइट अजूनही प्रतिसाद देत नसेल, तर firewall ही समस्येचे कारण नसेल. Rule packet ला अनुमती देतो. त्यासाठी एखादी process त्या packet साठी listening करत असणे आवश्यक आहे.

sudo ss -tlnp

0.0.0.0:443 किंवा *:443 म्हणून दिसणारा socket कोणत्याही address कडून connections स्वीकारतो. 127.0.0.1:443 म्हणून दिसणारा socket केवळ loopback वर प्रतिसाद देतो. कोणताही firewall rule त्याला बाहेरून reachable करू शकत नाही. Linux वरील ports आणि listening sockets मध्ये हा फरक अधिक तपशीलाने स्पष्ट केला आहे.

पोर्ट पुन्हा कसा बंद करायचा?

sudo firewall-cmd --permanent --remove-service=http
sudo firewall-cmd --reload

--permanent नियम येथेही लागू होतो आणि या दिशेने त्याचे परिणाम अधिक गंभीर असतात. एखादी सेवा फक्त runtime मधून काढल्यास पोर्ट बंद असल्यासारखा दिसतो. मात्र पुढील reload किंवा reboot वेळी saved file मधून तो पुन्हा उघडतो. तुम्ही केलेली तपासणी यशस्वी झाल्यामुळे ही त्रुटी तुमच्या लक्षात येणार नाही.

कधीही अस्तित्वात नसलेली गोष्ट काढण्याचा प्रयत्न केल्यास Warning: NOT_ENABLED: http असे छापले जाते आणि exit status तरीही 0 राहतो. तीच गोष्ट दोनदा add केल्यास Warning: ALREADY_ENABLED: http असे छापले जाते. दोन्ही सुरक्षित आहेत. मात्र चुकीचे spell केलेले नाव वेगळे आहे: Error: INVALID_SERVICE याचा अर्थ firewalld कडे त्या नावाची definition नाही आणि कोणताही बदल करण्यात आलेला नाही.

तुमच्या --list-all मध्ये cockpit दिसत असेल आणि तुम्ही port 9090 वरील Cockpit web console वापरत नसाल, तर ते काढून टाका. प्रत्येक open port ही patched ठेवावी लागणारी सेवा असते. ज्या सेवा ठेवायच्या आहेत त्यांच्यासाठी dnf-automatic timer वर security updates install करू शकते, त्यामुळे हे काम तुम्हाला स्वतः लक्षात ठेवण्यावर अवलंबून राहत नाही. मात्र patch install करणे आणि तो लागू होणे एकच गोष्ट नाही. Updates लागू झाल्यानंतर needs-restarting अजूनही जुन्या libraries वापरत असलेल्या सेवा दाखवते.

एका source address साठी port मर्यादित करा

Rich rules हा विस्तृत प्रकार आहे. साध्या service name ने अपेक्षित नियम व्यक्त करता येत नाही तेव्हा त्याचा वापर करा. SSH ला एका कार्यालयीन address पर्यंत मर्यादित करण्यासाठी दोन commands लागतात. यातील दुसरा command अनेकदा विसरला जातो.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

Zone म्हणजे permissions चा संच आहे. ती पहिल्या match नंतर थांबणारी क्रमांकित यादी नाही. Rich rule एका address साठी accept जोडतो. तो कोणालाही deny करत नाही. ssh अजूनही services: ओळीत असल्यास, संपूर्ण internet ला port 22 पर्यंत पोहोचता येते आणि rich rule मुळे मोजता येणारा कोणताही बदल होत नाही. Broad entry काढून टाका. अन्यथा narrow rule केवळ दिखाऊ ठरतो.

ज्या port साठी service name उपलब्ध नाही, त्यासाठी port चे नाव स्पष्टपणे द्या.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="5432" protocol="tcp" accept'

गोंगाट करणाऱ्या network ला drop करून त्याची नोंद ठेवायची असल्यास, action च्या आधी log element ठेवा. Rich rule language मध्ये अपेक्षित क्रम हाच आहे.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" log prefix="fw-drop " level="info" limit value="3/m" drop'
sudo firewall-cmd --reload
sudo journalctl -k -g fw-drop

limit value मुळे packets चा पूर journal भरून टाकत नाही. SSH ला एका address पर्यंत मर्यादित करण्यापूर्वी तो address स्थिर आहे याची खात्री करा. बदलणारा IP address असलेले home connection वापरत असल्यास तो बदललेल्या दिवशी तुम्ही स्वतःला access पासून बाहेर लॉक करू शकता. त्यामुळे provider च्या console access ची चाचणी आधी करून ती कार्यरत असल्याची खात्री करा.

ufw कमांड आणि त्यांचे firewall-cmd समतुल्य

साधने वेगळी आहेत, पण कामे तीच आहेत. प्रत्येक --permanent ओळीनंतर sudo firewall-cmd --reload आवश्यक आहे. अशा यादीत हा एकमेव भाग दाखवता येत नाही.

  • sudo ufw enable चे रूपांतर sudo systemctl enable --now firewalld मध्ये होते
  • sudo ufw disable चे रूपांतर sudo systemctl disable --now firewalld मध्ये होते
  • sudo ufw status verbose चे रूपांतर sudo firewall-cmd --list-all मध्ये होते
  • sudo ufw allow OpenSSH चे रूपांतर sudo firewall-cmd --permanent --add-service=ssh मध्ये होते
  • sudo ufw allow 443/tcp चे रूपांतर sudo firewall-cmd --permanent --add-port=443/tcp मध्ये होते
  • sudo ufw delete allow 443/tcp चे रूपांतर sudo firewall-cmd --permanent --remove-port=443/tcp मध्ये होते
  • sudo ufw allow from 203.0.113.10 to any port 22 चे रूपांतर वर दाखवलेल्या rich rule मध्ये होते
  • sudo ufw reload चे रूपांतर sudo firewall-cmd --reload मध्ये होते
  • sudo ufw default deny incoming हे public zone च्या वर्तनानुसार आधीपासूनच योग्य आहे, तर --set-target=DROP ही त्याची silent आवृत्ती आहे
  • sudo ufw logging on चे रूपांतर sudo firewall-cmd --set-log-denied=all मध्ये होते

एक फरक स्पष्टपणे लक्षात घ्यावा. ufw क्रमांकित यादी ठेवते आणि तुम्ही rule ला position 1 वर insert करू शकता. firewalld मध्ये rule numbers नसतात. त्यामुळे "हा rule प्रथम ठेवा" याचा येथे काही अर्थ नाही. दोन firewalld entries परस्परविरोधी वाटत असतील, तर व्यापक accept लागू होतो, कारण set मध्ये deny करणारे काहीही नाही. व्यापक entry तुम्हालाच remove करावी लागते.

माझे Docker container firewall बंद दिसत असतानाही का पोहोचण्याजोगे आहे?

कारण published container port तुमच्या zone नियंत्रित करत असलेल्या firewall च्या भागापर्यंत पोहोचतच नाही. docker run -d -p 8080:80 nginx Docker ला स्वतःचे NAT (network address translation) आणि forwarding नियम लिहिण्यास सांगते. 8080 वर आलेले packet rewrite करून container कडे पुढे route केले जाते. त्यामुळे ते host कडे deliver न होता forward केले जाते. तुमच्या zone मधील services: आणि ports: ओळी host कडे deliver होणाऱ्या packets वर लागू होतात. Docker चे नियम forward path नियंत्रित करतात आणि ते packets स्वीकारतात.

परिणामी, sudo firewall-cmd --list-all मध्ये port 8080 दिसत नाही, तरी दुसऱ्या मशीनवरील nc -zv 203.0.113.20 8080 त्याला connect होते. Docker ने कोणते नियम install केले ते पाहा:

sudo iptables -t nat -L DOCKER -n

याचे निराकरण publish flag मध्ये आहे. Port ला loopback वर bind करा आणि त्यापुढे reverse proxy ठेवा.

docker run -d -p 127.0.0.1:8080:80 nginx

आता container server वर curl http://127.0.0.1:8080 ला प्रतिसाद देतो आणि बाहेरून आलेल्या कोणत्याही विनंतीला प्रतिसाद देत नाही. Ubuntu वापरकर्त्यांना हीच अडचण येते. तिचे वर्णन Docker containers थेट ufw च्या पुढे ports publish का करतात येथे केले आहे. Rocky आणि AlmaLinux च्या base repositories मध्ये उपलब्ध असलेला rootful Podman देखील त्याच NAT पद्धतीने ports publish करतो. त्यामुळे zone list वर विश्वास ठेवण्याऐवजी दुसऱ्या मशीनवरून चाचणी करा. हाच overlap म्हणजे या distributions वर Docker Engine install करणे यासाठी काही अतिरिक्त steps का आवश्यक असतात, याचेही कारण आहे. सुरुवातीला Podman कडे docker command आधीपासून असते.

रीबूटनंतरही कार्यरत ठेवणे आणि दिसणाऱ्या त्रुटी

sudo systemctl is-enabled firewalld
sudo systemctl status firewalld

enabled आणि active (running) हेच अपेक्षित परिणाम आहेत. firewall कार्यरत असला, पण enable नसला, तर तो पहिल्या reboot पर्यंतच संरक्षण देतो. नवीन VPS वरच्या पहिल्या दहा मिनिटांत करावयाच्या तपासणीच्या यादीत हा तपास असला पाहिजे. त्याच यादीत SSH keys आणि updates देखील असतात.

Raw nftables commands आणि firewalld एकत्र वापरू नका. firewalld कडे inet firewalld नावाचा table असतो. sudo nft flush ruleset तो delete करतो. त्यानंतर server सर्व network traffic साठी खुला होतो. तरीही firewall-cmd --list-all तुमची अपेक्षित configuration दाखवते, कारण firewalld kernel मध्ये प्रत्यक्ष असलेले नियम नव्हे, तर त्याला माहिती असलेली configuration दाखवतो. sudo firewall-cmd --reload rules पुन्हा install करतो. Rules firewall-cmd ने लिहा, म्हणजे reload नंतर ते पुन्हा लागू होतील.

एका server वर दोन firewall managers. firewalld च्या बाजूला ufw किंवा iptables-services install केल्यास, एकमेकांच्या configuration ची माहिती नसलेले दोन programs rules लिहितात. कोणत्या service ने शेवटी सुरुवात केली यावर अंतिम configuration अवलंबून राहते. एकच manager निवडा. Rocky आणि AlmaLinux वर distribution support असलेला manager firewalld आहे.

Server च्या पुढे असलेला provider firewall. अनेक VPS panels मध्ये स्वतंत्र network firewall असतो. --list-all एखादा port open दाखवत असेल, पण बाहेरून येणारे connection तरीही fail होत असेल, तर server वर काहीही बदलण्यापूर्वी panel तपासा. याउलटही असेच होते: firewalld packet reject करत असताना panel मधील open rule मुळे काही परिणाम होत नाही.

sudo शिवाय firewall-cmd चालवणे. प्रत्येक बदलासाठी root आवश्यक आहे. root अधिकारांशिवाय authorization check request नाकारतो आणि काहीही बदलले जात नाही. त्यामुळे command दुर्लक्षित झाल्यासारखे प्रथमदर्शनी दिसते.

दररोजच्या बहुतेक कामांसाठी सहा commands पुरेसे आहेत: स्थिती वाचण्यासाठी --list-all, एखादी गोष्ट उघडण्यासाठी --permanent --add-service किंवा --add-port, ती बंद करण्यासाठी --permanent --remove-service, saved file लागू करण्यासाठी --reload आणि प्रयोगांची फेरी पूर्ण झाल्यावर --runtime-to-permanent. zone public आहे, flag --permanent आहे आणि विश्वासार्ह तपासणी दुसऱ्या machine वरूनच करता येते.

FAQ

रीबूटनंतर माझा firewalld नियम का नाहीसा झाला?

नियम फक्त runtime configuration मध्ये जोडला गेला. sudo firewall-cmd --add-service=http त्वरित लागू होते आणि पुढील reload किंवा boot वेळी काढून टाकली जाते, कारण /etc/firewalld/zones/public.xml मधील जतन केलेल्या configuration मध्ये कोणताही बदल केला नव्हता. --permanent जोडा आणि त्यानंतर sudo firewall-cmd --reload चालवा. आधी manually जोडलेले नियम जतन करण्यासाठी sudo firewall-cmd --runtime-to-permanent चालवा. यामुळे live set जतन केलेल्या file मध्ये copy केला जातो.

--permanent वापरून नियम जोडल्यानंतर काहीही का बदलत नाही?

कारण --permanent file लिहिते आणि चालू firewall मध्ये कोणताही बदल करत नाही. sudo firewall-cmd --reload जतन केलेली configuration kernel मध्ये load करेपर्यंत port बंदच राहतो. sudo firewall-cmd --list-services आणि sudo firewall-cmd --permanent --list-services यांची तुलना करा. जतन केलेल्या list मध्ये live list मध्ये नसलेली entry असल्यास, आवश्यक असलेली गोष्ट reload हीच आहे.

--add-service किंवा --add-port यापैकी कोणता वापरावा?

तुम्ही चालवत असलेल्या सेवेसाठी एखादे name उपलब्ध असल्यास --add-service वापरा. यात उद्देश स्पष्ट होतो आणि त्या name मध्ये नेमके कोणते ports समाविष्ट आहेत हे sudo firewall-cmd --info-service=https दाखवते. तुमची service परिभाषित करणारे कोणतेही name उपलब्ध नसल्यास किंवा ती non-standard port वर listening करत असल्यास --add-port वापरा. ssh service मध्ये फक्त 22/tcp असते. त्यामुळे SSH 2222 वर हलवले असल्यास --add-port=2222/tcp सोबत त्या port साठी SELinux label आवश्यक आहे.

firewall-cmd port बंद असल्याचे दाखवत असताना माझा Docker container reachable का असतो?

Published port Docker च्या स्वतःच्या NAT rules द्वारे rewrite करून container कडे forward केला जातो. त्यामुळे packet host कडे deliver होत नाही. Zone मधील service आणि port lists मध्ये फक्त host कडे deliver झालेले packets समाविष्ट असतात. त्यामुळे --list-all काहीही दाखवत नसतानाही container इंटरनेटवरून प्रतिसाद देतो. docker run -d -p 127.0.0.1:8080:80 nginx वापरून port फक्त loopback वर publish करा आणि त्यासमोर reverse proxy ठेवा.

firewalld ऐवजी Rocky Linux वर ufw install करू शकतो का?

एकाच server वर दोन firewall managers एकमेकांच्या configuration ची माहिती न घेता rules लिहितात. कोणती configuration टिकून राहील हे शेवटी कोणती service सुरू झाली यावर अवलंबून असते. Rocky Linux आणि AlmaLinux वर firewalld हे supported tool आहे. ते आधीच installed असते आणि ufw ज्या nftables backend वर काम करेल त्याच backend चे संचालन करते. Default zone आणि --permanent flag एकदा समजून घेतल्यावर हे संपूर्ण tool वापरता येते.