SSD Nodes Learn Hosting plans →
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-09-04

Rocky లేదా AlmaLinux VPSలో firewalld ఎలా వాడాలి

Rocky లేదా AlmaLinuxలో SSH తెరవడం, web port అనుమతించడం, ఒక port మూసివేయడం, reboot తర్వాత rules నిలవడం నేర్చుకోండి. zones మరియు --permanent trap వివరంగా.

firewalld అంటే ఏమిటి, Rocky మరియు AlmaLinux దాన్ని ఎందుకు విడుదల చేస్తాయి

firewalld అనేది Rocky Linux, AlmaLinux మరియు Red Hat Enterprise Linux (RHEL) యొక్క ఇతర rebuilds లో default గా install అయ్యే firewall manager. రెండు distributions కూడా దాన్ని స్వయంగా ఎంచుకోలేదు; ఆ default ను వారసత్వంగా పొందాయి. CentOS దిశ మార్చిన తర్వాత Rocky మరియు AlmaLinux, Red Hat పనిని ఎలా rebuild చేయడం ప్రారంభించాయో తెలుసుకుంటే ఇది మరింత స్పష్టమవుతుంది. firewalld స్వయంగా packets ను inspect చేయదు. ఇది ఒక saved configuration ను నిర్వహించి, ఆ configuration ను nftables rules గా మారుస్తుంది. Server online లో ఉన్నప్పుడే ఒక command, firewall-cmd, ద్వారా దీన్ని edit చేయవచ్చు. ఈ guide లోని ఏ విషయం కూడా ఈ రెండు distributions మధ్య మారదు. ఎందుకంటే Rocky మరియు AlmaLinux ను వాస్తవంగా వేరు చేసే విషయాలు compatibility promise మరియు ఇప్పటికీ support చేసే CPUs పరిధి; firewall కాదు.

మీకు ఇప్పటికే Ubuntu VPS లో ufw ఎలా పనిచేస్తుందో తెలుసు అయితే, దీని పని మీకు తెలుసు. ufw లో లేని రెండు ఆలోచనలను firewalld జోడిస్తుంది. మొదటిది zones: packets ను వర్గీకరించే named policy. రెండవది live rules మరియు saved rules మధ్య విభజన. దీనికి సంబంధించినది --permanent flag, అలాగే ఈ tool లో గందరగోళానికి ప్రధాన కారణం కూడా ఇదే.

క్రింద ఉన్న ప్రతి అంశం మీరు మీ స్వంత server పై అమలు చేసే command. ప్రతి మార్పును రెండవ machine నుంచి test చేయండి. ఎందుకంటే server పై సరైనదిగా కనిపించే rule, internet నుంచి చూసినప్పుడు తప్పుగా ఉండవచ్చు.

మీరు మరేదైనా చేయడానికి ముందు SSH ను తెరవండి

చాలా Rocky మరియు AlmaLinux ఇన్‌స్టాలేషన్‌లలో firewalld ఇప్పటికే ఇన్‌స్టాల్ అయి, నడుస్తూ ఉంటుంది. డిఫాల్ట్‌గా అందించే configuration SSH ను అనుమతిస్తుంది. కొన్ని minimal cloud images లో firewalld తొలగించి ఉండవచ్చు. ఊహించకుండా ముందుగా తనిఖీ చేయండి.

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

firewall-cmd --state, running ను ప్రింట్ చేస్తుంది. service ఆపి ఉంటే, ప్రతి ఇతర firewall-cmd call FirewallD is not running ను చూపించి non-zero status తో ముగుస్తుంది. ఏదైనా command అసలు ఏమీ చేయనట్లు కనిపించినప్పుడు ముందుగా తనిఖీ చేయాల్సింది ఇదే.

ఇప్పుడు ప్రస్తుతం ఏవి అనుమతించబడ్డాయో చూడండి.

sudo firewall-cmd --list-all

నిజమైన output లో మరికొన్ని 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 --reload

