SSD Nodes Learn Hosting plans →
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-09-04

Jinsi ya kutumia firewalld kwenye Rocky na AlmaLinux

Jifunze kufungua SSH, kuruhusu bandari ya wavuti, na kufunga bandari zisizohitajika. Epuka makosa ya --permanent na hakikisha sheria zako zinadumu baada ya kuanzisha upya seva.

firewalld ni nini, na kwa nini Rocky na AlmaLinux huja nayo

firewalld ni kidhibiti cha firewall kilichowekwa kwa chaguo-msingi kwenye Rocky Linux, AlmaLinux na mifumo mingine inayojengwa upya kutoka Red Hat Enterprise Linux (RHEL). Usambazaji wote miwili uliirithi chaguo hilo badala ya kulichagua wenyewe, jambo linaloeleweka zaidi ukijua jinsi Rocky na AlmaLinux zilivyokuja kujenga upya kazi ya Red Hat baada ya CentOS kubadili mwelekeo. Haikagui pakiti zenyewe. Inatunza usanidi uliopo na kuugeuza kuwa sheria za nftables. Amri moja, firewall-cmd, huuhariri huku seva ikiwa mtandaoni. Hakuna kitu katika mwongozo huu kinachobadilika kati ya usambazaji huu miwili, kwa sababu vitu vinavyotofautisha Rocky na AlmaLinux ni ahadi ya utangamano na aina ya CPU zinazoungwa mkono, si firewall.

Ikiwa tayari unajua jinsi ufw inavyofanya kazi kwenye Ubuntu VPS, unaelewa kazi yake. firewalld huongeza mawazo mawili ambayo ufw haina. La kwanza ni zones: sera yenye jina ambayo pakiti hupangwa ndani yake. La pili ni mgawanyo kati ya sheria za moja kwa moja (live) na sheria zilizohifadhiwa, ambayo ni flag ya --permanent na ndiyo chanzo kikubwa cha mkanganyiko katika zana hii.

Kila kitu hapa chini ni amri unayoiendesha kwenye seva yako mwenyewe. Jaribu kila mabadiliko kutoka kwa mashine ya pili, kwa sababu sheria inayoonekana kuwa sahihi ndani ya seva inaweza bado kuwa mbaya kutoka kwenye Internet.

Fungua SSH kabla ya kufanya jambo lingine lolote

Installations nyingi za Rocky na AlmaLinux huwa na firewalld iliyopo na inayofanya kazi tayari, na configuration iliyokuja nayo inaruhusu SSH. Baadhi ya images ndogo za cloud huiondoa. Hakikisha badala ya kudhani.

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

firewall-cmd --state huchapisha running. Ikiwa huduma imesimamishwa, kila wito mwingine wa firewall-cmd hujibu FirewallD is not running na kutoka kwa status isiyo ya sifuri. Hilo ndilo jambo la kwanza la kuangalia wakati amri inaonekana kutofanya chochote kabisa.

Sasa soma kile kinachoruhusiwa kwa sasa.

sudo firewall-cmd --list-all

Output halisi ina mistari michache zaidi. Hii ndiyo inayohusika:

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

ssh katika mstari wa services: ndiyo sababu session yako bado inafanya kazi. Ikiwa haipo, iongeze kabla ya kugusa kitu kingine chochote, kwa sababu kuanzisha firewall bila sheria ya SSH kutakatisha session na hakutakuruhusu kuingia tena.

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

target: default inamaanisha pakiti isiyolingana na chochote hukataliwa kwa jibu la ICMP (internet control message protocol) host-prohibited, kwa hivyo mteja anayegonga port iliyofungwa huona No route to host mara moja. Kuweka target kuwa DROP hufanya seva kuwa kimya badala yake, na scanners husubiri hadi muda uishe (timeout).

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

Jua gharama kabla ya kuendesha hilo: DROP pia huizuia seva kujibu ping, kwa hivyo ufuatiliaji wako (monitoring) nao utakuwa kimya pia.

Kwa nini sheria yangu imepotea? Flag ya --permanent

