Valdymas ir filtravimas: Iptables taisyklės Linux sistemose

Linux operacinėse sistemose tinklo srautui kontroliuoti ir apsaugoti sistemą nuo neteisėtos prieigos naudojama daugybė įrankių, tačiau vienas iš pagrindinių ir galingiausių yra iptables. Tai ne tik ugniasienės valdymo priemonė, bet ir lankstus tinklo paketų filtras, leidžiantis administratoriams detalizuoti, kaip informacija keliauja per sistemą. Šiame straipsnyje gilinsimės į iptables veikimo principus, pagrindines komandas, taisyklių peržiūrą, filtravimą ir trynimą, siekdami suteikti išsamų supratimą apie šio įrankio panaudojimą.

Kas yra Iptables ir kodėl tai svarbu?

Iptables yra vartotojo erdvės programa, kuri sąveikauja su Linux branduolio Netfilter sistema. Ši sistema atsakinga už tinklo paketų filtravimą, tinklo adresų vertimą (NAT) ir ryšio būsenos sekimą. Iptables leidžia administratoriams kurti taisyklių rinkinius, kurie apibrėžia, kaip sistema turėtų reaguoti į gaunamus ir išeinančius tinklo paketus - priimti juos, atmesti tyliai arba atmesti su pranešimu siuntėjui.

Diagrama, vaizduojanti iptables grandines ir paketo kelionę per Linux tinklo krūvą

Svarbu suprasti, kad iptables veikia su lentelėmis ir grandinėmis. Pagrindinės lentelės yra:

  • filter: Tai numatytoji lentelė, naudojama paketų filtravimui. Ji turi tris pagrindines grandines: INPUT (įeinantiems į serverį paketams), OUTPUT (iš serverio išeinantiems paketams) ir FORWARD (paketams, kurie keliauja per serverį, pvz., kai serveris veikia kaip maršrutizatorius).
  • nat: Naudojama tinklo adresų vertimui (NAT), pavyzdžiui, vidinio IP adreso pakeitimui į viešąjį, kai paketai siunčiami į internetą, arba prievadų peradresavimui. Šios lentelės grandinės yra PREROUTING, POSTROUTING ir OUTPUT.
  • mangle: Naudojama paketų modifikavimui, pavyzdžiui, keičiant IP paketo laukus (TTL, DSCP).
  • raw: Naudojama išimti paketams iš ryšio stebėjimo, retai naudojama.

Kiekviena grandinė apdoroja paketus tam tikru momentu, kai jie keliauja per tinklo krūvą. Iptables taisyklės apibrėžia, ką daryti su paketu, jei jis atitinka nustatytus kriterijus (pvz., šaltinio IP adresas, paskirties prievadas, protokolas). Veiksmai gali būti ACCEPT (priimti), DROP (tyliai atmesti), REJECT (atmesti su pranešimu) arba nukreipti į kitą grandinę.

Pastaraisiais metais modernios Linux distribucijos vis dažniau naudoja nftables kaip iptables pakeitimą, tačiau iptables komanda dažnai veikia kaip suderinamumo apvalkalas, leidžiantis administratoriams toliau naudoti pažįstamą sintaksę. Nepaisant to, iptables išlieka galinga ir universali priemonė tinklo saugumui užtikrinti.

Taisyklių peržiūra: Išsamus žvilgsnis

Norint efektyviai valdyti iptables taisykles, pirmiausia reikia mokėti jas peržiūrėti. Yra keletas būdų tai padaryti, priklausomai nuo to, kokio detalumo informacijos ieškote.

Taisyklių peržiūra pagal specifikaciją

Jei norite pamatyti taisykles, parašytas jų originalia sintakse, galite naudoti -S arba --list-rules parametrą, nurodydami konkrečią grandinę:

sudo iptables -S INPUTsudo iptables -S OUTPUTsudo iptables -S FORWARD

Ši komanda parodys visas taisykles, kurios yra aktyvios nurodytoje grandinėje, su visais jų parametrais. Tai naudinga, kai norite greitai pamatyti konkrečios taisyklės konfigūraciją.

Taisyklių peržiūra lentelių pavidalu

Dažniausiai naudojamas ir informatyviausias būdas peržiūrėti taisykles yra lentelės formatu, naudojant -L arba --list parametrą.

sudo iptables -L

Ši komanda parodys visas aktyvias taisykles visose lentelėse ir grandinėse. Rezultatas paprastai atrodo taip:

Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhereDROP all -- anywhere anywhere state INVALIDACCEPT all -- anywhere anywhere state ESTABLISHED,RELATED...Chain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destination...

