Pale e mabapi le lipakete tsa DNS tse sieo ho tsoa ho tšehetso ea tekheniki ea Google Cloud

Ho tsoa ho Google Blog Editor: Na u kile ua ipotsa hore na lienjiniere tsa Google Cloud Technical Solutions (TSE) li sebetsana joang le likopo tsa hau tsa tšehetso? Baenjineri ba Tšehetso ea Setegeniki ba TSE ba na le boikarabello ba ho tseba le ho lokisa mehloli ea mathata e tlalehiloeng ke basebelisi. A mang a mathata ana a bonolo, empa ka linako tse ling u kopana le tekete e hlokang tlhokomelo ea lienjiniere tse 'maloa hang-hang. Sengoliloeng sena, e mong oa basebetsi ba TSE o tla re joetsa ka bothata bo le bong bo thata bo tsoang tšebetsong ea hae ea morao-rao - ho haella ha lipakete tsa DNS. Paleng ena, re tla bona hore na baenjiniere ba khonne ho rarolla boemo joang, le hore na ke lintho life tse ncha tseo ba ithutileng tsona ha ba ntse ba lokisa phoso. Re tšepa hore pale ena e ke ke ea u ruta feela ka bothata bo tebileng, empa hape e tla u fa leseli mabapi le mekhoa ea ho kenya tekete ea tšehetso ho Google Cloud.

Pale e mabapi le lipakete tsa DNS tse sieo ho tsoa ho tšehetso ea tekheniki ea Google Cloud

Ho rarolla mathata ke saense le bonono. Tsohle li qala ka ho haha ​​​​kakanyo mabapi le lebaka la boitšoaro bo sa tloaelehang ba tsamaiso, ka mor'a moo e lekoa bakeng sa matla. Leha ho le joalo, pele re etsa khopolo-taba, re tlameha ho hlalosa ka ho hlaka le ho rala bothata ka nepo. Haeba potso e utloahala e sa hlaka, joale u tla tlameha ho sekaseka ntho e 'ngoe le e' ngoe ka hloko; Ena ke "bonono" ba ho rarolla mathata.

Tlas'a Google Cloud, lits'ebetso tse joalo li rarahana le ho feta, kaha Google Cloud e leka ka hohle ho netefatsa boinotši ba basebelisi ba eona. Ka lebaka lena, baenjiniere ba TSE ha ba na mokhoa oa ho fetola litsamaiso tsa hau, kapa bokhoni ba ho bona litlhophiso ka bophara joalo ka ha basebelisi ba etsa. Ka hona, ho leka leha e le efe ea mehopolo ea rona, rona (baenjiniere) re ke ke ra fetola tsamaiso ka potlako.

Basebelisi ba bang ba lumela hore re tla lokisa ntho e 'ngoe le e' ngoe joalo ka mechini ea ts'ebeletso ea koloi, 'me re romelle ID feela ea mochini o sebetsang, athe ha e le hantle ts'ebetso e etsahala ka mokhoa oa moqoqo: ho bokella tlhahisoleseling, ho theha le ho netefatsa (kapa ho hana) menahano, 'me, qetellong, mathata a qeto a thehiloe puisanong le moreki.

Bothata boo ho buuwang ka bona

Kajeno re na le pale e nang le pheletso e ntle. Le leng la mabaka a ho rarolla ka katleho nyeoe e reriloeng ke tlhaloso e qaqileng haholo le e nepahetseng ea bothata. Ka tlase u ka bona kopi ea tekete ea pele (e hlophisitsoeng ho pata litaba tsa lekunutu):
Pale e mabapi le lipakete tsa DNS tse sieo ho tsoa ho tšehetso ea tekheniki ea Google Cloud
Molaetsa ona o na le lintlha tse ngata tsa bohlokoa bakeng sa rona:

  • VM e khethehileng e boletsoeng
  • Bothata ka boeona bo bontšitsoe - DNS ha e sebetse
  • E bontšoa moo bothata bo iponahatsang - VM le setshelo
  • Mehato eo mosebelisi a e nkileng ho tseba bothata e bonts'itsoe.