ఏ rule కు సరిపోని packet ను ICMP (internet control message protocol) host-prohibited reply తో తిరస్కరిస్తారని target: default అర్థం. అందువల్ల మూసివేసిన port ను ఆశ్రయించే client కు వెంటనే No route to host కనిపిస్తుంది. target ను DROP గా సెట్ చేస్తే server మౌనంగా ఉంటుంది. అప్పుడు scanners timeout కోసం వేచి ఉంటాయి.

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

దాన్ని run చేసే ముందు దాని ప్రభావాన్ని అర్థం చేసుకోండి: DROP server ను ping కు కూడా స్పందించకుండా ఆపుతుంది. అందువల్ల మీ monitoring కూడా ఆగిపోతుంది.

నా rule ఎందుకు మాయమైంది? --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 ప్రస్తుతం అమలులో ఉన్న setను ప్రింట్ చేస్తుంది. రెండవది saved setను ప్రింట్ చేస్తుంది. Live setలో service ఉండి, saved setలో అది లేకపోతే, తదుపరి reload సమయంలో ఆ rule తొలగిపోతుంది. Saved setలో rule ఉండి, live setలో లేకపోతే, మీరు reload చేయడం మర్చిపోయారు. sudo firewall-cmd --runtime-to-permanent live configurationలోని ప్రతిదాన్ని saved fileలోకి కాపీ చేస్తుంది. ప్రయోగాలతో కూడిన session తర్వాత ఇది ఉపయోగకరంగా ఉంటుంది.

--reload connection tracking stateను అలాగే ఉంచుతుంది. అందువల్ల మీ SSH session కొనసాగుతుంది. --complete-reload kernel modulesను కూడా reload చేస్తుంది, అలాగే ఆ stateను కోల్పోతుంది. సాధారణంగా దీనివల్ల మీ SSH sessionతో సహా తెరిచి ఉన్న ప్రతి connection ముగుస్తుంది. సాధారణ reloadను ఉపయోగించండి.

ఒక safety net అంతర్గతంగా అందుబాటులో ఉంది. Runtime rule తనంతట తానే గడువు ముగిసిన తర్వాత తొలగిపోవచ్చు.

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

ఆ rule ఐదు నిమిషాల తర్వాత తనంతట తానే తొలగిపోతుంది. దీన్ని --permanent తో కలిపి ఉపయోగించలేరు. అదే దీని ఉద్దేశం: మీకు సందేహంగా ఉన్న మార్పును పరీక్షించడానికి ఇది ఉపయోగపడుతుంది. పాత safety net మరింత మంచిది. Rulesను సవరించేటప్పుడు రెండవ SSH sessionను తెరిచి ఉంచండి. కొత్త rules పనిచేస్తున్నాయని తాజా login నిర్ధారించే వరకు దాన్ని మూసివేయవద్దు.

Zones మరియు VPSలో default zone మాత్రమే ఎందుకు ముఖ్యమో

zone అనేది trust level కు అనుసంధానించిన permissions యొక్క పేరుగల సమూహం. firewalld ప్రతి incoming packet ను ఖచ్చితంగా ఒక zone లోకి ఉంచుతుంది. ముందుగా అది packet యొక్క source address ను ప్రతి zone లోని sources: list తో సరిపోలుస్తుంది. ఏదీ సరిపోలకపోతే, incoming interface కు bind చేసిన zone ను ఉపయోగిస్తుంది. interface ఏ zone కు bind కాకపోతే, 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 పై పని చేస్తుంది. అందుకే ఈ guide లోని ప్రతి చిన్న command ను zone పేరు ఇవ్వకుండా అమలు చేయవచ్చు.

ఒక మధ్యాహ్నం సమయాన్ని వృథా చేసే సాధారణ సమస్య ఇది. interface వేరే zone కు bind అయి ఉంటే, మీ rules public లోకి వెళ్తాయి. కానీ traffic వేరే zone ద్వారా నిర్వహించబడుతుంది. అందువల్ల మీరు జోడించిన దేనికీ ప్రభావం ఉండదు. ఎలాంటి warning కూడా కనిపించదు. --get-active-zones binding ను చూపిస్తుంది:

public
  interfaces: eth0