firewalld inashikilia usanidi mbili kwa wakati mmoja. Usanidi wa runtime ndio unaotekelezwa na kernel kwa sasa. Usanidi wa permanent ndio unaohifadhiwa katika /etc/firewalld/zones/public.xml na ndio unaorejea baada ya reload au reboot.

Amri isiyo na --permanent hubadilisha runtime pekee. Inafanya kazi mara moja na hupotea kwenye reload au boot inayofuata. Amri yenye --permanent huandika faili na haibadilishi chochote kinachoendelea, kwa hivyo port inabaki imefungwa hadi utakapofanya reload. Tabia zote mbili si hitilafu. Zote huwashangaza watu, kwa sababu amri huchapisha success kwa njia zote mbili.

Andika jozi hiyo kila wakati.

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

Unaweza kusoma usanidi zote mbili, ambayo ndiyo njia ya haraka zaidi ya kugundua ni kosa lipi kati ya hayo mawili ulilofanya.

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

Ya kwanza huchapisha seti inayotumika sasa. Ya pili huchapisha seti iliyohifadhiwa. Ikiwa seti inayotumika ina huduma ambayo seti iliyohifadhiwa haina, sheria hiyo hufa kwenye reload inayofuata. Ikiwa seti iliyohifadhiwa ina huduma ambayo seti inayotumika haina, umesahau kufanya reload. sudo firewall-cmd --runtime-to-permanent hunakili kila kitu kinachotumika kwenye faili iliyohifadhiwa, jambo ambalo ni muhimu baada ya kikao cha majaribio.

--reload huhifadhi hali ya ufuatiliaji wa muunganisho (connection tracking state), kwa hivyo kikao chako cha SSH kinanusurika. --complete-reload hupakia upya moduli za kernel pia na kupoteza hali hiyo, jambo ambalo kwa kawaida hukatisha kila muunganisho ulio wazi ikiwemo wako. Tumia reload ya kawaida.

Wavu wa usalama umejengwa ndani. Sheria ya runtime inaweza kuisha yenyewe.

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

Sheria hiyo hujiondoa baada ya dakika tano. Haiwezi kuchanganywa na --permanent, na ndiyo hoja yenyewe: ipo kwa ajili ya kujaribu mabadiliko ambayo huna uhakika nayo. Wavu wa usalama wa zamani ni bora zaidi. Weka kikao cha pili cha SSH kikiwa wazi wakati unahariri sheria, na usikifunge hadi login mpya ithibitishe kuwa sheria mpya zinafanya kazi.

Kanda (Zones), na kwa nini kanda chaguomsingi ndiyo pekee yenye umuhimu kwenye VPS

Kanda ni seti ya ruhusa iliyopewa jina na kuambatanishwa na kiwango cha uaminifu. firewalld huweka kila pakiti inayoingia kwenye kanda moja tu. Kwanza, inalinganisha anwani ya chanzo ya pakiti na orodha ya sources: ya kila kanda. Ikiwa hakuna kinacholingana, inatumia kanda ambayo kiolesura (interface) cha mtandao kimefungwa (bound) nayo. Ikiwa kiolesura hakijafungwa na kanda yoyote, pakiti huenda kwenye kanda chaguomsingi (default zone).

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

Kwenye VPS yenye kiolesura kimoja cha mtandao, jibu la kwanza karibu kila mara ni public, na hiyo ndiyo kanda pekee utakayotumia. firewall-cmd bila hoja ya --zone= hufanya kazi kwenye kanda chaguomsingi, ndiyo maana kila amri fupi katika mwongozo huu hufanya kazi bila kuhitaji kutaja kanda.

Hili ndilo kosa linalopoteza muda mwingi. Ikiwa kiolesura kimefungwa na kanda nyingine, sheria zako zitawekwa kwenye public wakati trafiki inashughulikiwa kwingine, hivyo chochote unachoongeza hakitakuwa na athari na hakuna onyo litakalotolewa. --get-active-zones huonyesha ufungaji huo:

public
  interfaces: eth0

Ikiwa kiolesura kinaonekana chini ya jina tofauti la kanda, ama andika sheria zako huko kwa kutumia --zone=, au hamisha kiolesura hicho.

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

