SSD Nodes Learn 🎉 VPS $5.50/నెల నుండి
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-08-13

Rocky AlmaLinux VPSలో firewalld ప్రాథమికాలు

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

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

firewalld అనేది Rocky Linux, AlmaLinux మరియు Red Hat Enterprise Linux (RHEL) యొక్క ఇతర rebuilds లో default గా ఇన్‌స్టాల్ అయ్యే firewall manager. ఇది స్వయంగా packets ను inspect చేయదు. ఇది saved configuration ను నిర్వహించి, ఆ configuration ను nftables rules గా మారుస్తుంది. ఒకే command, firewall-cmd, ద్వారా server online లో ఉండగానే దాన్ని సవరించవచ్చు.

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

క్రింద ఉన్న ప్రతి command ను మీ స్వంత server పై అమలు చేయాలి. ప్రతి మార్పును రెండవ machine నుంచి పరీక్షించండి. 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 స్థితితో ముగుస్తుంది. ఏదైనా 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 ముగుస్తుంది మరియు మీరు మళ్లీ server లోకి ప్రవేశించలేరు.

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

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

నా rule ఎందుకు మాయమైంది? --permanent flag

firewalld ఒకేసారి రెండు configurations ను నిర్వహిస్తుంది. 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

మీరు రెండు configurations ను చదవవచ్చు. మీరు చేసిన రెండు తప్పుల్లో ఏది జరిగిందో తెలుసుకోవడానికి ఇది వేగవంతమైన మార్గం.

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

మొదటి command live 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 లోకి కాపీ చేస్తుంది. ప్రయోగాలు చేసిన తర్వాత ఇది ఉపయోగకరంగా ఉంటుంది.

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

ఒక safety net అంతర్నిర్మితంగా ఉంటుంది. runtime rule స్వయంగా expire కావచ్చు.

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

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

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

Zone అనేది trust level కు అనుసంధానించబడిన permissions యొక్క పేరుగల సమాహారం. firewalld ప్రతి incoming packet ను ఖచ్చితంగా ఒక zoneలో ఉంచుతుంది. ముందుగా అది packet యొక్క source address ను ప్రతి zone లోని sources: జాబితాతో సరిపోలుస్తుంది. ఏదీ సరిపోలకపోతే, 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లో నిర్వహించబడుతుంది. అందువల్ల మీరు జోడించినదానికి ఎలాంటి ప్రభావం ఉండదు. ఏ హెచ్చరిక కూడా కనిపించదు. --get-active-zones bindingను చూపిస్తుంది:

public
  interfaces: eth0

Interface వేరే zone పేరులో కనిపిస్తే, --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

Interface matching కంటే source 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 కూడా అందులో ఉంటుంది. ఒక 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 లో దీనికి మరో నియంత్రణ ఉంటుంది. SELinux (security-enhanced Linux) port numbers కు labels కేటాయిస్తుంది. ఆ labels పరిధికి వెలుపల ఉన్న port కు bind చేయడానికి sshd అనుమతించబడదు. అందువల్ల అది start కావడానికి నిరాకరిస్తుంది. 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 ను, firewalld నిర్వహించే table లోనివాటిని చదువుతుంది. ఈ మూడింటి ఫలితాలు ఒకేలా ఉండాలి.

అయినా ఇది ఏదీ తుది నిర్ధారణ కాదు. మరొక 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 కూడా దాన్ని బయట నుంచి reachable చేయదు. Linuxలో Ports మరియు listening sockets ఈ తేడాను మరింత వివరంగా వివరిస్తుంది.

మళ్లీ ఒక port ను ఎలా మూసివేయాలి?

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

ఇక్కడ కూడా --permanent నియమమే వర్తిస్తుంది. ఈ దిశలో దాని ప్రభావం మరింత తీవ్రమగా ఉంటుంది. ఒక service ను runtime నుంచి మాత్రమే తొలగిస్తే port మూసివేసినట్లు కనిపిస్తుంది. అయితే తదుపరి reload లేదా reboot సమయంలో saved file నుంచి అది మళ్లీ తెరుచుకుంటుంది. మీరు చేసిన check విజయవంతమైనందున ఈ లోపం గుర్తించబడకపోవచ్చు.

అసలు లేని అంశాన్ని తొలగిస్తే 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 ఉపయోగించనప్పుడు దాన్ని తొలగించండి. తెరిచి ఉన్న ప్రతి port కు మీరు security patches నిర్వహించాలి.

ఒక పోర్ట్‌ను ఒకే source address కు పరిమితం చేయడం

