Hosts.allow – ukaz za Linux

Iskanje dovoljenih gostiteljev

Verjetno ste pristali tukaj in iskali način za ogled gostiteljev (drugih računalnikov), ki imajo dovoljenje za dostop do vašega Linux sistem. No, razen če že niste nastavili omejitev, je verjetno vsak računalnik, ki poskuša privzeto.

Pravzaprav to ni povsem res. Brez kakršnih koli pravil, definiranih v datoteki /etc/hosts.allow ali /etc/hosts.deny, bo vaš računalnik posredoval povezave ustreznim aplikacijam. Torej, če se nekdo poskuša povezati prek SSH, bo povezava prispela v vaš sistem Linux, kjer bo predana SSH za prijavo. Če ustrezne poverilnice niso navedene, bo povezava zavrnjena.

Če so nekateri gostitelji dovoljeni ali zavrnjeni, bo Linux najprej preveril ta pravila in ugotovil, ali je treba dohodno zahtevo dovoliti. Nato bo sledilo istemu vzorcu kot prej.

Svoje dovoljene gostitelje lahko preverite tako, da navedete vsebino datoteke /etc/hosts.allow.

mačka /etc/hosts.allow. 

Če tam ne vidite ničesar, bo vaš sistem verjetno prepustil kakršno koli povezavo.

Moški, ki delajo na računalniku v pisarni
 Yuri_Arcurs/Getty Images

Uporaba datoteke Hosts.allow

Datoteka /etc/hosts.allow vam omogoča, da izberete, kateri računalniki lahko dostopajo do vašega sistema. V datoteki lahko določite preprosta pravila v golem besedilu, da svojemu računalniku poveste, kako ravna s povezavami. Za začetek ustvarite pravilo, ki omogoča vsakemu računalniku vse storitve.

VSI: VSE. 

Tako preprosto je. Potem lahko to storite tudi, če želite izključiti težaven računalnik.

VSE: VSE RAZEN 192.168.1.110. 

Obstaja več drugih ključnih besed, ki jih lahko uporabite za upravljanje različnih sklopov računalnikov. Na primer, lahko dovolite ves lokalni promet, kot je ta:

VSE: 192.168.1.0/24. 

Namesto tega lahko uporabite ključno besedo "LOCAL".

VSE: LOKALNO. 

Uporabite lahko tudi imena domen. Na primer:

VSE: .example.com. 

Tudi tukaj lahko uporabite ključno besedo "EXCEPT", da izključite potencialno problematično poddomeno.

VSE: .example.com RAZEN testiranje.example.com. 

Določite lahko tudi pravila za določene demone. Torej, če želite nadzorovati dostop SSH, bi nastavili pravila za 'sshd'.

sshd: LOKALNO. 

Datoteka hosts.allow podpira izpis demonov v isti vrstici, če so njihova pravila enaka. Na primer:

sshd, in.ftpd: LOKALNO. 

Bodite pozorni na "v". del v "in.ftpd?" To vam omogoča, da določite dohodni promet.

Potem imate možnost, da vse skupaj združite.

sshd, in.ftpd: LOKALNO RAZEN 192.168.1.110. 

To so najpogostejši načini uporabe datoteke /etc/hosts.allow v vašem sistemu Linux. Za popolno tehnično razčlenitev, kaj lahko storite z datoteko /etc/hosts.allow, nadaljujte v naslednjem razdelku.

Tehnična razčlenitev

Ta stran z navodili opisuje Linux kot preprost jezik za nadzor dostopa, ki temelji na odjemalcu (ime/naslov gostitelja, uporabniško ime) in strežnik (ime procesa, ime/naslov gostitelja) vzorce. Primeri so navedeni na koncu. Nestrpnega bralca priporočamo, da za hiter uvod preskoči na razdelek Primeri. Razširjena različica jezika za nadzor dostopa je opisana v hosts_options (5) dokument. Razširitve se vklopijo v času gradnje programa z gradnjo z —DPROCESS_OPTIONS.

V naslednjem besedilu demon je ime procesa omrežnega demonskega procesa in stranko je ime in/ali naslov gostitelja, ki zahteva storitev. Imena procesov omrežnih demonov so podana v konfiguracijski datoteki inetd.

Datoteke za nadzor dostopa

Programska oprema za nadzor dostopa se posvetuje z dvema datoteke. Iskanje se ustavi pri prvi tekmi.

Dostop bo odobren, ko se par (demon, odjemalec) ujema z vnosom v /etc/hosts.allowmapa.

