Kaip nustatyti „Iptables“ ugniasienę, kad būtų galima įgalinti nuotolinę prieigą prie paslaugų „Linux“ – 8 dalis


Pristatome „Linux Foundation“ sertifikavimo programą

Prisiminsite iš šios serijos LFCE (Linux Foundation Certified Engineer) 1 dalies „Apie Iptables“, kad mes pateikėme pagrindinį ugniasienės aprašą: valdymo mechanizmą. paketai, įeinantys į tinklą ir iš jo išeinantys. Sakydami „valdyti“ iš tikrųjų turime omenyje:

  1. Leisti arba neleisti tam tikriems paketams patekti į mūsų tinklą arba iš jo išeiti.
  2. Persiųsti kitus paketus iš vieno tinklo taško į kitą.

remiantis iš anksto nustatytais kriterijais.

Šiame straipsnyje aptarsime, kaip įdiegti pagrindinį paketų filtravimą ir kaip sukonfigūruoti ugniasienę naudojant iptables, priekinę dalį netfilter, kuris yra vietinis branduolio modulis, naudojamas ugniasienei.

Atkreipkite dėmesį, kad ugniasienės yra plati tema ir šis straipsnis nėra išsamus vadovas, padedantis suprasti viską, ką apie tai reikia žinoti, o kaip atspirties taškas gilesniam šios temos tyrimui. Tačiau mes iš naujo apsvarstysime temą šios serijos 10 dalyje, kai išnagrinėsime keletą konkrečių užkardos naudojimo Linux sistemoje atvejų.

Galite galvoti apie ugniasienę kaip apie tarptautinį oro uostą, į kurį keleiviniai lėktuvai atvyksta ir išskrenda beveik 24 valandas per parą, 7 dienas per savaitę. Atsižvelgiant į daugybę sąlygų, tokių kaip asmens paso galiojimas arba jo kilmės šalis (kai tik pavyzdžiai), jam gali būti leista atvykti į tam tikrą šalį arba išvykti iš jos.

Tuo pačiu metu oro uosto pareigūnai prireikus gali nurodyti žmonėms persikelti iš vienos oro uosto vietos į kitą, pavyzdžiui, kai reikia eiti per muitinės tarnybas.

Gali būti, kad oro uosto analogija bus naudinga likusioje šios mokymo programos dalyje. Tiesiog nepamirškite toliau išvardytų santykių:

  1. Asmenys=paketai
  2. Ugniasienė=oro uostas
  3. 1 šalis=1 tinklas
  4. 2 šalis=2 tinklas
  5. Oro uosto taisyklės, kurias vykdo pareigūnai=ugniasienės taisyklės

Iptables – pagrindai

Žemu lygiu pats branduolys „nusprendžia“, ką daryti su paketais pagal taisykles, sugrupuotas grandinėse arba sakiniuose. Šios grandinės apibrėžia, kokių veiksmų reikia imtis, kai paketas atitinka jų nurodytus kriterijus.

Pirmasis iptables veiksmas bus sprendimas, ką daryti su paketu:

  1. Priimti (leisti patekti į mūsų tinklą)?
  2. Atmesti (neleisti jam pasiekti mūsų tinklo)?
  3. Persiųsti (į kitą grandinę)?

Jei susimąstėte, kodėl šis įrankis vadinamas iptables, tai todėl, kad šios grandinės yra suskirstytos į lenteles, kurių filtrų lentelė yra geriausiai žinoma ir ta, kuri yra naudojamas paketų filtravimui įgyvendinti su trimis numatytosiomis grandinėmis:

1. Grandinė INPUT tvarko į tinklą įeinančius paketus, kurie yra skirti vietinėms programoms.

2. Grandinė OUTPUT naudojama analizuoti paketus, kilusius iš vietinio tinklo, kurie turi būti siunčiami į išorę.

3. Grandinė FORWARD apdoroja paketus, kurie turėtų būti persiųsti į kitą paskirties vietą (kaip ir maršrutizatoriaus atveju).

Kiekvienai iš šių grandinių yra numatytoji politika, nurodanti, ką daryti pagal numatytuosius nustatymus, kai paketai neatitinka jokių grandinės taisyklių. Galite peržiūrėti kiekvienai grandinei sukurtas taisykles ir numatytąją politiką vykdydami šią komandą:

iptables -L

Galimos šios politikos nuostatos:

  1. PRIIMTI → perleidžia paketą. Bet koks paketas, kuris neatitinka jokių grandinės taisyklių, įleidžiamas į tinklą.
  2. DROP → tyliai numeta paketą. Bet koks paketas, kuris neatitinka jokių grandinės taisyklių, negali patekti į tinklą.
  3. ATMESTI → atmeta paketą ir grąžina informacinį pranešimą. Tai ypač neveikia kaip numatytoji politika. Vietoj to, jis skirtas papildyti paketų filtravimo taisykles.

Kai reikia nuspręsti, kurią politiką įgyvendinti, turite apsvarstyti kiekvieno požiūrio privalumus ir minusus, kaip paaiškinta aukščiau – atminkite, kad nėra vieno varianto. - visas sprendimas.

Taisyklių pridėjimas