interface వేరే zone name కింద కనిపిస్తే, --zone= తో rules ను ఆ zone లోనే రాయండి లేదా interface ను మార్చండి.

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 ఇవ్వవచ్చు. Built-in trusted zone ప్రతిదీ అనుమతిస్తుంది.

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

దీనిని జాగ్రత్తగా ఉపయోగించండి. ఆ address కు serverలోని ప్రతి port ను తెరుస్తుంది. మీరు private అని భావించిన database port కూడా అందులో ఉంటుంది. ఒక 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 మాత్రమే; మరే ఇతర port కాదు. సర్వర్‌పై SSH access ను harden చేసినప్పుడు మీరు SSH ను వేరే port కు మార్చి ఉంటే, --add-service=ssh మీరు వాస్తవంగా ఉపయోగిస్తున్న port ను తెరవదు.

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

RHEL rebuild లో ఆ port పై రెండవ నియంత్రణ కూడా ఉంటుంది. SELinux (security-enhanced Linux) port numbers కు labels కేటాయిస్తుంది. దాని labels పరిధికి వెలుపల ఉన్న port కు sshd 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

ప్రస్తుతం ఏవి open గా ఉన్నాయో ఎలా చూడాలి?

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

మొదటి రెండు ఆదేశాలు firewalld దృష్టిలో ఉన్న స్థితిని చూపిస్తాయి. మూడవది kernel ప్రస్తుతం కలిగి ఉన్న rules ను చదువుతుంది; ఇది firewalld నిర్వహించే table లోని rules ను చూపిస్తుంది. ఈ మూడు ఫలితాలు ఒకే విధంగా ఉండాలి.

అయినా ఇవేవీ తుది నిర్ధారణ కావు. మరో machine నుంచి పరీక్షించండి:

nc -zv 203.0.113.20 443

ఈ పరీక్షను server పైనే అమలు చేయవద్దు. loopback interface ద్వారా వచ్చే ప్రతిదాన్ని firewalld అనుమతిస్తుంది. అందువల్ల మీ rules ఎలా ఉన్నా curl http://localhost:8080 విజయవంతమవుతుంది. ఆ పరీక్ష service పనిచేస్తోందని మాత్రమే నిర్ధారిస్తుంది. firewall గురించి అది ఏమీ చెప్పదు.

వెబ్ port ను అనుమతించండి

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 ను కూడా చూపాలి. site ఇప్పటికీ స్పందించకపోతే, firewall మీ సమస్య కాకపోవచ్చు. ఒక rule packet ను అనుమతిస్తుంది. అయితే దాన్ని స్వీకరించడానికి ఒక process listening లో ఉండాలి.

sudo ss -tlnp

0.0.0.0:443 లేదా *:443 గా చూపబడిన socket ఏ address నుంచైనా connections ను స్వీకరిస్తుంది. 127.0.0.1:443 గా చూపబడినది loopback పై మాత్రమే స్పందిస్తుంది. ఏ firewall rule కూడా దాన్ని బయట నుంచి చేరుకోగలిగేలా చేయదు. 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 కనిపిస్తుంది. అయినప్పటికీ command exit code 0తో ముగుస్తుంది. ఒకే అంశాన్ని రెండుసార్లు జోడిస్తే Warning: ALREADY_ENABLED: http కనిపిస్తుంది. ఈ రెండు సందర్భాలు సురక్షితమైనవే. తప్పుగా టైప్ చేసిన పేరు మాత్రం వేరు. Error: INVALID_SERVICE అంటే ఆ పేరుకు firewalld వద్ద ఎలాంటి definition లేదని అర్థం. అందువల్ల ఏ మార్పూ జరగలేదు.

మీ --list-all లో cockpit కనిపిస్తే, మీరు port 9090పై Cockpit web console ఉపయోగించకపోతే దాన్ని తొలగించండి. ప్రతి open port కోసం సంబంధిత service ను patch చేస్తూ ఉండాలి. మీరు ఉంచాలని నిర్ణయించిన services కోసం dnf-automatic ఒక timer ద్వారా security updates ను install చేయగలదు, కాబట్టి ఆ పని మీకు గుర్తుండటంపై ఆధారపడదు. అయితే patch ను install చేయడం, దాన్ని అమలు చేయడం ఒకటే కాదు. Updates install అయిన తర్వాత కూడా ఏ services పాత libraries ను ఉపయోగిస్తున్నాయో needs-restarting చూపిస్తుంది.