V nasprotnem primeru bo dostop zavrnjen, ko se par (demon, odjemalec) ujema z vnosom v/etc/hosts.deny mapa.

V nasprotnem primeru bo dostop odobren.

Neobstoječa datoteka za nadzor dostopa se obravnava, kot da bi bila prazna datoteka. Tako lahko nadzor dostopa izklopite tako, da ne zagotovite datotek za nadzor dostopa.

Pravila za nadzor dostopa

Vsaka datoteka za nadzor dostopa je sestavljena iz nič ali več vrstic besedila. Te vrstice so obdelane po vrstnem redu videza. Iskanje se konča, ko se najde ujemanje.

Znak nove vrstice je prezrt, če je pred njim poševnica nazaj. To vam omogoča, da razdelite dolge vrstice, da jih je lažje urejati.

Prazne vrstice ali vrstice, ki se začnejo z znakom »#«, so prezrte. To vam omogoča, da vstavite komentarje in presledke, tako da so tabele lažje berljive.

Vse druge vrstice morajo ustrezati naslednji obliki, stvari med [] so neobvezne:

daemon_list: client_list [: shell_command]

daemon_list je seznam enega ali več imen demonskih procesov (vrednosti argv[0]) ali nadomestnih znakov (glejte spodaj).

odjemalec_list je seznam enega ali več imen gostiteljev, naslovov gostiteljev, vzorcev ali nadomestnih znakov (glejte spodaj), ki se bodo ujemali z imenom ali naslovom gostitelja odjemalca.

Bolj zapletene oblike daemon@host in uporabnik@gostitelj so razloženi v razdelkih o vzorcih končne točke strežnika oziroma o iskanju uporabniškega imena odjemalca.

Elementi seznama morajo biti ločeni s presledki in/ali vejicami.

Z izjemo Iskanje omrežne skupine NIS (YP)., so vsa preverjanja nadzora dostopa neobčutljiva na velike in male črke.

Vzorci

Jezik za nadzor dostopa izvaja naslednje vzorce:

Niz, ki se začne z `.' značaj. Ime gostitelja se ujema, če se zadnje komponente njegovega imena ujemajo z navedenim vzorcem. Na primer, vzorec `.tue.nl' se ujema z imenom gostitelja `wzv.win.tue.nl'.

Niz, ki se konča z `.' značaj. Naslov gostitelja se ujema, če se njegova prva številska polja ujemajo z danim nizom. Na primer, vzorec »131.155.« se ujema z naslovom (skoraj) vsakega gostitelja v omrežju univerze Eindhoven (131.155.x.x).

Niz, ki se začne z znakom `@', se obravnava kot ime omrežne skupine NIS (prej YP). A ime gostitelja se ujema, če je gostiteljski član podane omrežne skupine. Ujemanja omrežne skupine niso podprta za imena procesov demona ali uporabniška imena odjemalcev.

Izraz v obliki 'n.n.n.n/m.m.m.m' se razlaga kot par 'mreža/maska'. Naslov gostitelja IPv4 se ujema, če je 'net' enak bitnemu IN naslova in 'maske'. Na primer, vzorec omrežja/maske »131.155.72.0/255.255.254.0« se ujema z vsakim naslovom v obsegu od »131.155.72.0« do »131.155.73.255«.

Izraz v obliki `[n: n: n: n: n: n: n: n]/m' se interpretira kot par `[net]/prefixlen'. Naslov gostitelja IPv6 se ujema, če so biti `prefixlen' v `net' enaki bitom `prefixlen' naslova. Na primer, vzorec [net]/prefixlen `[3ffe: 505:2:1::]/64' se ujema z vsakim naslovom v obsegu `3ffe: 505:2:1::' do `3ffe: 505:2: 1:ffff: ffff: ffff: ffff'.

Niz, ki se začne z znakom `/', se obravnava kot a Ime datoteke. Ime ali naslov gostitelja se ujema, če se ujema s katerim koli imenom gostitelja ali vzorcem naslova, navedenim v poimenovani datoteki. Format datoteke je nič ali več vrstic z nič ali več vzorci imena gostitelja ali naslovov, ločenih s presledki. Vzorec imena datoteke je mogoče uporabiti kjer koli je mogoče uporabiti ime gostitelja ali vzorec naslova.

Nadomestna znaka »*« in »?« se lahko uporablja za ujemanje imen gostiteljev oz naslovi IP. Tega načina ujemanja ni mogoče uporabiti v povezavi z ujemanjem `net/mask', ujemanje imena gostitelja se začne z `.' ali naslov IP, ki se ujema z ».«.