Kiekvienos grandinės pradžioje nurodomas jos pavadinimas (pvz., INPUT) ir numatytoji politika (policy). Tai reiškia, ką daryti su paketais, kurie neatitinka jokios konkrečios taisyklės šioje grandinėje. Pavyzdžiui, policy ACCEPT reiškia, kad viskas, kas nėra aiškiai uždrausta, bus priimta.

Kiekvienos eilutės paaiškinimas lentelės formatu:

  • target: Veiksmas, kuris bus atliktas su paketu, jei jis atitinka taisyklę (pvz., ACCEPT, DROP, REJECT, ar nukreipimas į vartotojo apibrėžtą grandinę).
  • prot: Protokolas, kuriam taikoma taisyklė (pvz., tcp, udp, icmp, all).
  • opt: IP parinktys (dažnai nenaudojama).
  • source: Šaltinio IP adresas arba tinklas, iš kurio paketai gali ateiti. anywhere reiškia bet kurį šaltinį.
  • destination: Paskirties IP adresas arba tinklas, į kurį paketai yra nukreipti. anywhere reiškia bet kurią paskirtį.
  • Papildomi parametrai: Apačioje esančiame stulpelyje (dažnai nepažymėtas pavadinimu) nurodomi papildomi taisyklės apribojimai, tokie kaip šaltinio (--sport) ar paskirties (--dport) prievadai, ryšio būsena (-m state --state ESTABLISHED,RELATED), arba konkrečios sąsajos (-i eth0).

Taisyklių filtravimas pagal grandis

Jei norite peržiūrėti taisykles tik tam tikroje grandyje, tiesiog pridėkite grandinės pavadinimą po -L parametro:

sudo iptables -L INPUTsudo iptables -L OUTPUT

Paketų skaičiaus ir bendro dydžio peržiūra

Norint suprasti, kiek srauto (paketų ir baitų) atitiko konkrečią taisyklę, naudokite -v arba --verbose parametrą kartu su -L:

sudo iptables -L INPUT -v

Tai pridės papildomus stulpelius, rodančius paketų skaičių (pkts) ir bendrą baitų kiekį (bytes), kurie praėjo per kiekvieną taisyklę. Tai ypač naudinga analizuojant, kurios taisyklės yra aktyviai naudojamos ir kokį srautą jos apdoroja.

Išsamus „iptables“ vadovas | „HackerSploit“ „Linux“ saugumas

Paketų skaičiaus ir dydžio atstatymas

Kartais gali prireikti atstatyti paketų ir baitų skaitiklius. Tai naudinga norint stebėti srautą nuo konkretaus momento arba po pakeitimų atlikimo. Tam naudojamas -Z arba --zero parametras.

  • Atstatyti visoms grandims:

    sudo iptables -Z
  • Atstatyti specifinėje grandyje:

    sudo iptables -Z INPUT
  • Atstatyti specifinei taisyklei:Norint atstatyti skaitiklius konkrečiai taisyklei, reikia nurodyti grandinės pavadinimą ir taisyklės numerį. Visų pirma, reikia peržiūrėti taisykles su jų numeriais.

    sudo iptables -L INPUT --line-numbers

    Tada, žinant taisyklės numerį (pvz., 3), galima atstatyti jos skaitiklius:

    sudo iptables -Z INPUT 3

Atkreipkite dėmesį, kad šie skaitikliai taip pat automatiškai išsivalo atlikus operacinės sistemos perkrovimą.

Taisyklių trynimas

Taisyklių trynimas yra svarbus procesas, užtikrinantis, kad ugniasienės konfigūracija išliktų tvarkinga ir saugi. Yra keli būdai pašalinti taisykles:

Taisyklių trynimas pagal specifikaciją

Galite pašalinti taisyklę, pateikdami jos tikslią specifikaciją su -D arba --delete parametru. Svarbu suprasti, kad -A (add) parametras, naudojamas taisyklės kūrimo metu, neturėtų būti naudojamas trynimo komandoje. Pavyzdžiui, norint pašalinti taisyklę, kuri atmeta netinkamus įeinančius paketus:

sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

Ši komanda ieškos grandinėje INPUT taisyklės, kuri atitinka nurodytus kriterijus (-m conntrack --ctstate INVALID -j DROP) ir ją pašalins.

Taisyklių šalinimas pagal grandį ir numerį

Patikimiausias ir dažniausiai naudojamas būdas pašalinti taisykles yra nurodyti grandinę ir taisyklės eilutės numerį. Pirmiausia, reikia peržiūrėti taisykles su jų numeriais:

sudo iptables -L --line-numbers

Arba specifinėje grandyje:

sudo iptables -L INPUT --line-numbers

Tai parodys taisykles su jų eilutės numeriais. Tada, norint ištrinti konkrečią taisyklę (pvz., trečią taisyklę INPUT grandyje):

sudo iptables -D INPUT 3

