Kial portsurbazo ŝanĝiĝas kiam vi rulas ĝin per sudo
Kiam krudaj ŝtopiloj ne haveblas, Nmap silente anstataŭigas SYN-surbazon per TCP connect-surbazo, do root kaj ordinara uzanto mezuras malsamajn vojojn.
Nmap ne ĉiam sendas la paketon, kiun vi kredas ke vi petis. Kiam krudaj ŝtopiloj ne haveblas, ĝi anstataŭigas la defaŭltan SYN-surbazon per TCP connect-surbazo, do rulo kiel via ordinara uzanto kaj rulo sub sudo povas respondi malsamajn demandojn pri la sama pordo. La rezultoj aspektas kiel permesa problemo, kaj kutime ili estas ŝanĝo de metodo. Igni la metodon eksplicita estas la sola maniero kompari la du rulojn entute.
Du sondoj, unu pordo, malsamaj kodaj vojoj
SYN-surbazo mem konstruas la TCP-kapon, sendas ĝin el kruda ŝtopilo kaj legas la respondon de la drato antaŭ ol la TCP-stako de la kerno iam registras finitan konekton. Connect-surbazo petas la operaciumon malfermi ordinaran ŝtopilon kaj raportas tion, kion connect() redonas. Ambaŭ povas nomi pordon malfermita, sed nur unu lasas duonmalfermitan provon kaj nur unu submetiĝas al politiko je ŝtopila nivelo ligita al la sendanta procezo.
La kruda vojo bezonas CAP_NET_RAW, kaj tial la defaŭlta surbazo silente malboniĝas kiam tiu kapablo mankas. La propra referenco pri surbazaj teknikoj de Nmap dokumentas la anstataŭigon: connect-surbazo estas la rezervo ĉar ĝi tute ne bezonas specialajn rajtojn. La interŝanĝo okazas sen averto en la plej multaj ruloj, kaj ĝuste tio faras ĝin tiel facile misleĝebla. Post kiam vi scias, ke la rezervo ekzistas, “malfermita kiel root, fermita kiel uzanto” ĉesas soni kiel permesa cimo kaj komencas soni kiel du malsamaj mezuroj.
Kion sudo efektive ŝanĝas en la surbazo
Altigi rajtojn restarigas la krudan ŝtopilan vojon, kaj tio ŝanĝas pli ol la verdikton. Elektado de fonta pordo, paketa tempigo, retranssenda konduto kaj la maniero klasifiki filtritan respondon ĉiuj venas el malsama kodo. Meza kesto, kiu limigas SYN-ojn, traktas la du rulojn malegale eĉ kiam la cela gastiganto estas identa.
Protokolado sur la cela flanko ankaŭ diverĝas. Finita manpremo videblas al la servo kaj al iu ajn ŝtopila kontado, dum restarigita duonmalfermita sondo ofte ne. Se vi komparas rulojn kontraŭ gastiganto kies protokolojn vi ankaŭ legas, parto de la diferenco, kiun vi vidas, estas la observado mem.
Tenu la metodon konstanta en ambaŭ ruloj
Devigu la saman teknikon en ambaŭ alvokoj kaj la komparo komencas signifi ion. La flago -sT petas connect-surbazon eksplice, -Pn forigas gastigantan malkovron, -n forigas nomrezolucion, kaj unu -p forigas diferencojn de la porda listo.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Anstataŭigu la adreson kaj la pordon per gastiganto, kiun vi rajtas testi; la dokumentara gamo supre estas lokokupilo, ne celo. Se la du ruloj nun kongruas, la origina diferenco venis de la surbaza metodo. Se ili ankoraŭ malkongruas, io alia klasifikas la trafikon, kaj la sekva sekcio estas kie rigardi.
Konta kunteksto ne estas nur permesa flago
VPN-ekspansio povas klasifiki paketojn laŭ UID, laŭ cgroup aŭ laŭ regulo ligita al la procezo, kiu malfermis la ŝtopilon. Tiam root-trafiko kaj uzantotrafiko eliras per malsamaj enkursigaj tabeloj aŭ trafas malsamajn regulajn arojn, kaj neniu kvanto da surbazmetoda disciplino ilin repacigas.
Ekzamenu la politikon anstataŭ la rajton. En Linux nftables esprimas tion per meta skuid kaj iptables per la posedanta kongruo, kaj ĉiu el ili povas sendi unu UID suben tra tunelo dum la alia daŭre uzas la fizikan defaŭltan vojon.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Konfirmu la sondan antaŭ ol kompari rezultojn
Antaŭ ol fari konkludojn, pruvu, kiu sondo ruliĝis. Nmap nomas la teknikon en sia propra eligo, kaj --reason aldonas la pruvon malantaŭ ĉiu stato, kio estas la parto, kiu diras al vi, ĉu manpremo efektive finiĝis.
nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw
Du ruloj, kiuj raportas la saman staton pro malsamaj kialoj, ne estas kontraŭdiro, kaj du ruloj, kiuj raportas malsamajn statojn pro la sama kialo, montras al enkursigo aŭ politiko anstataŭ al la surbazo. Tenu celon, pordon, nomspacon kaj tempigon identaj, poste ŝanĝu unu variablon samtempe. Ruli la servon kiel root ne estas la riparo por politika malkongruo; esprimi la intencitan politikon per la posedanto de la servo estas.