Kopo e ngolisitsoe e le "P1: Tšusumetso e Bohlokoa - Tšebeletso e sa sebelisoeng tlhahiso", e bolelang ho lekola boemo kamehla 24/7 ho latela morero oa "Latela Letsatsi" (o ka bala ho eketsehileng ka lintho tse tlang pele tsa likopo tsa basebelisi), ka phetisetso ea eona ho tloha sehlopheng se le seng sa tšehetso ea tekheniki ho ea ho se seng ka nako e 'ngoe le e 'ngoe ea libaka. Ebile, nakong eo bothata bo fihlang sehlopheng sa rona sa Zurich, bo ne bo se bo pota-potile lefatše. Ka nako ena, mosebedisi o ne a nkile mehato ea ho fokotsa, empa o ne a tšaba ho pheta-pheta boemo ba tlhahiso, kaha sesosa sa motheo se ne se e-s'o fumanoe.

Ha tekete e fihla Zurich, re ne re se re ntse re e-na le lintlha tse latelang:

  • Litaba /etc/hosts
  • Litaba /etc/resolv.conf
  • fihlela qeto e iptables-save
  • E phuthetsoe ke sehlopha ngrep pcap file

Ka data ena, re ne re itokiselitse ho qala "mokhahlelo oa lipatlisiso" le oa ho rarolla mathata.

Mehato ea rona ea pele

Pele ho tsohle, re ile ra hlahloba li-log le boemo ba seva sa metadata mme ra etsa bonnete ba hore se sebetsa ka nepo. Seva ea metadata e arabela atereseng ea IP 169.254.169.254 'me, har'a lintho tse ling, e ikarabella ho laola mabitso a marang-rang. Re boetse re hlahlobile habeli hore firewall e sebetsa ka nepo le VM mme ha e thibe lipakete.

E ne e le bothata bo itseng bo makatsang: tlhahlobo ea nmap e hanne mohopolo oa rona oa mantlha mabapi le tahlehelo ea lipakete tsa UDP, kahoo ka likelello re ile ra tla ka likhetho tse ling tse 'maloa le mekhoa ea ho li hlahloba:

  • Na lipakete li lahleloa ka boikhethelo? => Sheba melao ea iptables
  • Na ha e nyane haholo? MTU? => Sheba tlhahiso ip a show
  • Na bothata bo ama lipakete tsa UDP feela kapa TCP hape? => Tloha dig +tcp
  • Na lipakete tse entsoeng ka cheka li khutlisitsoe? => Tloha tcpdump
  • Na libdns e sebetsa hantle? => Tloha strace ho lekola phetiso ea lipakete ka nqa tsohle

Mona re etsa qeto ea ho letsetsa mosebedisi ho rarolla mathata a phela.

Nakong ea mohala re khona ho sheba lintho tse 'maloa:

  • Ka mor'a licheke tse 'maloa ha re kenye melao ea iptables lethathamong la mabaka
  • Re hlahloba marang-rang a marang-rang le litafole tsa litsela, 'me re hlahlobe habeli hore MTU e nepahetse
  • Re fumana seo dig +tcp google.com (TCP) e sebetsa kamoo e lokelang, empa dig google.com (UDP) ha e sebetse
  • Ho khannela hole tcpdump e ntse e sebetsa dig, re fumana hore lipakete tsa UDP lia khutlisoa
  • Rea leleka strace dig google.com 'me re bona kamoo ho cheka mehala ka nepo sendmsg() и recvms(), leha ho le joalo ea bobeli e sitisoa ke nako ea nako

Ka bomalimabe, pheletso ea ts'ebetso e fihla 'me re qobelloa ho fetisetsa bothata sebakeng se tlang sa nako. Kopo, leha ho le joalo, e ile ea tsosa thahasello sehlopheng sa rona, 'me mosebetsi-'moho o fana ka tlhahiso ea ho theha sephutheloana sa pele sa DNS ho sebelisa scrapy Python module.

from scapy.all import *

answer = sr1(IP(dst="169.254.169.254")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="google.com")),verbose=0)
print ("169.254.169.254", answer[DNS].summary())

Sekhechana sena se theha pakete ea DNS mme se romela kopo ho seva sa metadata.

Mosebelisi o tsamaisa khoutu, karabo ea DNS e khutlisoa, 'me kopo e e fumana, e tiisa hore ha ho na bothata boemong ba marang-rang.

