Jinsi ya kutumia firewalld kwenye Rocky na AlmaLinux
Jifunze kusimamia firewalld kwenye Rocky au AlmaLinux kwa kufungua SSH na bandari za wavuti. Epuka kosa la --permanent na elewa jinsi ya kuhifadhi sheria baada ya kuanzisha upya.
firewalld ni nini, na kwa nini Rocky na AlmaLinux huja nayo
firewalld ni kidhibiti cha firewall kilichosakinishwa kwa chaguo-msingi kwenye Rocky Linux, AlmaLinux na mifumo mingine inayotokana na Red Hat Enterprise Linux (RHEL). Hakikagui pakiti zenyewe. Kinahifadhi usanidi na kuugeuza kuwa sheria za nftables. Amri moja, firewall-cmd, huuhariri wakati seva ikiwa inaendelea kufanya kazi.
Ikiwa tayari unajua jinsi ufw inavyofanya kazi kwenye Ubuntu VPS, unaelewa kazi yake. firewalld huongeza dhana mbili ambazo ufw haina. Ya kwanza ni zones: sera yenye jina ambayo pakiti hupangwa ndani yake. Ya 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 kuwa bado si sahihi kutoka kwenye Internet.
Fungua SSH kabla ya kufanya jambo lingine lolote
Installations nyingi za Rocky na AlmaLinux tayari zina firewalld iliyopo na inayofanya kazi, na usanidi uliokuja nao unaruhusu 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 --statefirewall-cmd --state huchapisha running. Ikiwa huduma imesimamishwa, kila wito mwingine wa firewall-cmd hujibu FirewallD is not running na kutoka kwa kutoa exit code isiyo sifuri. Hilo ndilo jambo la kwanza la kuangalia wakati amri inaonekana kutofanya chochote.
Sasa soma kile kinachoruhusiwa kwa sasa.
sudo firewall-cmd --list-allToleo halisi lina 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 yako na hakutakuruhusu kuingia tena.
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reloadtarget: default inamaanisha kuwa pakiti isiyolingana na chochote inakataliwa 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 --reloadJua gharama kabla ya kuendesha hilo: DROP pia huizuia seva kujibu ping, kwa hivyo ufuatiliaji wako (monitoring) pia utakaa kimya.
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 unaorudi 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. Hakuna tabia kati ya hizi iliyo na hitilafu (bug). Zote huwashangaza watu, kwa sababu amri huchapisha success kwa njia yoyote ile.
Andika jozi hiyo kila wakati.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reloadUnaweza 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-servicesYa 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 modules 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 mmoja umejengwa ndani. Sheria ya runtime inaweza kuisha muda wake yenyewe.
sudo firewall-cmd --add-service=http --timeout=5mSheria hiyo hujiondoa yenyewe baada ya dakika tano. Haiwezi kuunganishwa na --permanent, na hiyo ndiyo hoja: 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.
Zones, na kwa nini zone ya default pekee ndiyo muhimu kwenye VPS
Zone ni seti ya ruhusa iliyopewa jina na kuambatanishwa na kiwango cha uaminifu. firewalld huweka kila pakiti inayoingia kwenye zone moja kamili. Kwanza, inalinganisha anwani ya chanzo ya pakiti na orodha ya sources: ya kila zone. Ikiwa hakuna kinacholingana, inatumia zone ambayo interface inayoingia imefungwa nayo. Ikiwa interface haijafungwa na zone yoyote, pakiti huenda kwenye zone ya default.
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zonesKwenye VPS yenye interface moja ya mtandao, jibu la kwanza karibu kila mara ni public, na hiyo ndiyo zone pekee utakayotumia. firewall-cmd bila hoja ya --zone= hufanya kazi kwenye zone ya default, ndiyo maana kila amri fupi katika mwongozo huu hufanya kazi bila kuhitaji kutaja zone.
Hapa kuna hitilafu inayopoteza muda mwingi. Ikiwa interface imefungwa na zone nyingine, sheria zako zitawekwa kwenye public wakati trafiki inashughulikiwa mahali pengine, kwa hivyo chochote unachoongeza hakitakuwa na athari na hakuna onyo litakalotolewa. --get-active-zones huonyesha ufungaji huo:
public
interfaces: eth0Ikiwa interface inaonekana chini ya jina tofauti la zone, ama andika sheria zako hapo kwa kutumia --zone=, au hamisha interface hiyo.
sudo firewall-cmd --permanent --zone=public --change-interface=eth0
sudo firewall-cmd --reloadNetworkManager husimamia interfaces kwenye Rocky na AlmaLinux, na hurudisha zone ileile wakati muunganisho unapokuwa hai. Iweke hapo pia ili reboot isifute kazi yako. Chukua jina la muunganisho kutoka kwa amri ya kwanza, kwa sababu mara chache huwa sawa na jina la kifaa.
sudo nmcli connection show
sudo nmcli connection modify "System eth0" connection.zone publicUlinganishaji wa chanzo (source matching) hushinda ulinganishaji wa interface, ndivyo anwani moja inavyoweza kupata sera tofauti. Zone iliyojengewa ndani ya trusted hukubali kila kitu.
sudo firewall-cmd --permanent --zone=trusted --add-source=203.0.113.10/32
sudo firewall-cmd --reloadKuwa mwangalifu na hiyo. Inafungua kila port kwenye seva kwa anwani hiyo, ikiwemo database uliyodhani ni ya faragha. Tumia rich rule unapotaka port moja, si host moja.
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 hufafanua maana ya https.
sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=https--info-service huchapisha port zilizofichwa nyuma ya jina hilo:
https
ports: 443/tcpTumia jina hilo pale linapopatikana. Hii inasomeka kwa uwazi katika --list-all baada ya miezi sita, na vifurushi kama Cockpit husakinisha faili lao la huduma. Tumia --add-port kwa chochote kisicho na ufafanuzi.
Pengo la kuzingatia: huduma ya ssh inamaanisha 22/tcp na si kingine. Ikiwa ulihamishia 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 --reloadKwenye usakinishaji upya wa RHEL kuna kufuli la pili kwenye mlango huo. SELinux (security-enhanced Linux) huweka lebo kwenye namba za port, na sshd hairuhusiwi kuunganishwa (bind) kwenye port iliyo nje ya lebo zake. Hivyo hukataa kuanza na logi husoma 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 2222Ninawezaje kuona kinachofunguka hivi sasa?
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
sudo nft list table inet firewalld | head -n 40Amri mbili za kwanza huripoti kile ambacho firewalld inakiamini. 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. Jaribu kutoka kwa mashine nyingine:
nc -zv 203.0.113.20 443Usifanye jaribio hilo 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-servicesAmri ya mwisho sasa inapaswa kuorodhesha http https pamoja na kile kilichokuwepo hapo awali. Ikiwa tovuti bado haijibu, firewall inaweza isiwe ndiyo tatizo lako. Kanuni inaruhusu pakiti ya data. Mchakato (process) bado lazima uwe unasikiliza pakiti hiyo.
sudo ss -tlnpSocket 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 --reloadKanuni 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 pengo 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.
Kuzuia port kwa anwani moja ya chanzo
Rich rules ni njia ndefu ya usanidi, inayotumika wakati jina la huduma pekee halitoshi kuelezea mahitaji yako. 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 --reloadZone ni mkusanyiko wa 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 entry hiyo pana, vinginevyo ile nyembamba itakuwa 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 (noisy network) na kuweka kumbukumbu, weka kipengele cha log kabla ya action, 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-dropThamani ya limit inazuia mafuriko ya pakiti (packets) yasijaze 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 console access ya mtoa huduma wako imepimwa na inafanya 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, ambayo ndiyo kitu pekee ambacho orodha kama hii haiwezi kukuonyesha.
sudo ufw enableinakuwasudo systemctl enable --now firewalldsudo ufw disableinakuwasudo systemctl disable --now firewalldsudo ufw status verboseinakuwasudo firewall-cmd --list-allsudo ufw allow OpenSSHinakuwasudo firewall-cmd --permanent --add-service=sshsudo ufw allow 443/tcpinakuwasudo firewall-cmd --permanent --add-port=443/tcpsudo ufw delete allow 443/tcpinakuwasudo firewall-cmd --permanent --remove-port=443/tcpsudo ufw allow from 203.0.113.10 to any port 22inakuwa sheria tajiri (rich rule) iliyoonyeshwa hapo juusudo ufw reloadinakuwasudo firewall-cmd --reloadsudo ufw default deny incomingndivyo eneo lapubliclinavyofanya kazi, na--set-target=DROPni toleo lake la kimyasudo ufw logging oninakuwasudo firewall-cmd --set-log-denied=all
Kuna tofauti moja inayostahili kuelezwa wazi. ufw huweka orodha yenye namba na unaweza kuingiza sheria kwenye nafasi ya 1. firewalld haina namba za sheria, kwa hivyo "weka sheria hii kwanza" haina maana hapa. Wakati maingizo mawili ya firewalld yanapoonekana kupingana, sheria ya kukubali (accept) iliyo pana zaidi ndiyo inayoshinda, kwa sababu hakuna kitu katika seti hiyo kinachokataa (deny). Unapaswa kuondoa mwenyewe ingizo hilo pana.
Kwa nini container yangu ya Docker inafikika 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 huiambia 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: katika zone yako hudhibiti pakiti zinazopelekwa kwa host. Sheria za Docker hudhibiti njia ya usambazaji, na zinakubali (accept).
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 -nSuluhisho 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 nginxContainer sasa inajibu curl http://127.0.0.1:8080 kwenye seva na hakuna kitu 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.
Kuhakikisha inadumu baada ya reboot, na makosa utakayokutana nayo
sudo systemctl is-enabled firewalld
sudo systemctl status firewalldenabled 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 inaripoti kile inachoamini badala ya kile kilichopo 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 kufahamu uwepo wa nyingine, na mshindi hutegemea huduma iliyoanza ya mwisho. Chagua moja. Kwenye Rocky na AlmaLinux, firewalld ndiyo inayoungwa mkono na usambazaji (distribution).
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, kagua paneli kabla ya kubadilisha chochote kwenye seva. Hali hii 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, flag ni --permanent, na ukaguzi pekee wa kweli hutoka kwenye mashine nyingine.
FAQ
Kwa nini sheria yangu ya firewalld ilipotea baada ya reboot?
Sheria hiyo iliingia kwenye usanidi wa runtime pekee. sudo firewall-cmd --add-service=http huanza kufanya kazi mara moja na hufutwa wakati wa reload au boot inayofuata, kwa sababu usanidi uliotunzwa kwenye /etc/firewalld/zones/public.xml haukuguswa. Ongeza --permanent kisha uendeshe sudo firewall-cmd --reload. Ili kuhifadhi sheria ulizoongeza kwa mkono, endesha sudo firewall-cmd --runtime-to-permanent, ambayo hunakili usanidi wa sasa kwenye faili iliyohifadhiwa.
Kwa nini hakuna kinachobadilika baada ya kuongeza sheria kwa --permanent?
Kwa sababu --permanent huandika faili hiyo na kuuacha firewall inayofanya kazi bila kuigusa. Port inabaki imefungwa hadi sudo firewall-cmd --reload itakapopakia usanidi uliotunzwa kwenye kernel. Linganisha sudo firewall-cmd --list-services na sudo firewall-cmd --permanent --list-services: ikiwa orodha iliyohifadhiwa inaingizo ambalo orodha ya sasa haina, basi unachokosa ni reload.
Je, nitumie --add-service au --add-port?
Tumia --add-service wakati jina lipo kwa ajili ya huduma unayoendesha. Hii inaeleza nia yako, na sudo firewall-cmd --info-service=https huonyesha wazi ni ports zipi jina hilo linahusisha. Tumia --add-port wakati hakuna kinachofafanua 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 inaonekana wakati firewall-cmd inaonyesha port imefungwa?
Port iliyochapishwa (published) huandikwa upya na sheria za NAT za Docker na kupelekwa kwenye container, kwa hivyo pakiti haifikishwi kamwe kwenye host, na orodha za huduma na ports za zone hushughulikia tu pakiti zinazofikishwa kwenye host. 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 ile ile ya nftables ambayo ufw ingeendesha. Jifunze zone chaguo-msingi na flag ya --permanent mara moja na utakuwa umemudu zana nzima.