Rocky आणि AlmaLinux VPS वर firewalld कसे वापरावे
Rocky किंवा AlmaLinux VPS वर firewalld वापरून SSH उघडा, web port परवानगी द्या, port बंद करा आणि reboot नंतर नियम टिकवा. zones व --permanent मधील फरक समजून घ्या.
firewalld म्हणजे काय आणि Rocky व AlmaLinux मध्ये ते का दिलेले असते
Rocky Linux, AlmaLinux आणि Red Hat Enterprise Linux (RHEL) च्या इतर rebuilds मध्ये firewalld हा default स्वरूपात install केलेला firewall manager आहे. तो स्वतः packets तपासत नाही. तो saved configuration ठेवतो आणि त्या configuration चे nftables rules मध्ये रूपांतर करतो. सर्व्हर online असतानाही firewall-cmd ही एक command वापरून configuration संपादित करता येते.
तुम्हाला Ubuntu VPS वर ufw कसे कार्य करते हे आधीच माहीत असल्यास, त्यामागील उद्देश तुम्हाला माहीत आहे. ufw मध्ये नसलेल्या दोन संकल्पना firewalld मध्ये आहेत. पहिली म्हणजे zones: packets ज्या named policy मध्ये वर्गीकृत केले जातात ती zone. दुसरी म्हणजे live rules आणि saved rules यांच्यातील फरक. यासाठी --permanent flag वापरला जातो आणि firewalld मधील गोंधळाचे हे सर्वात मोठे कारण आहे.
खालील प्रत्येक command तुम्ही तुमच्या स्वतःच्या सर्व्हरवर चालवायची आहे. प्रत्येक बदलाची चाचणी दुसऱ्या मशीनवरून करा, कारण सर्व्हरवर योग्य दिसणारा rule इंटरनेटवरून पाहिल्यास चुकीचा ठरू शकतो.
इतर कोणतेही काम करण्यापूर्वी SSH उघडा
बहुतेक Rocky आणि AlmaLinux इंस्टॉलेशनमध्ये firewalld आधीपासून उपलब्ध आणि सुरू असतो. वितरित केलेल्या configuration मध्ये SSH ला परवानगी असते. काही minimal cloud images मध्ये firewalld काढलेला असतो. अंदाज न धरता आधी तपासा.
sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --statefirewall-cmd --state हे running दर्शवते. सेवा थांबलेली असल्यास, इतर प्रत्येक firewall-cmd call ला FirewallD is not running उत्तर मिळते आणि तो non-zero सह बंद होतो. एखादा command काहीही करत नसल्यास, सर्वप्रथम हे तपासा.
आता सध्या कोणत्या गोष्टींना परवानगी आहे ते पाहा.
sudo firewall-cmd --list-allप्रत्यक्ष output मध्ये आणखी काही lines असतात. त्यांपैकी महत्त्वाच्या lines या आहेत:
public (active)
target: default
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
rich rules:services: line मधील ssh मुळे तुमचे session अजूनही कार्यरत आहे. ते नसल्यास, इतर कोणतेही काम करण्यापूर्वी ते जोडा. कारण SSH rule नसताना firewall सुरू केल्यास session समाप्त होते आणि तुम्हाला पुन्हा प्रवेश करता येत नाही.
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reloadtarget: default याचा अर्थ, कोणत्याही नियमाशी जुळत नसलेले packet ICMP (internet control message protocol) host-prohibited reply सह नाकारले जाते. त्यामुळे बंद port वर पोहोचणाऱ्या 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 flag
firewalld एकाच वेळी दोन configuration ठेवतो. runtime configuration म्हणजे kernel या क्षणी लागू करत असलेली configuration. permanent configuration म्हणजे /etc/firewalld/zones/public.xml मध्ये साठवलेली configuration, जी 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तुम्ही दोन्ही configurations वाचू शकता. तुम्ही केलेल्या दोन चुकांपैकी कोणती चूक झाली हे शोधण्याचा हा सर्वात जलद मार्ग आहे.
sudo firewall-cmd --list-services
sudo firewall-cmd --permanent --list-servicesपहिली command सध्या लागू असलेला संच दाखवते. दुसरी command साठवलेला संच दाखवते. live set मध्ये एखादी service असेल आणि saved set मध्ये नसेल, तर पुढील reload वेळी तो नियम नाहीसा होईल. saved set मध्ये एखादी service असेल आणि live set मध्ये नसेल, तर तुम्ही reload करणे विसरलात. sudo firewall-cmd --runtime-to-permanent सध्या लागू असलेली संपूर्ण configuration saved file मध्ये कॉपी करते. प्रयोगांचे session पूर्ण झाल्यानंतर हे उपयुक्त ठरते.
--reload connection tracking state कायम ठेवते, त्यामुळे तुमचे SSH session सुरू राहते. --complete-reload kernel modules देखील पुन्हा load करते आणि तो state नष्ट करते. त्यामुळे तुमच्यासह सर्व open connections सहसा बंद होतात. साधा reload वापरा.
एक safety net आधीपासून उपलब्ध आहे. runtime rule आपोआप कालबाह्य होऊ शकतो.
sudo firewall-cmd --add-service=http --timeout=5mहा rule पाच मिनिटांनंतर स्वतःच काढला जातो. तो --permanent सोबत वापरता येत नाही, आणि हाच त्यामागचा उद्देश आहे: खात्री नसलेला बदल तपासण्यासाठी तो वापरता येतो. जुना safety net अधिक चांगला आहे. नियम संपादित करताना दुसरे SSH session उघडे ठेवा. नवीन नियम कार्यरत असल्याचे fresh login ने सिद्ध होईपर्यंत ते बंद करू नका.
Zones आणि VPS वर फक्त default zone का महत्त्वाची आहे
Zone म्हणजे trust level जोडलेला permissions चा नामांकित संच. firewalld प्रत्येक incoming packet नेमक्या एका zone मध्ये ठेवते. ते प्रथम packet चा source address प्रत्येक zone च्या sources: list शी जुळवते. काहीही जुळले नाही, तर 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 असेल. --zone= argument शिवाय firewall-cmd default zone वर काम करते. म्हणून या मार्गदर्शकातील प्रत्येक लहान command zone चे नाव न देता कार्य करते.
दुपारभर वेळ वाया घालवणारी चूक अशी असते. Interface दुसऱ्या एखाद्या zone ला bound असेल, तर तुमचे rules public मध्ये लागू होतात; मात्र traffic दुसरीकडे हाताळले जाते. त्यामुळे तुम्ही जोडलेल्या कोणत्याही rule चा परिणाम होत नाही आणि कोणतीही warning दिसत नाही. Binding पाहण्यासाठी --get-active-zones वापरा:
public
interfaces: eth0Interface वेगळ्या zone नावाखाली दिसत असल्यास, --zone= वापरून rules त्या zone मध्ये लिहा किंवा interface हलवा.
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reloadRocky आणि AlmaLinux वर NetworkManager interfaces व्यवस्थापित करते आणि connection सुरू झाल्यावर zone पुन्हा लागू करते. Reboot मुळे केलेले बदल रद्द होऊ नयेत यासाठी तेथेही zone सेट करा. पहिले command दिल्यावर मिळणारे connection name वापरा, कारण ते device name सारखेच असेल असे क्वचितच घडते.
sudo nmcli connection show
sudo nmcli connection modify "System eth0" connection.zone publicSource matching ला interface matching पेक्षा प्राधान्य मिळते. त्यामुळे एका address साठी वेगळे policy लागू करता येते. अंगभूत trusted zone सर्वकाही स्वीकारते.
sudo firewall-cmd --permanent --zone=trusted --add-source=203.0.113.10/32
sudo firewall-cmd --reloadया zone बाबत काळजी घ्या. त्या address साठी server वरील प्रत्येक port उघडला जातो. त्यात तुम्हाला private वाटत असलेला database देखील समाविष्ट असतो. एका host साठी नव्हे, तर एका port साठी नियम हवा असल्यास rich rule वापरा.
firewalld service म्हणजे काय?
service म्हणजे XML file म्हणून उपलब्ध असलेल्या 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 प्रवेश अधिक सुरक्षित करताना तुम्ही SSH दुसऱ्या port वर हलवला असल्यास, --add-service=ssh तुम्ही प्रत्यक्षात वापरत असलेला port उघडत नाही.
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reloadRHEL rebuild मध्ये त्या port वर आणखी एक सुरक्षा-नियंत्रण असते. 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 कडे प्रत्यक्ष असलेले rules वाचते. हे rules firewalld च्या मालकीच्या table मध्ये असतात. तिन्हींचे परिणाम एकसारखे असावेत.
यापैकी कोणतीही गोष्ट पुरावा नाही. दुसऱ्या मशीनवरून चाचणी करा:
nc -zv 203.0.113.20 443ही चाचणी सर्व्हरवरच चालवू नका. loopback interface वरून येणाऱ्या सर्व विनंत्या firewalld स्वीकारतो. त्यामुळे तुमचे rules काहीही असले तरी 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 ने अद्याप त्या पोर्टवर listening केलेले असणे आवश्यक आहे.
sudo ss -tlnp0.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 प्रदर्शित होते आणि प्रक्रिया तरीही 0 स्थितीने पूर्ण होते. तीच गोष्ट दोनदा जोडल्यास Warning: ALREADY_ENABLED: http प्रदर्शित होते. दोन्ही परिस्थिती सुरक्षित आहेत. मात्र चुकीचे नाव वेगळे आहे: Error: INVALID_SERVICE याचा अर्थ firewalld कडे त्या नावाची कोणतीही definition नाही आणि काहीही बदलले गेलेले नाही.
तुमच्या --list-all मध्ये cockpit दिसत असेल आणि तुम्ही port 9090 वरील Cockpit web console वापरत नसाल, तर तो काढून टाका. प्रत्येक उघडा पोर्ट ही तुम्हाला अद्ययावत ठेवावी लागणारी सेवा असते.
एकाच source address साठी port मर्यादित करा
साध्या service name मधून अपेक्षित नियम व्यक्त करता येत नसतील, तेव्हा rich rules हा विस्तृत पर्याय वापरा. SSH ला एका office 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 --reloadZone म्हणजे permissions चा संच आहे. तो पहिल्या जुळणाऱ्या नियमावर थांबणारी क्रमांकित यादी नाही. Rich rule एका address साठी accept जोडतो. तो कोणालाही deny करत नाही. ssh अजूनही services: line मध्ये असेल, तर संपूर्ण internet ला port 22 पर्यंत पोहोचता येते आणि rich rule मोजता येईल असा कोणताही बदल करत नाही. Broad entry काढून टाका. अन्यथा narrow rule केवळ दिखाऊ ठरतो.
Service name नसलेल्या port साठी 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-droplimit value packets च्या पुरामुळे journal भरून जाणे थांबवते. SSH ला एका address पर्यंत मर्यादित करण्यापूर्वी तो address स्थिर आहे याची खात्री करा. बदलणारा IP address असलेले home connection बदल झाल्याच्या दिवशी तुम्हाला system मधून बाहेर काढू शकते. त्यामुळे provider चा console access आधी तपासून कार्यरत असल्याची खात्री करा.
ufw commands आणि त्यांचे 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हेpubliczone चे आधीपासूनचे वर्तन आहे, आणि--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 लागू होतो, कारण या संचात कोणताही deny नाही. व्यापक entry तुम्हालाच remove करावी लागते.
Docker कंटेनर firewall बंद दिसत असतानाही पोहोचण्याजोगा का असतो?
कारण प्रकाशित केलेला कंटेनर पोर्ट तुमच्या zone च्या नियंत्रणाखालील firewall भागापर्यंत पोहोचतच नाही. docker run -d -p 8080:80 nginx Docker ला स्वतःचे NAT (network address translation) आणि forwarding नियम लिहिण्यास सांगते. 8080 वर आलेले पॅकेट पुन्हा लिहिले जाते आणि कंटेनरकडे पुढे पाठवले जाते. त्यामुळे ते host कडे वितरित न होता forward केले जाते. तुमच्या zone मधील services: आणि ports: ओळी host कडे वितरित होणाऱ्या पॅकेटवर लागू होतात. Forward path साठी Docker चे नियम लागू होतात आणि ते पॅकेट स्वीकारतात.
याचा परिणाम असा होतो की sudo firewall-cmd --list-all मध्ये 8080 पोर्ट दिसत नाही, तरी दुसऱ्या मशीनवरील nc -zv 203.0.113.20 8080 त्याच्याशी जोडले जाते. Docker ने काय स्थापित केले ते पाहा:
sudo iptables -t nat -L DOCKER -nयाचे निराकरण publish flag मध्ये आहे. पोर्टला loopback शी bind करा आणि त्यासमोर reverse proxy ठेवा.
docker run -d -p 127.0.0.1:8080:80 nginxआता कंटेनर सर्व्हरवर curl http://127.0.0.1:8080 ला प्रतिसाद देतो आणि बाहेरून आलेल्या कोणत्याही विनंतीला प्रतिसाद देत नाही. Ubuntu वापरकर्त्यांनाही हीच अडचण येते. तिचे वर्णन Docker कंटेनर ufw ला वळसा घालून थेट पोर्ट का प्रकाशित करतात येथे केले आहे. Rocky आणि AlmaLinux हे base repositories मध्ये उपलब्ध करून देत असलेला rootful Podman देखील त्याच NAT पद्धतीने पोर्ट प्रकाशित करतो. त्यामुळे zone list वर विश्वास ठेवण्याऐवजी दुसऱ्या मशीनवरून चाचणी करा.
रीबूटनंतरही firewall सुरू ठेवणे आणि दिसणाऱ्या त्रुटी
sudo systemctl is-enabled firewalld
sudo systemctl status firewalldenabled आणि active (running) हेच आवश्यक आहे. Firewall सुरू असला पण enable केलेला नसेल, तर पहिल्या reboot पर्यंतच तो संरक्षण देतो. नवीन VPS वर पहिल्या दहा मिनिटांत करावयाच्या तपासण्यांच्या यादीत ही तपासणी SSH keys आणि updates यांच्या शेजारी असावी.
Raw nftables commands आणि firewalld एकत्र वापरू नका. firewalld inet firewalld नावाची table वापरतो. sudo nft flush ruleset ती table हटवतो. त्यानंतर server वरील सर्व traffic साठी प्रवेश खुला होतो. तरीही firewall-cmd --list-all तुमची अपेक्षित configuration दाखवतो, कारण firewalld kernel मध्ये प्रत्यक्ष असलेली configuration नव्हे, तर त्याच्या मते असलेली configuration दाखवतो. sudo firewall-cmd --reload rules पुन्हा स्थापित करतो. Reload नंतरही rules पुन्हा लागू व्हावेत यासाठी ते firewall-cmd वापरून लिहा.
एका server वर दोन firewall managers. firewalld सोबत ufw किंवा iptables-services install केल्यास, एकमेकांना माहिती नसलेले दोन programs rules लिहितात. कोणते rules लागू होतील हे शेवटी कोणती service सुरू झाली यावर अवलंबून राहते. एकच manager निवडा. Rocky आणि AlmaLinux वर distribution support असलेला manager firewalld आहे.
Server च्या पुढे असलेला provider firewall. अनेक VPS panels मध्ये स्वतंत्र network firewall असतो. --list-all एखादा port open दाखवत असेल, पण बाहेरून येणारे connection तरीही fail होत असेल, तर server वर काहीही बदलण्यापूर्वी panel तपासा. उलट परिस्थितीही शक्य आहे: firewalld packet नाकारत असताना panel मधील open rule मुळे काहीही होत नाही.
sudo शिवाय firewall-cmd चालवणे. प्रत्येक बदलासाठी root आवश्यक आहे. root नसल्यास authorization check request नाकारतो आणि कोणताही बदल होत नाही. त्यामुळे पाहता command दुर्लक्षित झाल्यासारखे वाटते.
बहुतेक दिवसांसाठी सहा commands पुरेसे असतात: स्थिती पाहण्यासाठी --list-all, काहीतरी open करण्यासाठी --permanent --add-service किंवा --add-port, ते close करण्यासाठी --permanent --remove-service, saved file लागू करण्यासाठी --reload आणि प्रयोगांची फेरी पूर्ण केल्यानंतर --runtime-to-permanent. Zone public आहे, flag --permanent आहे आणि खात्री करण्याचा एकमेव विश्वसनीय मार्ग म्हणजे दुसऱ्या machine वरून तपासणी करणे.
FAQ
माझा firewalld नियम reboot नंतर का नाहीसा झाला?
नियम फक्त runtime configuration मध्ये जोडला गेला होता. sudo firewall-cmd --add-service=http हा बदल त्वरित लागू करतो आणि पुढील reload किंवा boot वेळी तो काढून टाकला जातो, कारण /etc/firewalld/zones/public.xml मधील saved configuration मध्ये कोणताही बदल झाला नव्हता. --permanent जोडा आणि त्यानंतर sudo firewall-cmd --reload चालवा. तुम्ही आधी manually जोडलेले नियम कायम ठेवण्यासाठी sudo firewall-cmd --runtime-to-permanent चालवा. यामुळे सध्या लागू असलेला संच saved file मध्ये कॉपी होतो.
--permanent वापरून नियम जोडल्यानंतर काहीही का बदलत नाही?
कारण --permanent file मध्ये बदल लिहितो, पण चालू firewall मध्ये बदल करत नाही. sudo firewall-cmd --reload saved configuration kernel मध्ये लोड करेपर्यंत port बंदच राहतो. sudo firewall-cmd --list-services आणि sudo firewall-cmd --permanent --list-services यांची तुलना करा. saved list मध्ये live list मध्ये नसलेली entry असल्यास, आवश्यक असलेला reload राहून गेला आहे.
--add-service किंवा --add-port यापैकी कोणते वापरावे?
तुम्ही चालवत असलेल्या सेवेसाठी नाव उपलब्ध असल्यास --add-service वापरा. यामुळे उद्देश स्पष्ट होतो आणि sudo firewall-cmd --info-service=https त्या नावात समाविष्ट असलेले ports नेमके दाखवतो. कोणत्याही configuration मध्ये तुमची service परिभाषित नसल्यास किंवा ती 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 internet वरून उत्तर देतो. त्याऐवजी docker run -d -p 127.0.0.1:8080:80 nginx वापरून loopback वर publish करा आणि त्याच्या पुढे reverse proxy ठेवा.
firewalld ऐवजी Rocky Linux वर ufw install करू शकतो का?
एकाच server वर दोन firewall managers एकमेकांच्या माहितीसह काम न करता rules लिहितात. कोणता ruleset टिकून राहील हे शेवटी कोणती service सर्वात शेवटी सुरू झाली यावर अवलंबून असते. Rocky Linux आणि AlmaLinux वर firewalld हे supported tool आहे. ते आधीपासून installed असते आणि ufw वापरेल त्याच nftables backend ला ते नियंत्रित करते. Default zone आणि --permanent flag एकदा समजून घेतल्यावर हे संपूर्ण tool वापरता येते.