NetworkManager husimamia violesura kwenye Rocky na AlmaLinux, na hurudisha kanda husika kila muunganisho unapowashwa. Iweke kanda huko pia ili reboot isifute kazi yako. Chukua jina la muunganisho kutoka kwa amri ya kwanza, kwa sababu mara chache sana huwa sawa na jina la kifaa.

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

Ulinganishaji wa chanzo (source matching) una nguvu kuliko ulinganishaji wa kiolesura, ndivyo anwani moja inavyoweza kupata sera tofauti. Kanda iliyojengewa ndani ya trusted hukubali kila kitu.

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

Kuwa mwangalifu na hiyo. Inafungua kila port kwenye seva kwa anwani hiyo, ikiwemo database uliyodhani ni ya faragha. Tumia rich rule unapotaka port moja, si mwenyeji (host) mmoja.

Huduma ya firewalld ni nini?

Huduma ni mkusanyiko wa port uliotajwa ambao husafirishwa kama faili la XML. --add-service=https hufungua 443/tcp kwa sababu /usr/lib/firewalld/services/https.xml inafafanua maana ya https.

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

--info-service huchapisha port zilizojificha nyuma ya jina hilo:

https
  ports: 443/tcp

Tumia jina hilo pale linapopatikana. Hii inasomeka vizuri katika --list-all baada ya miezi sita, na vifurushi kama Cockpit husakinisha faili lao la huduma. Tumia --add-port kwa chochote kisichokuwa na ufafanuzi.

Pengo la kuzingatia: huduma ya ssh inamaanisha 22/tcp na si kitu kingine. Ikiwa ulihamisha SSH kwenye port nyingine wakati wa kuimarisha ufikiaji wa SSH kwenye seva, basi --add-service=ssh haifungui port unayotumia kihalisi.

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

Kwenye usakinishaji upya wa RHEL kuna kufuli la pili kwenye mlango huo. SELinux (security-enhanced Linux) huweka lebo kwenye namba za port, na sshd hairuhusiwi kufungamana na port iliyo nje ya lebo zake. Hivyo inakataa kuanza na logi inasoma error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. Weka lebo kwenye port kwanza.

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

Ninawezaje kuona kinachofunguka sasa hivi?

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

Amri mbili za kwanza huripoti kile ambacho firewalld inakiona. Amri ya tatu inasoma sheria ambazo kernel inazo kweli, ndani ya jedwali linalomilikiwa na firewalld. Sheria hizi zinapaswa kuoana.

Hakuna kati ya hayo kinachotoa uthibitisho kamili. Fanya jaribio kutoka kwa mashine nyingine:

nc -zv 203.0.113.20 443

Usifanye jaribio hili kwenye seva yenyewe. firewalld hukubali kila kitu kinachofika kwenye loopback interface, kwa hivyo curl http://localhost:8080 itafanikiwa bila kujali sheria zako zinasema nini. Jaribio hilo hukuambia tu kuwa huduma inafanya kazi. Halikupi taarifa yoyote kuhusu firewall.

Ruhusu port ya wavuti

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

Amri ya mwisho sasa inapaswa kuorodhesha http https pamoja na kile kilichokuwepo awali. Ikiwa tovuti bado haijibu, firewall inaweza isiwe ndiyo tatizo lako. Kanuni inaruhusu pakiti (packet) kupita. Mchakato (process) bado lazima uwe unasikiliza (listening) ili kuipokea.

sudo ss -tlnp

Socket inayoonyeshwa kama 0.0.0.0:443 au *:443 inakubali miunganisho kutoka kwa anwani yoyote. Ile inayoonyeshwa kama 127.0.0.1:443 inajibu kwenye loopback pekee, na hakuna kanuni ya firewall itakayoweza kuifanya ifikike kutoka nje. Ports na sockets zinazosikiliza kwenye Linux inafafanua tofauti hiyo kwa kina zaidi.

Ninafunga vipi port tena?

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

Kanuni ya --permanent inatumika hapa pia, na ina athari kubwa zaidi katika mwelekeo huu. Ukiondoa huduma kwenye runtime pekee, port itaonekana imefungwa, lakini reboot au reload inayofuata itafungua port hiyo tena kutoka kwenye faili iliyohifadhiwa. Hilo ni tundu ambalo hutaligundua, kwa sababu ukaguzi ulioufanya ulifaulu.