ఒక port ను ఒకే source address కు పరిమితం చేయడం

సాధారణ service name తో అవసరమైన నియమాన్ని వ్యక్తపరచలేనప్పుడు rich rules ఉపయోగించాలి. SSH ను ఒకే office address కు పరిమితం చేయడానికి రెండు commands అవసరం. వాటిలో రెండవదాన్ని చాలామంది మరచిపోతారు.

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: 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 చేసి, దాని record ను ఉంచాలంటే 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 version.
  • sudo ufw logging on ను sudo firewall-cmd --set-log-denied=all గా మార్చాలి

ఒక తేడాను స్పష్టంగా చెప్పాలి. ufw సంఖ్యలతో కూడిన జాబితాను నిర్వహిస్తుంది. అందులో మీరు ఒక rule ను position 1 వద్ద చేర్చవచ్చు. firewalld లో rule numbers ఉండవు. అందువల్ల “ఈ rule ను మొదట ఉంచు” అనే మాటకు ఇక్కడ అర్థం లేదు. రెండు firewalld entries పరస్పరం విరుద్ధంగా కనిపించినప్పుడు broad accept rule గెలుస్తుంది, ఎందుకంటే set లో ఏదీ deny చేయడం లేదు. broad entry ను మీరే తొలగించాలి.

నా firewall మూసివేసినట్లు కనిపిస్తున్నప్పుడు Docker container ఎందుకు అందుబాటులో ఉంది?

Published container port మీ zone నియంత్రించే firewall భాగానికి చేరదు. docker run -d -p 8080:80 nginx ద్వారా Docker తన స్వంత NAT (network address translation) మరియు forwarding నియమాలను రాస్తుంది. 8080పైకి వచ్చే packet మార్చబడిన తర్వాత containerకు పంపబడుతుంది. అందువల్ల అది hostకు deliver కాకుండా forward అవుతుంది. మీ zoneలోని services: మరియు ports: పంక్తులు hostకు deliver అయ్యే packets‌ను నియంత్రిస్తాయి. Forward pathను Docker నియమాలు నియంత్రిస్తాయి, అవి ఆ packets‌ను accept చేస్తాయి.

దీని ఫలితంగా sudo firewall-cmd --list-allలో 8080 port కనిపించని server ఉన్నప్పటికీ, మరో machine నుంచి nc -zv 203.0.113.20 8080కు connection ఏర్పడుతుంది. 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 portలను ufwను దాటి నేరుగా publish చేయడానికి కారణంలో వివరించారు. Rocky మరియు AlmaLinux base repositoriesలో అందించే rootful Podman కూడా portsను ఇదే NAT విధానంతో publish చేస్తుంది. అందువల్ల zone listను నమ్మకుండా మరో machine నుంచి పరీక్షించండి. ఇదే overlap కారణంగా ఈ distributionsలో Docker Engineను install చేయడంకు Ubuntu guideలో లేని కొన్ని అదనపు దశలు అవసరమవుతాయి. మొదటగా docker commandను Podman ఇప్పటికే స్వాధీనం చేసుకుని ఉండవచ్చు.

రీబూట్ తర్వాత కూడా అమలులో ఉండేలా చేయడం, మీరు చూసే లోపాలు

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 దాన్ని తొలగిస్తుంది. అప్పుడు server అన్ని connections కు తెరవబడుతుంది. అయినప్పటికీ firewall-cmd --list-all మీరు ఉద్దేశించిన configuration ను చూపిస్తుంది. ఎందుకంటే firewalld kernel లో ఉన్న configuration ను కాకుండా, తనకు తెలిసిన configuration ను report చేస్తుంది. sudo firewall-cmd --reload rules ను మళ్లీ install చేస్తుంది. Reload తర్వాత కూడా rules తిరిగి రావాలంటే వాటిని firewall-cmd తో రాయండి.

