Pradedančiųjų vadovas „iptables“, „Linux“ užkarda
„Iptables“ yra labai lanksti ugniasienės programa, sukurta Linux operacinėms sistemoms. Nesvarbu, ar esate „Linux“ naujokas ar sistemos administratorius, tikriausiai tam tikru būdu „iptables“ jums gali būti naudinga. Skaitykite, kaip parodysime, kaip konfigūruoti universaliausią Linux užkardą.
Nuotrauka pagal ezioman.
Apie „iptables“
iptables yra komandinės eilutės ugniasienės įrankis, kuris naudoja politikos grandines, kad leistų arba blokuotų srautą. Kai ryšys bando įsitvirtinti jūsų sistemoje, „iptables“ savo sąraše ieško taisyklių, kad ji atitiktų. Jei jis neranda, jis priskiriamas numatytam veiksmui.
„iptables“ beveik visada yra iš anksto įdiegta bet kokiame „Linux“ paskirstyme. Jei norite atnaujinti / įdiegti, tiesiog atkurkite „iptables“ paketą:
sudo apt-get install iptables
Yra GUI alternatyvų iptables kaip Firestarter, bet iptables nėra tikrai taip sunku, kai jūs turite keletą komandų žemyn. Norite būti labai atsargūs konfigūruodami „iptables“ taisykles, ypač jei esate SSH'd į serverį, nes viena neteisinga komanda gali visam laikui užrakinti jus, kol ji bus rankiniu būdu nustatyta fiziniame įrenginyje.
Grandinių tipai
„iptables“ naudoja tris skirtingas grandines: įvestį, pirmyn ir išvestį.
Įvestis - Ši grandinė naudojama norint valdyti gaunamų ryšių elgesį. Pavyzdžiui, jei vartotojas bando SSH į jūsų kompiuterį / serverį, „iptables“ bandys suderinti IP adresą ir prievadą prie įvesties grandinės taisyklės.
Persiųsti - Ši grandinė naudojama gaunamiems ryšiams, kurie iš tikrųjų nėra pristatomi vietoje. Pagalvokite apie maršrutizatorių - duomenys visuomet siunčiami į jį, bet retai iš tikrųjų skirti maršrutizatoriui; duomenys tiesiog persiunčiami į savo tikslą. Jei jūs nedarote jokio maršruto, NATing ar kitokio jūsų sistemoje, kuriai reikia persiuntimo, jūs net nenaudosite šios grandinės.
Yra vienas patikimas būdas patikrinti, ar jūsų sistema naudoja / turi išankstinę grandinę.
iptables -L -v
Viršuje esantis paveikslėlis yra serveris, kuris veikia keletą savaičių ir neturi jokių apribojimų, susijusių su gaunamais arba išeinančiais ryšiais. Kaip matote, įvesties grandinė apdorojo 11GB paketus ir išvesties grandinė apdorojo 17GB. Kita vertus, priekinės grandinės nereikėjo apdoroti vieno paketo. Taip yra todėl, kad serveris nevykdo jokio persiuntimo ar yra naudojamas kaip perdavimo priemonė.
Išėjimas - Ši grandinė naudojama siunčiamiems ryšiams. Pvz., Jei bandote ping howtogeek.com, iptables patikrins savo išvesties grandinę ir pamatys, kokios taisyklės yra susijusios su ping ir howtogeek.com prieš priimant sprendimą leisti arba neleisti bandyti prisijungti.
Įspėjimas
Nepaisant to, kad išorinio kompiuterio pingavimas atrodo panašus į tai, kad tik reikia pereiti išvesties grandinėje, turėkite omenyje, kad grąžinus duomenis, bus naudojama ir įvesties grandinė. Naudodami „iptables“ užrakinti sistemą, nepamirškite, kad daugeliui protokolų reikės abipusio ryšio, todėl tiek įvesties, tiek išvesties grandinės turi būti tinkamai sukonfigūruotos. SSH yra bendras protokolas, kurį žmonės pamiršo leisti abiem grandinėms.
Politikos grandinės numatytasis elgesys
Prieš eidami ir konfigūruodami konkrečias taisykles, norėsite nuspręsti, ką norite, kad trijų grandinių numatytasis elgesys būtų. Kitaip tariant, ką norite, kad „iptables“ veiktų, jei ryšys neatitinka esamų taisyklių?
Jei norite pamatyti, ką jūsų politikos grandinės šiuo metu yra sukonfigūruotos, kad atliktumėte nesuderintą srautą, vykdykite iptables -L
komandą.
Kaip matote, mes taip pat naudojome grep komandą, kad suteiktume švaresnę produkciją. Šiame ekrane mūsų grandinės yra suprantamos kaip tinkamos eismui.
Daugiau kartų, nei ne, jūs norite, kad jūsų sistema priimtų ryšius pagal numatytuosius nustatymus. Jei anksčiau nenustatėte politikos grandinės taisyklių, šis nustatymas jau turėtų būti sukonfigūruotas. Bet kuriuo atveju, čia yra komanda, pagal kurią numatyti ryšiai:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
„iptables“ - polisai FORWARD ACCEPT
Numatydami sutikimo taisyklę, galite naudoti „iptables“, kad atsisakytumėte konkrečių IP adresų ar prievadų numerių ir toliau priimtumėte visus kitus ryšius. Mes pasieksime šias komandas per minutę.
Jei norėtumėte atsisakyti visų ryšių ir rankiniu būdu nurodyti, kuriuos norite leisti prisijungti, turėtumėte keisti numatytąją savo grandinių politiką. Tai tikriausiai būtų naudinga tik tiems serveriams, kuriuose yra slapta informacija, ir tik kada tik tie patys IP adresai prisijungs prie jų.
„iptables“ --policija INPUT DROP
iptables - policy OUTPUT DROP
iptables - polisai FORWARD DROP
Ryšiui būdingi atsakymai
Konfigūravus numatytąją grandinės politiką, galite pradėti pridėti taisykles prie „iptables“, kad ji žinotų, ką daryti, kai susiduria su ryšiu iš tam tikro IP adreso ar uosto. Šiame vadove mes ketiname pereiti prie trijų pagrindinių ir dažniausiai naudojamų „atsakymų“.
Priimti - Leisti ryšį.
Drop - Išjunkite ryšį, elgiatės taip, kaip niekada neįvyko. Tai geriausia, jei nenorite, kad šaltinis suvoktų jūsų sistemos egzistavimą.
Atmesti - Neleiskite ryšio, bet atsiųskite klaidą. Tai geriausia, jei nenorite, kad tam tikras šaltinis prisijungtų prie jūsų sistemos, bet norite, kad jos žinotų, kad užkarda užblokavo juos.
Geriausias būdas parodyti skirtumą tarp šių trijų taisyklių yra parodyti tai, kas atrodo, kai kompiuteris bando pinguoti „Linux“ įrenginį su „iptables“, sukonfigūruotu kiekvienam iš šių nustatymų.
Leidimas prisijungti:
Ryšio atšaukimas:
Atmesti ryšį:
Leisti arba blokuoti konkrečius ryšius
Konfigūravus jūsų politikos grandines, dabar galite sukonfigūruoti „iptables“ leisti arba blokuoti konkrečius adresus, adresų sritis ir prievadus. Šiuose pavyzdžiuose nustatysime ryšius su DROP
, bet galite juos perjungti PRIIMTI
arba REJECT
, priklausomai nuo jūsų poreikių ir kaip konfigūravote savo politikos grandines.
Pastaba: šiuose pavyzdžiuose mes naudosime iptables -A
pridėti taisykles prie esamos grandinės. „iptables“ prasideda savo sąrašo viršuje ir eina per kiekvieną taisyklę, kol ji nustato, kad ji atitinka. Jei norite įterpti taisyklę virš kitos, galite naudoti iptables -I [grandinė] [numeris]
nurodyti numerį, kurį jis turėtų įtraukti į sąrašą.
Ryšiai iš vieno IP adreso
Šis pavyzdys rodo, kaip blokuoti visus ryšius iš IP adreso 10.10.10.10.
iptables -A INPUT-S 10.10.10.10 -j DROP
Ryšiai iš įvairių IP adresų
Šis pavyzdys rodo, kaip blokuoti visus IP adresus 10.10.10.0/24 tinklo diapazone. IP adresų diapazonui nurodyti galite naudoti tinklinį ar standartinį brūkšninį žymėjimą.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
arba
iptables -A INPUT-S 10.10.10.0/255.255.255.0 -j DROP
Ryšiai su konkrečiu prievadu
Šis pavyzdys rodo, kaip blokuoti SSH jungtis nuo 10.10.10.10.
iptables -A INPUT -p tcp --portas ssh -s 10.10.10.10 -j DROP
„Ssh“ galite pakeisti bet kuriuo protokolu ar prievado numeriu. The -p tcp
dalis kodo pasakoja „iptables“, kokį ryšį protokolas naudoja. Jei blokavote protokolą, kuris naudoja UDP, o ne TCP -p udp
vietoj to reikėtų.
Šis pavyzdys rodo, kaip blokuoti SSH ryšius iš bet kurio IP adreso.
iptables -A INPUT -p tcp - importas ssh -j DROP
Ryšio valstybės
Kaip jau minėjome, daugeliui protokolų reikės dvipusio ryšio. Pvz., Jei norite leisti SSH ryšius su savo sistema, įvesties ir išvesties grandinės jiems reikės taisyklių. Bet, ką daryti, jei norite, kad SSH būtų įeina į jūsų sistemą? Neįtraukus taisyklės į išvesties grandinę, taip pat leidžiama išeiti SSH bandymai?
Štai kur įjungiamos būsenos, kurios suteikia jums galimybę, kad galėtumėte leisti dvipusį ryšį, bet leisti tik nustatyti vienpusius ryšius. Pažvelkite į šį pavyzdį, kur leidžiami SSH jungtys iš 10.10.10.10, tačiau SSH jungtys iki 10.10.10.10 nėra. Tačiau sistemai leidžiama siųsti informaciją per SSH tol, kol sesija jau yra sukurta, todėl SSH ryšys galimas tarp šių dviejų kompiuterių..
iptables -A INPUT -p tcp - importuoti ssh -s 10.10.10.10 -m būseną - statyti NAUJAS, ĮRENGINTA -j ACCEPT
iptables -A OUTPUT -p tcp - sportas 22d ir 10.10.10.10 -m būsena - būsena ESTABLISHED -j ACCEPT
Išsaugoti pakeitimus
Pakeitimai, kuriuos atliksite „iptables“ taisyklėse, bus atmetami kitą kartą, kai „iptables“ paslauga bus paleista iš naujo, nebent atliksite komandą, kad išsaugotumėte pakeitimus. Ši komanda gali skirtis priklausomai nuo jūsų paskirstymo:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables išsaugoti
Or
/etc/init.d/iptables išsaugoti
Kitos komandos
Išvardykite šiuo metu sukonfigūruotas „iptables“ taisykles:
iptables -L
Pridėti -v
parinktis suteiks jums paketinių ir baitų informaciją ir pridės -n
išvardys viską skaitiniu būdu. Kitaip tariant - hostname, protokolai ir tinklai yra išvardyti kaip numeriai.
Jei norite ištrinti visas šiuo metu sukonfigūruotas taisykles, galite išduoti skalavimo komandą.
iptables -F