Kuondoa kitu ambacho hakikuwepo huchapisha Warning: NOT_ENABLED: http na bado hutoka kwa exit code 0. Kuongeza kitu kilekile mara mbili huchapisha Warning: ALREADY_ENABLED: http. Zote mbili ni salama. Jina lililoandikwa vibaya ni tofauti: Error: INVALID_SERVICE inamaanisha kuwa firewalld haina ufafanuzi wa jina hilo na hakuna kilichobadilishwa hata kidogo.

Ikiwa --list-all yako inaonyesha cockpit na hutumii Cockpit web console kwenye port 9090, iondoe. Kila port iliyo wazi ni huduma ambayo lazima uendelee kuifanyia patching, na kwa zile unazoamua kubaki nazo, dnf-automatic inaweza kusakinisha masasisho ya usalama kwa muda uliopangwa ili kazi hiyo isitegemee wewe kukumbuka. Hata hivyo, kusakinisha patch si sawa na kuitekeleza, na needs-restarting huonyesha ni huduma zipi bado zinatumia maktaba za zamani pindi masasisho hayo yanapowasili.

Kuzuia port kwa anwani moja ya chanzo

Rich rules ni njia ndefu ya usanidi, inayotumika wakati jina la huduma pekee halitoshi kuelezea unachotaka. Kuzuia SSH kwa anwani moja ya ofisi kunahitaji amri mbili, na ya pili ndiyo ambayo watu husahau mara nyingi.

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 ni seti ya ruhusa, si orodha ya namba inayoishia kwenye mechi ya kwanza. Rich rule huongeza ruhusa ya kukubali (accept) kwa anwani moja. Haikatazi mtu yeyote. Wakati ssh bado ipo kwenye mstari wa services:, Internet nzima bado inaweza kufikia port 22 na rich rule haibadilishi chochote unachoweza kupima. Ondoa ingizo pana, vinginevyo lile jembamba litakuwa ni mapambo tu.

Kwa port isiyo na jina la huduma, taja namba ya port badala yake.

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

Ili kuzuia mtandao wenye kelele na kuweka kumbukumbu, weka kipengele cha log kabla ya kitendo, huu ndio mpangilio unaotarajiwa na lugha ya rich rule.

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

Thamani ya limit inazuia mafuriko ya pakiti kujaza journal. Kabla ya kufunga SSH kwa anwani moja, hakikisha anwani hiyo ni thabiti. Muunganisho wa nyumbani wenye IP address inayobadilika utakufulia nje siku itakapobadilika, kwa hivyo hakikisha ufikiaji wa console ya mtoa huduma wako umejaribiwa na unafanya kazi kwanza.

Amri za ufw na njia mbadala zake katika firewall-cmd

Kazi zilezile, zana tofauti. Kila mstari wa --permanent unahitaji sudo firewall-cmd --reload baada yake, jambo ambalo ni kitu kimoja ambacho orodha kama hii haiwezi kukuonyesha.

  • sudo ufw enable inakuwa sudo systemctl enable --now firewalld
  • sudo ufw disable inakuwa sudo systemctl disable --now firewalld
  • sudo ufw status verbose inakuwa sudo firewall-cmd --list-all
  • sudo ufw allow OpenSSH inakuwa sudo firewall-cmd --permanent --add-service=ssh
  • sudo ufw allow 443/tcp inakuwa sudo firewall-cmd --permanent --add-port=443/tcp
  • sudo ufw delete allow 443/tcp inakuwa sudo firewall-cmd --permanent --remove-port=443/tcp
  • sudo ufw allow from 203.0.113.10 to any port 22 inakuwa sheria tajiri (rich rule) iliyoonyeshwa hapo juu
  • sudo ufw reload inakuwa sudo firewall-cmd --reload
  • sudo ufw default deny incoming ndivyo eneo la public linavyofanya kazi, na --set-target=DROP ni toleo lake la kimya
  • sudo ufw logging on inakuwa sudo firewall-cmd --set-log-denied=all