ఒకే server పై రెండు firewall managers. firewalld పక్కన ufw లేదా iptables-services ను install చేస్తే, ఒకదానికొకటి తెలియకుండా rules రాసే రెండు programs ఉంటాయి. చివరిగా ఏ service start అయిందో దాని ఆధారంగా ఫలితం మారుతుంది. ఒకదానినే ఎంచుకోండి. Rocky మరియు AlmaLinux లో distribution support ఉన్నది firewalld.

Server ముందు ఉన్న provider firewall. అనేక VPS panels లో ప్రత్యేక network firewall ఉంటుంది. --list-all ఒక port open గా చూపించినా, బయట నుంచి connection ఇంకా విఫలమైతే, server లో ఏదైనా మార్చే ముందు panel ను పరిశీలించండి. దీనికి విరుద్ధంగా కూడా ఇదే వర్తిస్తుంది: panel rule open గా ఉన్నా firewalld packet ను reject చేస్తే connection పనిచేయదు.

sudo లేకుండా firewall-cmd నడపడం. ప్రతి మార్పుకూ root అవసరం. అది లేకపోతే authorization check request ను తిరస్కరిస్తుంది, ఏదీ మార్చబడదు. అందువల్ల command పట్టించుకోనట్టుగా కనిపిస్తుంది.

చాలా సందర్భాల్లో ఈ ఆరు commands సరిపోతాయి: స్థితిని చూడటానికి --list-all, ఏదైనా open చేయడానికి --permanent --add-service లేదా --add-port, దాన్ని close చేయడానికి --permanent --remove-service, saved file ను apply చేయడానికి --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 ను అమలు చేయండి. చేతితో ఇప్పటికే జోడించిన నియమాలను నిలుపుకోవాలంటే sudo firewall-cmd --runtime-to-permanent ను అమలు చేయండి. ఇది ప్రస్తుతం అమలులో ఉన్న rule set ను saved file లోకి కాపీ చేస్తుంది.

--permanent తో నియమం జోడించిన తర్వాత ఏ మార్పూ ఎందుకు కనిపించదు?

ఎందుకంటే --permanent file ను మాత్రమే రాస్తుంది. ప్రస్తుతం నడుస్తున్న firewall ను మార్చదు. sudo firewall-cmd --reload saved configuration ను kernel లోకి load చేసే వరకు port మూసే ఉంటుంది. sudo firewall-cmd --list-services ను sudo firewall-cmd --permanent --list-services తో పోల్చండి. saved list లో entry ఉండి, live list లో లేకపోతే, మీకు అవసరమైనది reload.

--add-service లేదా --add-port ఉపయోగించాలా?

మీరు నడుపుతున్న సేవకు పేరు అందుబాటులో ఉంటే --add-service ఉపయోగించండి. ఇది మీ ఉద్దేశాన్ని స్పష్టంగా తెలియజేస్తుంది. ఆ పేరు ఏ ports ను కవర్ చేస్తుందో sudo firewall-cmd --info-service=https ఖచ్చితంగా చూపిస్తుంది. మీ సేవను ఏదీ నిర్వచించకపోతే లేదా అది non-standard port పై listening చేస్తే --add-port ఉపయోగించండి. ssh service అంటే 22/tcp మాత్రమే. అందువల్ల SSH ను 2222 కు మార్చితే --add-port=2222/tcp తో పాటు ఆ port కోసం SELinux label కూడా అవసరం.

firewall-cmd port మూసి ఉందని చూపుతున్నప్పుడు నా Docker container ఎందుకు అందుబాటులో ఉంది?

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 రాస్తాయి. ఏ service చివరగా ప్రారంభమవుతుందో దానిపై ఏ rule set కొనసాగుతుందో ఆధారపడి ఉంటుంది. Rocky Linux మరియు AlmaLinux లో firewalld కు support ఉంది. ఇది ఇప్పటికే install అయి ఉంటుంది. ufw ఉపయోగించే అదే nftables backend ను ఇది నడుపుతుంది. Default zone మరియు --permanent flag ను ఒక్కసారి తెలుసుకుంటే మొత్తం tool ను ఉపయోగించగలరు.