Nadomestni znaki

Jezik za nadzor dostopa podpira izrecne nadomestne znake, vključno z:

  • 'VSE' — Univerzalni nadomestni znak, se vedno ujema.
  • 'LOKALNO' —Ujema se s katerim koli gostiteljem, katerega ime ne vsebuje pike.
  • 'NEZNANO' —Se ujema s katerim koli uporabnikom, katerega ime je neznano, in s katerim koli gostiteljem, katerega ime oz naslov ni znan. Ta vzorec je treba uporabljati previdno: imena gostiteljev morda niso na voljo zaradi začasnih težav z imenskim strežnikom. A omrežni naslov ne bo na voljo, ko programska oprema ne more ugotoviti, s katero vrsto omrežja se pogovarja.
  • 'ZNANO' —Se ujema s katerim koli uporabnikom, katerega ime je znano, in se ujema s katerim koli gostiteljem, katerega ime in naslov je znan. Ta vzorec je treba uporabljati previdno: imena gostiteljev morda niso na voljo zaradi začasnih težav z imenskim strežnikom. Omrežni naslov ne bo na voljo, ko programska oprema ne more ugotoviti, s katero vrsto omrežja se pogovarja.
  • 'PARANOIDNO' —Ujema se s katerim koli gostiteljem, katerega ime se ne ujema z njegovim naslovom. Ko je tcpd zgrajen z -DPARANOID (privzeti način), zavrne zahteve takšnih odjemalcev, še preden pogleda tabele za nadzor dostopa. Zgradite brez -DPARANOID, ko želite več nadzora nad takšnimi zahtevami.

'OPERATORJI'

  • 'RAZEN' —Namenjena uporaba je v obliki: `seznam_1 RAZEN seznam_2'; ta konstrukcija se ujema z vsem, kar se ujema seznam_1 razen če se ujema seznam_2. Operater EXCEPT se lahko uporablja v daemon_lists in client_lists. Operater EXCEPT je lahko ugnezden: če bi kontrolni jezik dovoljeval uporabo oklepajev, bi `a EXCEPT b EXCEPT c' razčlenil kot `(a EXCEPT (b EXCEPT c))'.
  • Ukazi lupine —Če prvo ujemajoče se pravilo nadzora dostopa vsebuje ukaz lupine, je ta ukaz podvržen % zamenjav (glejte naslednji razdelek). Rezultat izvede a /bin/sh podrejeni proces s standardnim vhodom, izhodom in napako, ki je povezan /dev/null. Določite '&' na koncu terminalski ukaz če ne želite čakati, dokler se ne zaključi. Ukazi lupine se ne smejo zanašati na nastavitev PATH datoteke inetd. Namesto tega bi morali uporabiti absolutna imena poti ali pa naj se začnejo z izrecnim stavkom PATH=whatever.

The hosts_options(5) dokument opisuje alternativni jezik, ki uporablja ukazno polje lupine na drugačen in nezdružljiv način.

% razširitev

V ukazih lupine so na voljo naslednje razširitve:

  • %a (%A) — odjemalec (strežnik) gostitelj naslov.
  • %c — Podatki o odjemalcu: uporabnik@gostitelj, uporabnik@naslov, ime gostitelja ali samo naslov, odvisno od tega, koliko informacij je na voljo.
  • %d — Ime procesa demona (vrednost argv[0]).
  • %h (%H) — Ime ali naslov gostitelja odjemalca (strežnika), če ime gostitelja ni na voljo.
  • %n (%N) — Ime gostitelja odjemalca (strežnika) (ali "neznano" ali "paranoično").
  • %p — ID procesa demona.
  • %s — Podatki o strežniku: daemon@host, daemon@address ali samo ime demona, odvisno od tega, koliko informacij je na voljo.
  • %u — Uporabniško ime odjemalca (ali "neznano").
  • %% — Razširi se na en sam znak »%«.

Znaki v % razširitvah, ki lahko zmedejo lupino, se nadomestijo s podčrtaji.

Vzorci končne točke strežnika

Če želite odjemalce razlikovati po omrežnem naslovu, s katerim se povezujejo, uporabite vzorce v obliki:

ime_procesa@vzorec_gostitelja: seznam_odjemalcev... 