Ka mor'a "leeto le leng la lefats'e," kopo e khutlela sehlopheng sa rona, 'me ke e fetisetsa ho' na ka ho feletseng, ke nahana hore ho tla ba bonolo ho mosebedisi haeba kopo e khaotsa ho potoloha ho tloha sebakeng se seng ho ea ho se seng.

Ho sa le joalo, mosebelisi ka mosa o lumela ho fana ka sets'oants'o sa setšoantšo sa sistimi. Tsena ke litaba tse monate haholo: bokhoni ba ho itlhahloba tsamaiso ka boeona bo etsa hore ho rarolla mathata ho potlake haholo, hobane ha ke sa tlameha ho kopa mosebelisi ho tsamaisa litaelo, nthomelle liphetho le ho li sekaseka, nka etsa tsohle ka bonna!

Basebetsi-'moho le 'na ba qala ho ntlholla hanyenyane. Nakong ea lijo tsa mots'eare re buisana ka phetoho, empa ha ho motho ea tsebang hore na ho etsahalang. Ka lehlohonolo, mosebelisi ka boeena o se a nkile mehato ea ho fokotsa litlamorao mme ha a potlake, kahoo re na le nako ea ho arola bothata. Mme kaha re na le setšoantšo, re ka matha liteko life kapa life tse re khahlang. E kholo!

Ho kgutlela morao

E 'ngoe ea lipotso tse tsebahalang haholo tsa lipuisano bakeng sa maemo a moenjiniere oa sistimi ke: "Ho etsahala'ng ha u ping www.google.com? Potso e ntle, kaha mokhethoa o hloka ho hlalosa ntho e 'ngoe le e' ngoe ho tloha ho khetla ho ea sebakeng sa mosebedisi, ho ea ho kernel ea tsamaiso ebe ho ea marang-rang. Kea bososela: ka linako tse ling lipotso tsa lipuisano li fetoha tsa bohlokoa bophelong ba 'nete ...

Ke etsa qeto ea ho sebelisa potso ena ea HR bothateng ba hajoale. Ka mantsoe a mang, ha u leka ho tseba lebitso la DNS, lintho tse latelang lia etsahala:

  1. Sesebelisoa se bitsa laeborari ea sistimi joalo ka libdns
  2. libdns e lekola tlhophiso ea sistimi eo seva ea DNS e lokelang ho ikopanya le eona (ho setšoantšo sena ke 169.254.169.254, seva sa metadata)
  3. libdns e sebelisa mehala ea sistimi ho theha sokete ea UDP (SOKET_DGRAM) le ho romella lipakete tsa UDP ka potso ea DNS ka mahlakore ka bobeli.
  4. Ka sebopeho sa sysctl u ka lokisa stack ea UDP boemong ba kernel
  5. Kernel e sebelisana le hardware ho fetisetsa lipakete holim'a marang-rang ka sebopeho sa marang-rang
  6. Hypervisor e tšoara le ho fetisetsa pakete ho seva sa metadata ha e kopana le eona
  7. Seva ea metadata, ka boselamose ba eona, e khetha lebitso la DNS mme e khutlisa karabo e sebelisa mokhoa o tšoanang

Pale e mabapi le lipakete tsa DNS tse sieo ho tsoa ho tšehetso ea tekheniki ea Google Cloud
E-re ke u hopotse hore na ke likhopolo-taba life tseo re seng re li hlahlobile:

Khopolo-taba: Lilaebrari tse robehileng

  • Teko ea 1: matha strace tsamaisong, hlahloba hore na cheka e bitsa mehala e nepahetseng ea sistimi
  • Sephetho: Mehala e nepahetseng ea sistimi e bitsoa
  • Teko ea 2: ho sebelisa srapy ho lekola hore na re ka tseba mabitso ho feta lilaebraring tsa sistimi
  • Sephetho: re ka khona
  • Teko ea 3: matha rpm -V sephutheloana sa libdns le lifaele tsa laeborari ea md5sum
  • Sephetho: khoutu ea laeborari e ts'oana ka botlalo le khoutu e ts'ebetsong ea ts'ebetso
  • Teko ea 4: beha setšoantšo sa metso ea mosebelisi ho VM ntle le boits'oaro bona, tsamaisa chroot, bona hore na DNS ea sebetsa
  • Sephetho: DNS e sebetsa ka nepo