Norėdami pridėti taisyklę prie ugniasienės, iškvieskite komandą iptables taip:

iptables -A chain_name criteria -j target

kur,

  1. -A reiškia Pridėti (pridėti dabartinę taisyklę prie grandinės pabaigos).
  2. grandinės_pavadinimas yra INPUT, OUTPUT arba FORWARD.
  3. tikslas yra veiksmas arba politika, kurią reikia taikyti šiuo atveju (PRIIMTI, ATMESTI arba ATMESTI).
  4. kriterijai yra sąlygų, pagal kurias turi būti tikrinami paketai, rinkinys. Jį sudaro bent viena (greičiausiai daugiau) iš toliau nurodytų vėliavėlių. Parinktys skliausteliuose, atskirtos vertikalia juosta, yra lygiavertės viena kitai. Likusi dalis yra pasirenkami jungikliai:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Mūsų bandymų aplinka

Suklijuokime visa tai 3 klasikiniuose pavyzdžiuose, naudodami šią pirmųjų dviejų bandymų aplinką:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

Ir tai paskutiniam pavyzdžiui

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
1 PAVYZDYS. Skirtumo tarp DROP ir REJECT politikos analizavimas

Pirmiausia nustatysime DROP politiką, skirtą įvesties ping į mūsų užkardą. Tai yra, icmp paketai bus numesti tyliai.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Prieš tęsdami dalį ATMESTI, išvalysime visas INPUT grandinės taisykles, kad įsitikintume, jog mūsų paketai bus patikrinti pagal šią naują taisyklę:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

2 PAVYZDYS: ssh prisijungimų iš dev2 į dev1 išjungimas/iš naujo įgalinimas

Mes susidorosime su grandine OUTPUT, nes tvarkome išeinantį srautą:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

3 PAVYZDYS: leidimas/neleidimas NFS klientams (nuo 192.168.0.0/24) prijungti NFS4 bendrinimus

NFSv4 serveryje/ugniasienėje paleiskite šias komandas, kad uždarytumėte 2049 ir 111 prievadus bet kokio tipo srautui:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Dabar atidarykime tuos prievadus ir pažiūrėkime, kas atsitiks.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Kaip matote, mes galėjome prijungti NFSv4 bendrinimą atidarę srautą.

Taisyklių įterpimas, pridėjimas ir ištrynimas

Ankstesniuose pavyzdžiuose parodėme, kaip pridėti taisykles prie grandinių INPUT ir OUTPUT. Jei norėtume juos įterpti į iš anksto nustatytą vietą, vietoj to turėtume naudoti jungiklį -I (didžiosios raidės i).

Turite atsiminti, kad taisyklės bus vertinamos viena po kitos ir kad įvertinimas sustoja (arba peršoka), kai atitinka ATMESTI arba PRIIMTI politiką. Dėl šios priežasties jums gali tekti prireikus perkelti taisykles aukštyn arba žemyn grandinės sąraše.

Norėdami tai parodyti, naudosime trivialų pavyzdį:

Įveskime tokią taisyklę,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

2 padėtyje) INPUT grandinėje (todėl ankstesnis #2 perkeliamas į #3)

Naudojant anksčiau pateiktą sąranką, prieš tikrinant, ar nėra prievado 2049, srautas bus patikrintas, ar jis nukreipiamas į prievadą 80.

Arba galite ištrinti taisyklę ir pakeisti likusių taisyklių tikslą į ATMESTI (naudodami jungiklį -R):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Paskutinis, bet ne mažiau svarbus dalykas, turėsite atsiminti, kad tam, kad ugniasienės taisyklės išliktų, turėsite jas įrašyti į failą ir automatiškai atkurti įkrovos metu (naudojant pageidaujamą metodą arba tą, kuris galima platinti).

Užkardos taisyklių išsaugojimas:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Atkūrimo taisyklės:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Čia matome panašią procedūrą (užkardos taisyklių išsaugojimas ir atkūrimas rankiniu būdu), naudojant fiktyvų failą iptables.dump, o ne numatytąjį, kaip parodyta aukščiau.

iptables-save > iptables.dump

Kad šie pakeitimai išliktų visuose įkrovos įrenginiuose:

Ubuntu: įdiekite iptables-persistent paketą, kuris įkels taisykles, išsaugotas faile /etc/iptables/rules.v4.

apt-get install iptables-persistent

CentOS: prie failo /etc/sysconfig/iptables-config pridėkite šias 2 eilutes.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: /etc/sysconfig/SuSEfirewall2 išvardykite leidžiamus prievadus, protokolus, adresus ir kt. (atskirkite kableliais).

Daugiau informacijos rasite pačiame faile, kuriame gausiai komentuojama.

Išvada

Šiame straipsnyje pateikti pavyzdžiai, nors ir neapima visų iptables varpų ir švilpukų, iliustruoja, kaip įjungti ir išjungti srautą įeinančiam arba išeinančiam srautui.

Tiems iš jūsų, kurie yra ugniasienės gerbėjai, atminkite, kad šią temą dar kartą peržiūrėsime su konkretesnėmis programomis šios LFCE serijos 10 dalyje.

Nedvejodami praneškite man, jei turite klausimų ar komentarų.