Takšne vzorce je mogoče uporabiti, ko ima naprava različne internetne naslove z različnimi internetnimi imeni gostiteljev. Ponudniki storitev lahko uporabljajo to možnost, da ponudijo arhive FTP, GOPHER ali WWW z internetnimi imeni, ki lahko celo pripadajo različnim organizacijam. Glejte tudi možnost 'twist' v dokumentu hosts_options (5). Nekateri sistemi (Solaris, FreeBSD) imajo lahko več kot en internetni naslov na enem fizičnem vmesniku; pri drugih sistemih boste morda morali uporabiti psevdo vmesnike SLIP ali PPP, ki živijo v namenskem omrežnem naslovnem prostoru.

Vzorec_gostitelja upošteva enaka pravila skladnje kot imena in naslovi gostiteljev v kontekstu seznama_odjemalca. Običajno so informacije o končni točki strežnika na voljo samo pri storitvah, usmerjenih v povezavo.

Iskanje uporabniškega imena odjemalca

Ko odjemalski gostitelj podpira protokol RFC 931 ali enega od njegovih potomcev (TAP, IDENT, RFC 1413), lahko programi za ovoje pridobijo dodatne informacije o lastniku povezave. Podatki o uporabniškem imenu odjemalca, če so na voljo, se zabeležijo skupaj z imenom gostitelja odjemalca in se lahko uporabljajo za ujemanje z vzorci, kot so:

daemon_list:... user_pattern@host_pattern... 

Ovije demona je mogoče konfigurirati v času prevajanja za izvajanje iskanja uporabniškega imena na podlagi pravil (privzeto) ali za vedno izpraševanje odjemalskega gostitelja. V primeru iskanja uporabniškega imena na podlagi pravil bi zgornje pravilo povzročilo iskanje uporabniškega imena samo, če sta oba daemon_list in host_patterntekmo.

Uporabniški vzorec ima enako sintakso kot vzorec procesa demona, zato veljajo isti nadomestni znaki (članstvo v omrežni skupini ni podprto). Vendar se ne bi smeli zanesti z iskanjem uporabniškega imena.

Informacijam o uporabniškem imenu odjemalca ni mogoče zaupati, ko je to najbolj potrebno, to je, ko je bil sistem odjemalca ogrožen. Na splošno sta VSE in (NE)ZNANO edina smiselna vzorca uporabniškega imena.

Iskanje uporabniškega imena je možno samo s storitvami, ki temeljijo na TCP, in samo, če odjemalski gostitelj zažene ustrezen demon; v vseh drugih primerih je rezultat "neznan".

Dobro znana UNIX napaka jedra lahko povzroči izgubo storitve, če požarni zid blokira iskanje uporabniškega imena. Dokument z ovojom README opisuje postopek, s katerim ugotovite, ali ima vaše jedro to napako.

Iskanje uporabniškega imena lahko povzroči opazne zamude za uporabnike, ki niso UNIX. Privzeta časovna omejitev za iskanje uporabniškega imena je 10 sekund: prekratka za obvladovanje počasnih omrežij, vendar dovolj dolga, da razdraži uporabnike osebnih računalnikov.

Selektivno iskanje uporabniškega imena lahko ublaži zadnjo težavo. Na primer, pravilo, kot je:

daemon_list: @pcnetgroup ALL@ALL. 

bi se ujemal s člani omrežne skupine osebnih računalnikov brez iskanja uporabniškega imena, vendar bi izvedel iskanje uporabniškega imena z vsemi drugimi sistemi.

Odkrivanje napadov lažnega naslova

Napaka v generatorju zaporednih številk mnogih Izvedbe TCP/IP omogoča vsiljivcem, da se zlahka lažno predstavljajo za zaupanja vredne gostitelje in vdirajo prek, na primer, oddaljene storitve lupine. Storitev IDENT (RFC931 itd.) se lahko uporablja za odkrivanje takšnih in drugih napadov lažnega naslova gostitelja.