Qetello e ipapisitse le liteko: bothata ha bo eo lilaeboraring

Khopolo-taba: Ho na le phoso litlhophisong tsa DNS

  • Teko ea 1: hlahloba tcpdump 'me u bone hore na lipakete tsa DNS li rometsoe' me li khutlisetsoa ka nepo ka mor'a ho cheka
  • Sephetho: lipakete li fetisoa ka nepo
  • Teko ea 2: hlahloba habeli ho seva /etc/nsswitch.conf и /etc/resolv.conf
  • Sephetho: tsohle li nepahetse

Qetello e ipapisitse le liteko: bothata ha bo mabapi le tlhophiso ea DNS

Khopolo-taba: mantlha e senyehile

  • Teko: kenya kernel e ncha, hlahloba signature, qala bocha
  • Sephetho: boitšoaro bo ts'oanang

Qetello e ipapisitse le liteko: thollo ha e senyehe

Khopolo-taba: boitšoaro bo fosahetseng ba marang-rang a basebelisi (kapa sebopeho sa marang-rang sa hypervisor)

  • Teko ea 1: Sheba litlhophiso tsa firewall ea hau
  • Sephetho: firewall e fetisa lipakete tsa DNS ho moamoheli le GCP
  • Teko ea 2: thibela sephethephethe le ho lekola ho nepahala ha phetisetso le ho khutla ha likopo tsa DNS
  • Sephetho: tcpdump e tiisa hore moamoheli o fumane lipakete tsa ho khutla

Qetello e ipapisitse le liteko: bothata ha bo teng marang-rang

Khopolo-taba: seva sa metadata ha se sebetse

  • Teko ea 1: hlahloba li-database tsa metadata bakeng sa li-anomalies
  • Sephetho: ha ho na li-anomalies ho li-logs
  • Teko ea 2: Fetisa seva ea metadata ka dig @8.8.8.8
  • Sephetho: Qeto e robehile ntle le ho sebelisa seva ea metadata

Qetello e ipapisitse le liteko: bothata ha bo mabapi le seva sa metadata

Ntlha ea bohlokoa: re lekile li-subsystem tsohle ntle le litlhophiso tsa nako ea ho sebetsa!

Ho kenella ka har'a Litlhophiso tsa Kernel Runtime

Ho lokisa tikoloho ea ts'ebetso ea kernel, o ka sebelisa likhetho tsa mela ea taelo (grub) kapa sebopeho sa sysctl. Ke ile ka sheba ka hare /etc/sysctl.conf mme ak'u nahane feela, ke fumane litlhophiso tse 'maloa tsa tloaelo. Ha ke utloa eka ke tšoere ntho e itseng, ke ile ka lahla litlhophiso tsohle tseo e seng tsa marang-rang kapa tseo e seng tsa tcp, ke sala le litlhophiso tsa lithaba. net.core. Eaba ke ea moo tumello ea moamoheli e neng e le ho VM mme ka qala ho sebelisa litlhophiso ka bonngoe, ka mor'a e 'ngoe, ka VM e robehileng, ho fihlela ke fumana molato:

net.core.rmem_default = 2147483647

Ke ena, tlhophiso e robehileng ea DNS! Ke fumane sebetsa sa polao. Empa ke hobane’ng ha see se etsahala? Ke ne ke ntse ke hloka sepheo.

Saese ea mantlha ea pakete ea DNS e hlophisoa ka net.core.rmem_default. Boleng bo tloaelehileng bo kae-kae ho pota 200KiB, empa haeba seva sa hau se fumana lipakete tse ngata tsa DNS, u ka 'na ua batla ho eketsa boholo ba buffer. Haeba buffer e tletse ha pakete e ncha e fihla, mohlala, hobane ts'ebeliso ha e sebetse ka potlako, joale u tla qala ho lahleheloa ke lipakete. Moreki oa rona o ile a eketsa boholo ba buffer ka nepo hobane a ne a tšaba tahlehelo ea data, kaha o ne a sebelisa kopo ea ho bokella metrics ka lipakete tsa DNS. Boleng boo a bo behileng e ne e le boholo bo ka khonehang: 231-1 (haeba e behiloe ho 231, kernel e tla khutlisa "KGANGISO E SA HLOKAHANG").

