Jinsi ya kuzuia IPv6 kwenye VPS yako
Sheria za UFW zinaweza kulinda IPv4 tu huku IPv6 ikiwa wazi. Jifunze jinsi ya kuona na kufunga pengo hili kwenye VPS yako ya Ubuntu 24.04 sasa.
Mtego wa firewall ya IPv6 kwa sentensi moja
Firewall yako inalinda IPv4. VPS yako karibu hakika ina anwani ya umma ya IPv6, na huduma nyingi husikiliza kwenye anwani hiyo kwa kimawazo. Ikiwa firewall yako inahusu IPv4 pekee, au ikiwa unategemea firewall ya wingu inayochuja IPv4 pekee, kila moja ya huduma hizo inaweza kufikiwa kutoka kwenye mtandao mzima kupitia IPv6 wakati upande wa IPv4 unaonekana umechomwa. Unajaribu port kwa kutumia curl, unaona muunganisho uliokataliwa, na unajihisi salama. Mshambuliaji anajiunganisha kwenye port hiyo hiyo kupitia IPv6 na kuingia ndani.
Mwongozo huu unaonyesha chanzo cha pengo hilo kwenye VPS ya kawaida ya Ubuntu 24.04, jinsi ya kuona hasa kile unachokifichua, na jinsi ya kukifunga. UFW si mhusika mkuu hapa. Kwenye uinstalaji wa Ubuntu wa kisasa, UFW tayari inashughulikia IPv6. Kufichuka huku kunatokana na tabaka zinazozunguka UFW, na kutoka kwa huduma ambazo hukuwa unajua zinashikilia mawasiliano.
Kwa nini VPS yako ina IPv6 kuanzia mwanzo
Karibu kila VPS leo huja na anwani ya umma ya IPv6, mara nyingi ikiwa ni /64 nzima, pamoja na anwani yake ya IPv4. Angalia yako:
ip -6 addr show scope global2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
inet6 2001:db8:2a::1/64 scope global2001:db8:2a::1 hiyo inaweza kufikiwa kutoka mahali popote kwenye mtandao, sawa na anwani yako ya IPv4. Sasa angalia nini kinasikiliza:
sudo ss -tlnpState Recv-Q Local Address:Port Process
LISTEN 0 0.0.0.0:22 sshd
LISTEN 0 [::]:22 sshd
LISTEN 0 127.0.0.1:5432 postgres
LISTEN 0 [::]:8080 docker-proxySoma safu ya Local Address kwa umakini. 0.0.0.0:22 inamaanisha "sikiliza kwenye kila anwani ya IPv4." [::]:22 inamaanisha "sikiliza kwenye kila anwani ya IPv6." 127.0.0.1:5432 imefungwa kwenye loopback na si ya umma kabisa, hivyo mstari wa Postgres ni salama. Mistari miwili ya [::] inajibu mtandao mzima kupitia IPv6, na docker-proxy ni aina ambayo unaweza kusahau uliianza.
Programu nyingi (daemons) hufungwa kwenye :: kuanzia mwanzo, kwa sababu kwenye Linux socket ya :: kwa kawaida hukubali IPv4 pia. Hivyo, hali ya kawaida ya seva mpya ni "jibu kwenye stack zote mbili, kila mahali." Firewall yako ndiyo kitu pekee kinachozuia jambo hilo, ndiyo maana firewall inayoziona stack moja tu ni tatizo kubwa.
Chanzo halisi cha pengo la IPv6
Kuna vyanzo vinne vya kawaida. Kwenye seva fulani, unaweza kuwa na kimoja kati ya hivyo au zaidi kwa wakati mmoja.
1. Firewall ya cloud inayochuja IPv4 pekee. Firewall nyingi za wasanii na bidhaa za security-group zilivuka ukuaji wake kwenye IPv4, hivyo hupuuza IPv6 au zinahitaji sheria za IPv6 tofauti ambazo lazima uongeze kwa mkono. Ikiwa firewall yako pekee ni ile iliyo kwenye dashboard ya mtoa huduma na haikui cover IPv6, huduma zako za [::] ziko wazi bila kujali kile kinachosemwa kuhusu port 22 kwenye IPv4. Soma nyaraka za firewall ya mtoa huduma wako na utafute neno IPv6 mahususi.
2. iptables iliyoandikwa kwa mkono bila ip6tables. Amri ya iptables inagusa majedwali ya IPv4 pekee. IPv6 ina amri tofauti kabisa, ip6tables, ikiwa na sheria zake mbalimbali. Ikiwa uliandika script ya firewall yenye mistari ya iptables -A INPUT ... na ukashindwa kuandika sheria za ip6tables zinazoendana nazo, firewall yako ya IPv6 itakuwa tupu, na INPUT chain tupu yenye sera ya ACCEPT itaruhusu kila kitu:
sudo ip6tables -L INPUT -nChain INPUT (policy ACCEPT)
target prot opt source destinationMatokeo hayo ndiyo mtego wote kwenye skrini moja. IPv4 inachujwa, lakini IPv6 inakubali kila kitu.
3. Docker kuchapisha (publishing) ports moja kwa moja kupitia firewall yako. Unaporun docker run -p 8080:80, Docker inaweka sheria zake kabla ya UFW, hivyo port iliyochapishwa inaweza kufikiwa hata wakati ufw status inasema port hiyo imekataliwa, na kwenye Docker ya kisasa hali hii pia inatumika kwenye IPv6. Kwa nini Docker inavuka UFW, na jinsi ya kuchuja ports za container kwa usahihi inaelezea mfumo huo na marekebisho yake. Tazama misingi ya Docker Compose kwenye VPS ili kujua jinsi ports hizi zinavyotangazwa.
4. UFW ikiwa IPv6 imezimwa. UFW inashughulikia IPv6, lakini ni pale tu inapoelekezwa. Angalia swichi:
grep IPV6 /etc/default/ufwUbuntu ya kisasa inakuja na IPV6=yes, hivyo UFW inatumia kila sheria kwenye stack zote mbili. Ukiona IPV6=no, kutoka kwenye image ya zamani au mwongozo wa zamani, kila sheria ya UFW uliyoandika ni ya IPv4 pekee, na IPv6 inaachwa bila kudhibitiwa.
Angalia kile unachofichua
Usikisia. Pima kutoka nje. Kwanza orodhesha wasikilizaji (listeners) wako na uandike kila mmoja aliyeunganishwa kwenye :::
sudo ss -tlnp | grep '::'Kisha, kutoka mashine nyingine, unganishwa na anwani ya umma ya IPv6 ya seva na jaribu port unayoamini imefungwa:
curl -6 -v http://[2001:db8:2a::1]:8080/Ikiwa itarudisha ukurasa au banner, port hiyo imefunguliwa kwenye IPv6. Port iliyofungwa itakupa Connection refused au timeout. Ili kupata picha kamili, skani anwani ya IPv6 kwa kutumia nmap kutoka nje ya seva:
nmap -6 2001:db8:2a::1Kila port ambayo nmap inaonyesha kuwa imefunguliwa kwenye IPv6 ni port ambayo mtandao mzima unaweza kuifikia, bila kujali skani yako ya IPv4 ilionyesha nini. Kulinganisha skani za IPv4 na IPv6 kwa pamoja ndiyo njia ya haraka zaidi ya kupata pengo: chochote kilichofunguliwa kwenye -6 lakini kimefungwa kwenye IPv4 ni huduma ambayo firewall yako imeiacha.
Funga pengo
Fanya UFW iweze kuimarisha stack zote mbili, na iwe na sera ya kuzuia kwa kima default. Hakikisha mabadiliko yamefanyika, kisha weka sera ya kuzuia (deny) kwa pakio zinazoingia (inbound) na ruhusu tu zile unazohitaji:
sudo sed -i 's/^IPV6=no/IPV6=yes/' /etc/default/ufw
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verboseIkiwa UFW ilikuwa tayari inafanya kazi wakati ulibadilisha IPV6=yes, mabadiliko hayatatekelezwa hadi uendeshe sudo ufw reload.
ufw status inaorodhesha kila sheria mara mbili, mara moja kawaida na mara nyingine ikiwa na kiambishi cha (v6). Unapoona mistari ya (v6), UFW inachuja IPv6:
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)Ikiwa unasimamia iptables kwa mkono, nakili kila sheria kwenye ip6tables, au hamia kwenye nftables, ambapo majedwali yake ya inet yanashughulikia IPv4 na IPv6 sehemu moja na kuondoa aina hii ya makosa. Jedwali moja la kichujio cha nftables inet ndio suluhisho safi zaidi unapoandika sheria zako mwenyewe.
Funga huduma usizozitaka ziwe za hadhara kwenye loopback. Database, jopo la usimamizi, au sehemu ya vipimo (metrics endpoint) mara nyingi haihitaji anwani ya hadhara. Iunganishe (bind) kwenye 127.0.0.1 na ::1 ili isisikilize kamwe kwenye anwani inayoweza kufikiwa (routable address). Kwa Postgres, weka listen_addresses = 'localhost'. Kwa seva ya programu (app server), iunganishe kwenye 127.0.0.1 na weka reverse proxy mbele yake. Kufunga msikilizaji (listener) ni bora kuliko kuweka firewall, kwa sababu hapo hakutakuwa na kitu cha kufikia.
Usitegemee UFW kulinda bandari (ports) zilizochapishwa na Docker. Chapisha bandari za kontena kwenye anwani mahususi badala ya kila interface, kwa mfano -p 127.0.0.1:8080:80, ili bandari hiyo ifikiwe tu kutoka kwenye host na kile unachochagua kuipitisha (proxy) kwake. Kontena inapohitaji kuwa ya hadhara, iweke nyuma ya reverse proxy ya Traefik na chapisha proxy pekee, si kila programu.
Ongeza sheria za IPv6 kwenye firewall ya mtoa huduma wako, au kubali kuwa hiyo si firewall yako kwa ajili ya IPv6 na uache UFW au nftables kwenye host zifanye kazi hiyo badala yake.
Hakikisha kuwa umefunga kabisa
Run tena jaribio la nje baada ya mabadiliko yako:
curl -6 -v http://[2001:db8:2a::1]:8080/
nmap -6 2001:db8:2a::1Port iliyojibu hapo awali sasa inapaswa kukataa au kuleta time out, na nmap inapaswa kuripoti kuwa imefiltered au closed. Ikiwa port bado iko open, rudi nyuma na uhakiki vyanzo vinne vilivyotajwa hapo juu: huduma bado imefungwa kwenye :: bila sheria mbele yake, sheria ya Docker iliyo mbele ya UFW, au firewall ya mtoa huduma ambayo haikuona IPv6 kabisa.
Kuweka huduma nyeti nje kabisa ya internet ya umma ni njia salama zaidi. Weka SSH na admin panels nyuma ya WireGuard VPN na uweke firewall kwenye port zake ili zijibu kwenye tunnel pekee, na suala la kuonekana kwa IPv6 halitawahusu tena. Ili kupunguza kasi ya brute-force scans zinazoshambulia sehemu zilizo wazi, tumia Fail2ban mbele ya SSH juu ya firewall ya default-deny.
Ikiwa unataka kujifunza zaidi kuhusu ports, what ports are and how services listen ni mwongozo wa kusoma kwanza.
FAQ
Je, UFW huzuia IPv6 kwa kimawazo?
Kwenye toleo la kisasa la Ubuntu 24.04, ndiyo. UFW husoma IPV6=yes kutoka /etc/default/ufw na kutumia kila sheria kwenye IPv4 na IPv6, na ufw status huonyesha sheria za IPv6 kwa kiambishi cha (v6). Tatizo hutokea wakati IPV6=no (kutoka picha ya zamani au mwongozo wa zamani), unapotegemea firewall ya mtoa huduma inayochuja IPv4 pekee, au wakati Docker inachapisha port inayopita UFW. Angalia mipangilio kwa kutumia grep IPV6 /etc/default/ufw.
Nifanye nini ili kuona kile VPS yangu kinachofichua kwenye IPv6?
Run sudo ss -tlnp na uandike kila msikilizaji (listener) ambaye anwani yake ya ndani inaanza na [::], ikimaanisha anajibu kwenye kila interface ya IPv6. Kisha, kutoka kwenye mashine nyingine, jaribu anwani ya umma ya IPv6 ya seva moja kwa moja kwa kutumia curl -6 -v http://[YOUR:IPV6::ADDR]:PORT/, au iskani kwa kutumia nmap -6 YOUR:IPV6::ADDR. Port yoyote iliyo wazi kwenye skani ya IPv6 lakini imefungwa kwenye IPv4 ndiyo pengo lako.
Kwa nini naweza kufikia port ya Docker container yangu wakati UFW inasema imezuiwa?
Docker huweka sheria zake za firewall kabla ya UFW unapotumia -p kuchapisha port, hivyo port iliyochapishwa inaweza kufikiwa hata kama ufw status inaorodhesha kuwa imezuiwa. Hii hutokea kwenye IPv4, na kwenye IPv6 pia ikiwa msaada wa IPv6 wa Docker umewashwa. Chapisha kwenye anwani maalum kama -p 127.0.0.1:8080:80, au weka container nyuma ya reverse proxy na chapisha proxy pekee.
Je, bado ninahitaji firewall ya IPv6 ikiwa firewall yangu ya IPv4 imara?
Ndiyo. IPv4 na IPv6 ni stack tofauti za mtandao zenye sheria tofauti za firewall. Seti kamili ya sheria za IPv4 haifanyi kazi kwa trafiki ya IPv6. Ikiwa VPS yako ina anwani ya umma ya IPv6, na karibu zote zina, basi huduma yoyote inayosikiliza kwenye :: itaendelea kufikiwa kupitia IPv6 hadi sheria ya firewall ya IPv6 au ufungaji wa loopback iweze kuizuia.
Nifanye nini ili huduma isisikilize kwenye IPv4 pekee, au localhost pekee?
Weka anwani ya ufungaji (bind address) ya huduma hiyo kwenye konfigireti yake. Fungia kwenye 127.0.0.1 kwa IPv4 loopback pekee, au 0.0.0.0 kwa anwani zote za IPv4 bila msikilizaji wa IPv6. Postgres hutumia listen_addresses, SSH hutumia ListenAddress, na karibu seva nyingi za programu zina flag ya host au bind. Thibitisha matokeo kwa sudo ss -tlnp na uhakikishe kuwa Local Address haionyeshi tena [::].