Kuna tofauti moja inayostahili kuelezwa wazi. ufw huweka orodha yenye namba na unaweza kuingiza sheria katika nafasi ya 1. firewalld haina namba za sheria, kwa hivyo "weka sheria hii kwanza" haina maana hapa. Wakati maingizo mawili ya firewalld yanapoonekana kupingana, ruhusa pana (broad accept) ndiyo inayoshinda, kwa sababu hakuna kitu katika seti hiyo kinachokataa. Unapaswa kuondoa maingizo mapana wewe mwenyewe.

Kwa nini container yangu ya Docker inapatikana wakati firewall inaonekana imefungwa?

Kwa sababu port ya container iliyochapishwa haifikii sehemu ya firewall inayodhibitiwa na zone yako. docker run -d -p 8080:80 nginx inaiambia Docker iandike sheria zake za NAT (network address translation) na forwarding. Pakiti inayofika kwenye 8080 huandikwa upya na kuelekezwa kwenye container, hivyo inasambazwa (forwarded) badala ya kupelekwa kwa host. Mistari ya services: na ports: kwenye zone yako hudhibiti pakiti zinazopelekwa kwa host. Sheria za Docker hudhibiti njia ya forward, na zinakubali pakiti hizo.

Matokeo yake ni seva ambapo sudo firewall-cmd --list-all haionyeshi port 8080 na nc -zv 203.0.113.20 8080 kutoka mashine nyingine inaunganishwa hata hivyo. Angalia kile Docker ilichoweka:

sudo iptables -t nat -L DOCKER -n

Suluhisho liko kwenye flag ya kuchapisha (publish). Funga port kwenye loopback na uweke reverse proxy mbele yake.

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

Sasa container inajibu curl http://127.0.0.1:8080 kwenye seva na hakuna kitu kinachojibu kutoka nje. Watumiaji wa Ubuntu hukutana na kikwazo hicho hicho, kilichoelezewa katika kwa nini Docker containers huchapisha ports moja kwa moja kupita ufw. Rootful Podman, ambayo Rocky na AlmaLinux inayo katika base repositories, huchapisha ports kwa kutumia mbinu hiyo hiyo ya NAT, kwa hivyo jaribu kutoka mashine nyingine badala ya kuamini orodha ya zone. Mwingiliano huo pia ndio sababu kufunga Docker Engine kwenye usambazaji huu kunahitaji hatua chache ambazo mwongozo wa Ubuntu hautaji, kuanzia na Podman kumiliki tayari amri ya docker.

Kuhakikisha inadumu baada ya reboot, na makosa utakayokutana nayo

sudo systemctl is-enabled firewalld
sudo systemctl status firewalld

enabled na active (running) ndivyo unavyohitaji. Firewall inayofanya kazi lakini haijawezeshwa (enabled) inakulinda hadi reboot ya kwanza. Uhakiki huo unapaswa kuwa kwenye orodha unayopitia katika dakika kumi za kwanza kwenye VPS mpya, sambamba na funguo za SSH na masasisho.

Amri za moja kwa moja za nftables na firewalld hazichanganyiki. firewalld inamiliki jedwali linaloitwa inet firewalld. sudo nft flush ruleset hulifuta, seva inakuwa wazi kwa kila kitu, na firewall-cmd --list-all bado itaonyesha usanidi uliokusudia, kwa sababu firewalld huripoti kile inachoamini badala ya kile kilicho kwenye kernel. sudo firewall-cmd --reload husakinisha upya sheria hizo. Andika sheria kwa kutumia firewall-cmd ili zirudi baada ya reload.

Wasimamizi wawili wa firewall kwenye seva moja. Kusakinisha ufw au iptables-services kando ya firewalld kunakupa programu mbili zinazoandika sheria bila kufahamiana, na mshindi hutegemea ni huduma ipi iliyoanza mwisho. Chagua moja. Kwenye Rocky na AlmaLinux, firewalld ndiyo inayoungwa mkono na usambazaji huo.

Firewall ya mtoa huduma mbele ya seva. Paneli nyingi za VPS zina firewall ya mtandao tofauti. Ikiwa --list-all inaonyesha port iko wazi na muunganisho kutoka nje bado unashindwa, angalia paneli kabla ya kubadilisha chochote kwenye seva. Hufanya kazi kinyume pia: sheria iliyo wazi kwenye paneli haifanyi kazi wakati firewalld inakataa pakiti.