Ka tšohanyetso ke ile ka hlokomela hore na hobaneng nmap le scapy li sebetsa ka nepo: li ne li sebelisa li-sockets tse tala! Li-sockets tse tala li fapane le li-sockets tse tloaelehileng: li feta li-iptables, 'me ha li na buffer!

Empa ke hobane'ng ha "buffer e kholo haholo" e baka mathata? Ho hlakile hore ha e sebetse kamoo e reriloeng kateng.

Ka nako ena ke ne ke khona ho hlahisa bothata ho li-kernel tse ngata le kabo e ngata. Bothata bo se bo hlahile ho 3.x kernel mme joale bo boetse bo hlahile ho 5.x kernel.

Ha e le hantle, nakong ea ho qala

sysctl -w net.core.rmem_default=$((2**31-1))

DNS e emisitse ho sebetsa.

Ke ile ka qala ho batla litekanyetso tsa ho sebetsa ka mokhoa o bonolo oa ho batla oa binary mme ka fumana hore sistimi e sebetsa le 2147481343, empa palo ena e ne e le palo e se nang moelelo ho nna. Ke ile ka etsa tlhahiso ea hore moreki a leke nomoro ena, 'me a araba hore tsamaiso e sebetsa le google.com, empa e ntse e fana ka phoso ka libaka tse ling, kahoo ke ile ka tsoela pele ka lipatlisiso tsa ka.

Ke kentse dropwatch, sesebelisoa se neng se lokela ho sebelisoa pejana: se bontša hantle hore na pakete e fella kae ka har'a kernel. Molato e ne e le mosebetsi udp_queue_rcv_skb. Ke khoasolla mehloli ea kernel mme ka eketsa e 'maloa mesebetsi printk ho latela hore na pakete e fella kae. Ka potlako ke ile ka fumana boemo bo nepahetseng if, mme a e sheba feela ka nako e itseng, hobane ke nakong eo ntho e 'ngoe le e' ngoe e qetellang e kopane ka setšoantšo se feletseng: 231-1, palo e se nang moelelo, sebaka se sa sebetseng ... E ne e le sengoathoana sa khoutu ho __udp_enqueue_schedule_skb:

if (rmem > (size + sk->sk_rcvbuf))
		goto uncharge_drop;

Ka kōpo hlokomela:

  • rmem ke mofuta oa int
  • size ke ea mofuta oa u16 (e sa ngolisoang ka leshome le metso e tšeletseng ea int) mme e boloka boholo ba pakete
  • sk->sk_rcybuf ke ea mofuta oa int mme e boloka boholo ba buffer eo, ka tlhaloso, e lekanang le boleng ba net.core.rmem_default

Ha sk_rcvbuf e atamela 231, ho akaretsa boholo ba pakete e ka fella ka palo e felletseng ya ho tlala. 'Me kaha ke int, boleng ba eona bo fetoha bobe, kahoo boemo bo fetoha' nete ha e lokela ho ba leshano (o ka bala haholoanyane ka sena ho kgokahanyo).

Phoso e ka lokisoa ka mokhoa o sa reng letho: ka ho lahla unsigned int. Ke sebelisitse tokiso mme ka qala sistimi hape mme DNS ea sebetsa hape.

Tatso ya tlholo

Ke ile ka fetisetsa seo ke se fumaneng ho moreki 'me ka romela LKML patch ea kernel. Ke thabile: karolo e 'ngoe le e 'ngoe ea puzzle e lumellana, nka hlalosa hantle hore na ke hobane'ng ha re hlokometse seo re se boneng,' me habohlokoa le ho feta, re khonne ho fumana tharollo ea bothata ka lebaka la ts'ebetso ea rona ea sehlopha!

Ke habohlokoa ho hlokomela hore nyeoe e bile teng ka seoelo, 'me ka lehlohonolo ke ka seoelo re fumanang likōpo tse rarahaneng joalo ho tsoa ho basebelisi.

Pale e mabapi le lipakete tsa DNS tse sieo ho tsoa ho tšehetso ea tekheniki ea Google Cloud


Source: www.habr.com

Eketsa ka tlhaloso