Preden sprejmejo zahtevo odjemalca, lahko ovoji s storitvijo IDENT ugotovijo, da odjemalec zahteve sploh ni poslal. Ko odjemalski gostitelj nudi storitev IDENT, je negativen rezultat iskanja IDENT (odjemalec se ujema z `UNKNOWN@host') močan dokaz o napadu lažnega gostitelja.

Pozitiven rezultat iskanja IDENT (odjemalec se ujema z `KNOWN@host') je manj vreden zaupanja. Možno je, da vsiljivci ponaredijo tako odjemalsko povezavo kot iskanje IDENT, čeprav je to veliko težje kot ponarejanje samo povezave odjemalca. Mogoče je tudi, da odjemalčev strežnik IDENT laže.

Iskanje IDENT ne deluje s storitvami UDP.

Več primerov

Jezik je dovolj prilagodljiv, da je mogoče različne vrste politike nadzora dostopa izraziti z minimalnim naporom. Čeprav jezik uporablja dve tabeli za nadzor dostopa, je mogoče najpogostejše politike implementirati, pri čemer je ena od tabel trivialna ali celo prazna.

Pri branju spodnjih primerov je pomembno vedeti, da je tabela dovoljenj skenirana pred zavrnitvijo tabelo, da se iskanje konča, ko se najde ujemanje, in da je dostop odobren, ko ni ujemanja na vse.

Primeri uporabljajo imena gostitelja in domen. Izboljšati jih je mogoče z vključitvijo informacij o naslovu in/ali omrežju/omrežni maski, da se zmanjša vpliv začasnih napak pri iskanju imenskega strežnika.

Večinoma zaprto

V tem primeru je dostop privzeto zavrnjen. Dostop imajo samo izrecno pooblaščeni gostitelji.

Privzeta politika (brez dostopa) se izvaja z nepomembno zavrnilno datoteko:

/etc/hosts.deny:

VSI: VSE. 

S tem so onemogočene vse storitve vsem gostiteljem, razen če jim je dovoljen dostop z vnosi v datoteki dovoljenja.

Izrecno pooblaščeni gostitelji so navedeni v dovoljeni datoteki. Na primer:

/etc/hosts.allow:

VSI: LOKALNO @some_netgroup
VSE: .foobar.edu RAZEN terminalserver.foobar.edu.

Prvo pravilo dovoljuje dostop gostiteljem v lokalna domena (brez `.' v imenu gostitelja) in od članov some_netgroup omrežno skupino. Drugo pravilo dovoljuje dostop z vseh gostiteljev vfoobar.edu domene (pazite na vodilno piko), z izjemo terminalserver.foobar.edu.

Večinoma odprto

Tukaj je dostop privzeto odobren; samo izrecno določeni gostitelji so zavrnjeni.

Privzeta politika (dostop je odobren) naredi datoteko dovoli odveč, tako da jo je mogoče izpustiti. Izrecno nepooblaščeni gostitelji so navedeni v datoteki za zavrnitev. Na primer:

/etc/hosts.deny:

VSE: some.host.name, .some.domain
VSE: VSE RAZEN in.fingerd: other.host.name, .other.domain.

Prvo pravilo nekaterim gostiteljem in domenam onemogoča vse storitve; drugo pravilo še vedno dovoljuje zahteve prstov od drugih gostiteljev in domen.

Booby Paps

Naslednji primer dovoljuje tftp zahteve od gostiteljev v lokalni domeni (pazite na vodilno piko). Zahteve drugih gostiteljev so zavrnjene. Namesto zahtevane datoteke se gostitelju kršitelja pošlje sonda s prstom. Rezultat se pošlje superuporabniku.

/etc/hosts.allow:

in.tftpd: LOKALNO, .my.domain
/etc/hosts.deny:
in.tftpd: VSE: se pojavi (/some/where/safe_finger -l @%h | \
/usr/ucb/mail -s %d-%h root) &

Ukaz safe_finger je priložen ovoju tcpd in mora biti nameščen na primernem mestu. Omejuje morebitno škodo zaradi podatkov, ki jih pošlje oddaljeni strežnik prstov. Zagotavlja boljšo zaščito kot standardni ukaz s prstom.

Razširitev zaporedij %h (gostitelj odjemalca) in %d (ime storitve) je opisana v razdelku o ukazih lupine.

Ne ulovite svojega prstnega demona z minsko pastjo, razen če ste pripravljeni na neskončne prstne zanke.

V omrežju sistemi požarnih zidov ta trik se lahko prenese še dlje. Tipičen omrežni požarni zid ponuja le omejen nabor storitev za zunanji svet. Vse druge storitve je mogoče "hroščati" tako kot zgornji primer tftp. Rezultat je odličen sistem zgodnjega opozarjanja.

Poglej tudi

tcpd (8) tcp/ip daemon wrapper program.
tcpdchk (8), tcpdmatch (8), testni programi.

Uporabi človek ukaz (% človek), da vidite, kako se ukaz uporablja v vašem računalniku.