సాధారణ 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 --reload

Zone అనేది permissions సమూహం. మొదటి match వద్ద ఆగిపోయే numbered list కాదు. 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 traffic ను 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 journal ను packets తో నింపకుండా flood ను ఆపుతుంది. 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 ఇప్పటికే 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 అమలవుతుంది, ఎందుకంటే ఆ సమూహంలో ఏదీ deny చేయదు. broad entry ను మీరే తొలగించాలి.

Docker container firewall మూసివున్నట్లు కనిపించినా ఎందుకు చేరుకోగలుగుతున్నాను?

Published container port మీ zone నియంత్రించే firewall భాగానికి చేరదు. docker run -d -p 8080:80 nginx ద్వారా Docker తన సొంత NAT (network address translation) మరియు forwarding నియమాలను రాస్తుంది. 8080పై వచ్చే packet మార్చి containerకు onward route చేయబడుతుంది. అందువల్ల అది hostకు deliver కాకుండా forward అవుతుంది. మీ zoneలోని services: మరియు ports: lines 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కు మాత్రమే సమాధానం ఇస్తుంది. బయటి నుంచి వచ్చే trafficకు సమాధానం ఇవ్వదు. Ubuntu users కూడా ఇదే సమస్యను ఎదుర్కొంటారు; దీన్ని Docker containers portsను ufwను దాటి నేరుగా publish చేయడానికి కారణంలో వివరించారు. Rocky మరియు AlmaLinux base repositoriesలో అందించే rootful Podman కూడా ఇదే NAT విధానంతో portsను publish చేస్తుంది. అందువల్ల zone listను మాత్రమే నమ్మకుండా, మరొక machine నుంచి పరీక్షించండి.

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

sudo systemctl is-enabled firewalld
sudo systemctl status firewalld

enabled మరియు active (running) మీకు కావాల్సినవి. Firewall నడుస్తూ enabled కాకపోతే, మొదటి reboot వరకు మాత్రమే అది రక్షణ ఇస్తుంది. కొత్త VPSలో మొదటి పది నిమిషాల్లో చేయాల్సిన పనుల జాబితాలో, SSH keys మరియు updates పక్కన ఈ తనిఖీ కూడా ఉండాలి.

Raw nftables commands మరియు firewalld ను కలిపి ఉపయోగించవద్దు. firewalld inet firewalld అనే table ను నిర్వహిస్తుంది. sudo nft flush ruleset దాన్ని తొలగిస్తుంది. అప్పుడు server అన్ని incoming traffic కు తెరుచుకుంటుంది. అయినప్పటికీ firewall-cmd --list-all మీరు ఉద్దేశించిన configuration ను చూపిస్తుంది. ఎందుకంటే firewalld kernelలో ఉన్న rules కాకుండా, తాను ఉన్నాయని భావిస్తున్న rules ను report చేస్తుంది. sudo firewall-cmd --reload rules ను మళ్లీ install చేస్తుంది. Reload తర్వాత కూడా rules తిరిగి రావాలంటే వాటిని firewall-cmd తో రాయండి.

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

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

sudo లేకుండా firewall-cmd నడపడం. ప్రతి మార్పుకూ root అవసరం. అది లేకపోతే authorization check అభ్యర్థనను తిరస్కరిస్తుంది, ఏదీ మారదు. దీనివల్ల 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 అమలు చేయండి. ఇది ప్రస్తుత live set ను 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 లో entry ఉండి, live list లో లేకపోతే, మీరు మిస్ చేస్తున్నది reload.

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

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

firewalld port మూసి ఉందని చూపుతున్నప్పటికీ నా Docker container ఎందుకు చేరుకోగలుగుతున్నారు?

Published port ను Docker యొక్క స్వంత NAT rules మార్చి 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 ఇన్‌స్టాల్ చేయవచ్చా?

ఒకే server పై ఉన్న రెండు firewall managers ఒకదాని నియమాల గురించి మరొకదానికి తెలియకుండా rules రాస్తాయి. ఏ service చివరగా start అవుతుందో దాని ఆధారంగా ఏ rules నిలుస్తాయో మారుతుంది. Rocky Linux మరియు AlmaLinux లో firewalld మద్దతు ఉన్న tool. ఇది ఇప్పటికే ఇన్‌స్టాల్ అయి ఉంటుంది. ufw ఉపయోగించే అదే nftables backend ను ఇది నియంత్రిస్తుంది. Default zone మరియు --permanent flag ను ఒక్కసారి నేర్చుకుంటే, మొత్తం tool ను ఉపయోగించవచ్చు.