Nuotrauka pagal Eziomanas.
Apie iptables
iptables yra komandinės eilutės užkardos įrankis, kuris naudoja politikos grandines, kad leistų arba blokuotų srautą. Kai ryšys bando įsitvirtinti sistemoje, iptables ieško sąrašo taisyklės, kad ji atitiktų. Jei nerandate jo, jis naudojasi numatytu veiksmu.
"iptables" beveik visada yra iš anksto įdiegtas bet kuriame "Linux" platinime. Norėdami ją atnaujinti / įdiegti, tiesiog atkurkite "iptables" paketą:
sudo apt-get install iptables
Yra "GUI" alternatyvos "iptables", kaip "Firestarter", bet "iptables" nėra taip sunku, kai turite keletą komandų. Jūs norite būti labai atsargūs, konfigūruodami iptables taisykles, ypač jei esate SSH į serverį, nes viena neteisinga komanda gali visam laikui užrakinti jus, kol ji fiksuojama rankiniu būdu fiziniame kompiuteryje.
Grandinių tipai
iptables naudoja tris skirtingas grandines: įvesties, į priekį ir išvesties.
Įvestis - Ši grandinė yra naudojama valdyti įeinančių ryšių elgesį. Pavyzdžiui, jei vartotojas bando SSH į savo kompiuterį / serverį, iptables bandys suderinti IP adresą ir prievadą į įvesties grandinės taisyklę.
Persiųsti - Ši grandinė naudojama gaunamiems prisijungimams, kurie iš tiesų nėra pristatomi vietoje. Pagalvokite apie maršrutizatorių - duomenys visada siunčiami į jį, tačiau retai jie iš tikrųjų yra skirti pačiam maršrutizatoriui; duomenys yra perduodami tikslui. Jei nenorite atlikti tam tikros rūšies nukreipimo, NATing ar kito savo sistemoje, kuri reikalauja persiuntimo, net nenaudosite šios grandinės.
Yra vienas patikimiausias būdas patikrinti, ar jūsų sistema naudoja / reikalauja priekinės grandinės.
iptables -L -v
Išvestis - Ši grandinė naudojama išeinantys jungtys. Pavyzdžiui, jei bandysite ping "howtogeek.com", "iptables" patikrins produkcijos grandinę, kad pamatytumėte taisykles, susijusias su ping ir howtogeek.com, prieš priimdami sprendimą leisti arba paneigti bandymą prisijungti.
Įspūdis
Nors išorinio kompiuterio tvirtinimas atrodo kaip kažkas, į kurį tik reikia kirsti gamybos grandinę, turėkite galvoje, kad grąžinti duomenis taip pat bus naudojama įvesties grandinė. Jei naudojate iptables, kad užblokuotumėte savo sistemą, nepamirškite, kad daugeliui protokolų reikės dvipusio ryšio, taigi tiek įvesties, tiek išvesties grandines reikės tinkamai sukonfigūruoti. SSH yra bendras protokolas, kurį žmonės pamiršta leisti abiejose grandinėse.
Politikos grandinės numatytoji elgsena
Prieš įeinant į konkrečias taisykles ir konfigūruodami jas, jūs turėsite nuspręsti, kokia bus trijų grandinių numatytoji elgsena. Kitaip tariant, ką norėtumėte padaryti "iptables", jei ryšys neatitinka galiojančių taisyklių?
Norėdami sužinoti, kokios yra jūsų politikos grandinės šiuo metu sukonfigūruotos nesuderintam srautui, paleiskite
iptables -L
komanda
Daugiau kartų negu norite, kad jūsų sistema priimtų ryšius pagal nutylėjimą. Jei anksčiau nepakeitėte politikos grandinės taisyklių, šis nustatymas jau turėtų būti konfigūruojamas. Bet kuriuo atveju, čia yra komanda prijungti jungtis pagal nutylėjimą:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Pagal nutylėjimą priėmimo taisyklę galite naudoti iptables, kad neleistumėte konkrečių IP adresų ar prievadų numerių, tuo pačiu toliau priimdami visus kitus ryšius. Mes pateiksime šias komandas per minutę.
Jei norite atmesti visus ryšius ir rankiniu būdu nurodyti, kuriuos iš jų norite leisti prisijungti, turėtumėte pakeisti numatytąją jūsų grandinių politiką. Tai galbūt bus naudinga tik serveriams, kuriuose yra slaptos informacijos, ir su jais gali prisijungti tik tie patys IP adresai.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Ryšio specifiniai atsakymai
Sukonfigūruodami numatytasis grandinės politikos nuostatas, galite pradėti pridėti taisykles prie iptables, kad žinotų, ką daryti, kai susiduria su ryšiu iš tam tikro IP adreso ar prievado. Šiame vadove mes einame per tris pagrindinius ir dažniausiai naudojamus "atsakymus".
Priimti - leiskite prisijungti.
Drop - Nutraukite ryšį, elkitės taip, kaip niekada neįvyko. Tai geriausia, jei nenorite, kad šaltinis suvoktų jūsų sistemą.
Atmesti - Neleiskite prisijungti, bet grąžinkite klaidą. Tai geriausia, jei nenorite, kad tam tikras šaltinis prisijungtų prie jūsų sistemos, bet jūs norite, kad jie žinotų, kad jūsų ugniasienė juos užblokavo.
Geriausias būdas parodyti skirtumą tarp šių trijų taisyklių yra parodyti, kas atrodo, kai kompiuteris bando pinguoti "Linux" mašiną su "iptables", konfigūruotomis kiekvienam iš šių nustatymų.
Leidžiant prisijungti:
Leisti arba užblokuoti specifines jungtis
Sukūrę savo politikos grandines, dabar galite konfigūruoti "iptables", kad leistumėte arba blokuotumėte konkrečius adresus, adresų intervalus ir prievadus. Šiuose pavyzdžiuose nustatysime ryšius su
DROP
bet galite jas perjungti
ACCEPT
arba
REJECT
priklausomai nuo jūsų poreikių ir kaip sukonfigūravote savo politikos grandines.
Pastaba: šiuose pavyzdžiuose mes ketiname naudoti
iptables -A
pridėti taisykles prie esamos grandinės. "iptables" prasideda sąrašo viršuje ir eina per kiekvieną taisyklę, kol nustatoma, kad ji atitinka. Jei norite įterpti taisyklę virš kito, galite naudoti
iptables -I [chain] [number]
nurodyti numerį, kuris turėtų būti sąraše.
Jungtys 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ų diapazono nustatymui galite naudoti tinklo maską ar standartinę brėžinį.
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
Jungtys prie konkretaus uosto
Šis pavyzdys rodo, kaip blokuoti SSH jungtis nuo 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
"SSH" galite pakeisti bet kuriuo protokolu ar prievado numeriu. The
-p tcp
dalis kodo pasakoja iptables, kokio ryšio protokolas naudoja. Jei užblokavote protokolą, kuris naudoja UDP, o ne TCP, tada
-p udp
vietoj to reikės.
Šis pavyzdys rodo, kaip blokuoti SSH jungtis iš bet kurio IP adreso.
iptables -A INPUT -p tcp --dport ssh -j DROP
Prisijungimo valstybės
Kaip minėjome anksčiau, daugeliui protokolų bus reikalaujama abipusio ryšio. Pavyzdžiui, jei norite leisti SSH prisijungimus prie savo sistemos, įvesties ir išvesties grandinėms reikės papildomos taisyklės. Bet ką daryti, jei norite, kad SSH prisijungtų prie jūsų sistemos? Negalėsite pridėti taisyklės į išvesties grandinę, taip pat leis išeinančius SSH bandymus?
Štai kur ateina prisijungimo būklė, kuri suteikia jums pajėgumų, kurių reikia, kad būtų leidžiama dvipusis ryšys, tačiau leidžiama nustatyti tik vieno ryšio jungtis. Pažvelkite į šį pavyzdį, kai SSH jungtys nuo 10.10.10.10 yra leidžiamos, tačiau SSH jungtys prie 10.10.10.10 nėra. Tačiau sistemai leidžiama atsiųsti informaciją per SSH tol, kol sesija jau yra nustatyta, todėl SSH ryšys yra įmanomas tarp šių dviejų kompiuterių.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Išsaugoti pakeitimus
Pakeitimai, kuriuos atliksite į savo iptables taisykles, bus panaikinti kitą kartą, kai iptables paslauga bus paleista iš naujo, nebent atliksite komandą išsaugoti pakeitimus. Ši komanda gali skirtis priklausomai nuo jūsų platinimo:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Or
/etc/init.d/iptables save
Kiti komandos
Nurodykite šiuo metu sukonfigūruotas iptables taisykles:
iptables -L
Pridedant
-v
Parinktis suteiks jums paketų ir baitų informaciją ir pridėti
-n
išvardys viską skaičiais. Kitaip tariant, kompiuterių pavadinimai, protokolai ir tinklai yra išvardyti kaip skaičiai.
Norėdami išvalyti visas šiuo metu sukonfigūruotas taisykles, galite išduoti komandą flush.
iptables -F