Kuendesha firewall-cmd bila sudo. Kila mabadiliko yanahitaji root. Bila hiyo, ombi hukataliwa na ukaguzi wa idhini na hakuna kinachobadilishwa, jambo ambalo kwa haraka linaonekana kama amri ilipuuzwa.

Amri sita hutosheleza mahitaji ya siku nyingi: --list-all kusoma hali, --permanent --add-service au --add-port kufungua kitu, --permanent --remove-service kukifunga, --reload kutumia faili iliyohifadhiwa, na --runtime-to-permanent baada ya mfululizo wa majaribio. Eneo (zone) ni public, bendera (flag) ni --permanent, na ukaguzi wa kweli pekee hutoka kwenye mashine nyingine.

FAQ

Kwa nini sheria yangu ya firewalld ilipotea baada ya reboot?

Sheria hiyo iliingia kwenye configuration ya muda (runtime) pekee. sudo firewall-cmd --add-service=http huanza kufanya kazi mara moja lakini hufutwa wakati wa reload au boot inayofuata, kwa sababu configuration iliyohifadhiwa kwenye /etc/firewalld/zones/public.xml haikuguswa. Ongeza --permanent kisha uendeshe sudo firewall-cmd --reload. Ili kuhifadhi sheria ulizoongeza kwa mkono, endesha sudo firewall-cmd --runtime-to-permanent, ambayo hunakili sheria zilizopo kwenye mfumo na kuziweka kwenye faili iliyohifadhiwa.

Kwa nini hakuna kinachobadilika baada ya kuongeza sheria kwa kutumia --permanent?

Kwa sababu --permanent huandika faili hiyo lakini haiathiri firewall inayofanya kazi. Port hubaki imefungwa hadi sudo firewall-cmd --reload itakapopakia configuration iliyohifadhiwa kwenye kernel. Linganisha sudo firewall-cmd --list-services na sudo firewall-cmd --permanent --list-services: ikiwa orodha iliyohifadhiwa inaingizo ambalo halipo kwenye orodha ya sasa, basi unachokosa ni kufanya reload.

Je, nitumie --add-service au --add-port?

Tumia --add-service wakati jina lipo kwa ajili ya huduma unayoiendesha. Hii inaeleza nia yako, na sudo firewall-cmd --info-service=https huonyesha wazi ni ports zipi jina hilo linahusisha. Tumia --add-port wakati hakuna ufafanuzi wa huduma yako, au wakati inasikiliza kwenye port isiyo ya kawaida. Huduma ya ssh inamaanisha 22/tcp pekee, kwa hivyo SSH iliyohamishiwa 2222 inahitaji --add-port=2222/tcp pamoja na lebo ya SELinux kwa port hiyo.

Kwa nini container yangu ya Docker inafikika wakati firewall-cmd inaonyesha port imefungwa?

Port iliyochapishwa (published) hubadilishwa na sheria za NAT za Docker na kupelekwa kwenye container, kwa hivyo pakiti haifikishwi kwenye host, na orodha za huduma na ports za zone hushughulikia pakiti zinazofikishwa kwenye host pekee. Container hujibu kutoka kwenye Internet wakati --list-all haionyeshi chochote. Chapisha kwenye loopback badala yake, kwa kutumia docker run -d -p 127.0.0.1:8080:80 nginx, na uweke reverse proxy mbele yake.

Je, ninaweza kusakinisha ufw kwenye Rocky Linux badala ya firewalld?

Wasimamizi wawili wa firewall kwenye seva moja huandika sheria bila kufahamu uwepo wa mwenzake, na seti itakayobaki inategemea huduma iliyoanza ya mwisho. firewalld ndiyo zana inayoungwa mkono kwenye Rocky Linux na AlmaLinux, imeshasakinishwa tayari, na inaendesha backend ileile ya nftables ambayo ufw ingeendesha. Jifunze zone chaguo-msingi na flag ya --permanent mara moja na utakuwa umemudu zana nzima.