Grandžių šalinimas (Flush)

Jei norite pašalinti visas taisykles iš tam tikros grandinės, galite naudoti -F arba --flush parametrą. Tai efektyvus būdas greitai išvalyti visą grandinės konfigūraciją.

  • Vienos grandinės išvalymas:

    sudo iptables -F INPUT
  • Visų grandinių išvalymas:

    sudo iptables -F

Atkreipkite dėmesį, kad visų grandinių išvalymas yra drastiškas veiksmas ir turėtų būti atliekamas tik suprantant jo pasekmes.

Praktiniai pavyzdžiai ir geriausia praktika

Iptables naudojimas gali būti sudėtingas, ypač pradedantiesiems. Tačiau, laikantis tam tikrų principų, galima sukurti saugią ir efektyvią ugniasienės konfigūraciją.

Pagrindinė saugi konfigūracija

Viena iš svarbiausių saugumo principų yra numatytoji neigimo politika. Tai reiškia, kad viskas, kas nėra aiškiai leidžiama, turėtų būti blokuojama.

  1. Nustatyti numatytąją politiką į DROP visoms grandims, išskyrus OUTPUT:

    sudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT ACCEPT

    Pastaba: OUTPUT politika dažnai paliekama ACCEPT, kad serveris galėtų laisvai bendrauti su išoriniu pasauliu. Tačiau, jei reikia griežtesnės kontrolės, ji taip pat gali būti apribota.

  2. Leisti grįžtamąjį ryšį (ESTABLISHED, RELATED):Ši taisyklė leidžia priimti paketus, kurie yra dalis jau užmegzto ryšio arba yra susiję su juo. Tai būtina, kad serveris galėtų tinkamai bendrauti.

    sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3. Leisti vietinį ryšį (localhost):Leidžia serveriui bendrauti pačiam su savimi.

    sudo iptables -A INPUT -i lo -j ACCEPT
  4. Leisti būtinas paslaugas:Dabar galite pradėti leisti specifines paslaugas, pavyzdžiui, SSH (prievadas 22), HTTP (prievadas 80), HTTPS (prievadas 443).

    • Leisti SSH:

      sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

      Geriausia praktika yra apriboti SSH prieigą tik tam tikrais IP adresais, kad padidintumėte saugumą.

    • Leisti HTTP ir HTTPS:

      sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Taisyklių išsaugojimas

iptables taisyklės pagal numatytuosius nustatymus saugomos tik atmintyje ir dingsta po perkrovimo. Norint, kad jos išliktų, reikia jas išsaugoti. Būdas tai padaryti priklauso nuo Linux distribucijos:

  • Debian/Ubuntu:Įdiekite paketą iptables-persistent:

    sudo apt-get updatesudo apt-get install iptables-persistent

    Tada išsaugokite dabartines taisykles:

    sudo netfilter-persistent save

    Arba rankiniu būdu:

    sudo iptables-save > /etc/iptables/rules.v4sudo ip6tables-save > /etc/iptables/rules.v6
  • RHEL/CentOS/Fedora:Naudokite iptables-services paketą:bashsudo yum install iptables-servicessudo systemctl enable iptablessudo systemctl start iptablessudo iptables-save > /etc/sysconfig/iptables

Svarbūs patarimai ir įspėjimai

  • Neužsirakinkite savęs: Keičiant INPUT politiką į DROP ar apribojant SSH prieigą, visada palikite atvirą antrą SSH sesiją arba turėkite prieigą prie serverio konsolės. Tai leis jums atkurti taisykles, jei netyčia užblokuosite sau prieigą.
  • Taisyklių tvarka svarbi: iptables taisykles vertina iš viršaus į apačią. Pirmoji atitikusi taisyklė yra taikoma, ir apdorojimas sustoja. Todėl svarbiausias ir dažniausiai naudojamas taisykles laikykite aukščiau.
  • IPv6: Jei jūsų sistema naudoja IPv6, turėsite konfigūruoti taisykles ir ip6tables komanda.
  • Dokumentacija: Visada dokumentuokite savo iptables taisykles. Tai padės jums ir kitiems administratoriams suprasti konfigūraciją ateityje.
  • nftables palyginimas: Nors iptables vis dar plačiai naudojamas, naujesnėse sistemose verta susipažinti su nftables, kuris siūlo modernesnę sintaksę ir galimai geresnį našumą.

Iptables yra nepakeičiamas įrankis Linux sistemų tinklo saugumui užtikrinti. Supratimas, kaip peržiūrėti, filtruoti ir tvarkyti taisykles, leidžia administratoriams sukurti tvirtą gynybos liniją nuo kibernetinių grėsmių.

tags: #iptables #paketu #filtras

Populiarūs įrašai: