Iptables-palomuurin määrittäminen mahdollistamaan palvelujen etäkäyttö Linuxissa - Osa 8


Esittelyssä Linux Foundation -sertifiointiohjelma

Muistat tämän LFCE (Linux Foundation Certified Engineer) -sarjan osasta 1 – Tietoja Iptablesista, että annoimme peruskuvauksen siitä, mitä palomuuri on: mekanismin hallintaan. verkkoon saapuvat ja sieltä lähtevät paketit. "Hallinnolla" tarkoitamme itse asiassa:

  1. Salli tai estää tiettyjen pakettien saapumisen verkkoon tai poistumisen.
  2. Muiden pakettien välittäminen verkon pisteestä toiseen.

ennalta määrättyjen kriteerien perusteella.

Tässä artikkelissa keskustelemme siitä, miten peruspakettisuodatus otetaan käyttöön ja miten palomuuri määritetään iptablesilla, netfilterin käyttöliittymällä, joka on palomuuriin käytettävä natiivi ydinmoduuli.

Huomaa, että palomuurit ovat laaja aihe, eikä tämän artikkelin ole tarkoitus olla kattava opas kaiken siitä tietävän ymmärtämiseen, vaan pikemminkin lähtökohtana tämän aiheen syvemmälle tutkimukselle. Palaamme kuitenkin aiheeseen uudelleen tämän sarjan osassa 10, kun tutkimme muutamia erityisiä palomuurien käyttötapauksia Linuxissa.

Voit ajatella palomuuria kansainvälisenä lentoasemana, jonne matkustajakoneet tulevat ja menevät lähes 24/7. Useiden edellytysten perusteella, kuten henkilön passin voimassaolo tai hänen alkuperämaansa (muutamia esimerkkejä mainitakseni), hänelle voidaan antaa lupa saapua tiettyyn maahan tai lähteä sieltä.

Samalla lentoaseman virkailijat voivat tarvittaessa ohjata ihmisiä siirtymään lentoaseman paikasta toiselle, esimerkiksi silloin, kun he joutuvat käymään Tullin kautta.

Saatamme löytää lentokentän analogiasta hyödyllisen tämän opetusohjelman loppuosan aikana. Muista vain seuraavat suhteet, kun jatkamme:

  1. Henkilöt=paketit
  2. Palomuuri=Lentokenttä
  3. Maa #1=Verkko #1
  4. Maa #2=Verkko #2
  5. Viranomaisten noudattamat lentoasemamääräykset=palomuurisäännöt

Iptables – perusteet

Matalalla tasolla ydin itse "päättää", mitä tehdä paketeille ketjuihin tai lauseisiin ryhmiteltyjen sääntöjen perusteella. Nämä ketjut määrittelevät, mitä toimenpiteitä tulee tehdä, kun paketti täyttää niiden määrittelemät kriteerit.

Ensimmäinen iptablesin toiminto on päättää, mitä paketille tehdään:

  1. Hyväksytäänkö se (anna sen kulkea verkostoomme)?
  2. Hylätäänkö se (estää sitä pääsemästä verkkoon)?
  3. Välitetäänkö se (toiseen ketjuun)?

Jos mietit, miksi tätä työkalua kutsutaan nimellä iptables, se johtuu siitä, että nämä ketjut on järjestetty taulukoihin, joista suodatintaulukko on tunnetuin ja se on käytetään pakettisuodatuksen toteuttamiseen sen kolmella oletusketjulla:

1. INPUT-ketju käsittelee verkkoon saapuvia paketteja, jotka on tarkoitettu paikallisille ohjelmille.

2. OUTPUT-ketjua käytetään analysoimaan paikallisverkosta peräisin olevia paketteja, jotka lähetetään ulkopuolelle.

3. FORWARD-ketju käsittelee paketit, jotka tulee välittää toiseen kohteeseen (kuten reitittimen tapauksessa).

Jokaiselle näistä ketjuista on oletuskäytäntö, joka määrää, mitä pitäisi tehdä oletuksena, kun paketit eivät vastaa mitään ketjun sääntöjä. Voit tarkastella kullekin ketjulle luotuja sääntöjä ja oletuskäytäntöä suorittamalla seuraava komento:

iptables -L

Käytettävissä olevat käytännöt ovat seuraavat:

  1. ACCEPT → päästää paketin läpi. Kaikki paketit, jotka eivät vastaa mitään ketjun sääntöjä, sallitaan verkkoon.
  2. DROP → pudottaa paketin hiljaa. Kaikki paketit, jotka eivät vastaa mitään ketjun sääntöjä, estetään pääsemästä verkkoon.
  3. REJECT → hylkää paketin ja palauttaa informatiivisen viestin. Tämä ei etenkään toimi oletuskäytäntönä. Sen sijaan sen on tarkoitus täydentää pakettisuodatussääntöjä.

Kun päätät, mitä käytäntöä otat käyttöön, sinun on otettava huomioon kunkin lähestymistavan edut ja haitat edellä selitetyllä tavalla – huomaa, että ei ole olemassa yksikokoisia ratkaisuja. - kaikki ratkaisu.

Sääntöjen lisääminen

Jos haluat lisätä säännön palomuuriin, käynnistä iptables-komento seuraavasti:

iptables -A chain_name criteria -j target

missä,

  1. -A tarkoittaa Liitä (liitä nykyinen sääntö ketjun loppuun).
  2. ketjun_nimi on joko INPUT, OUTPUT tai FORWARD.
  3. kohde on tässä tapauksessa sovellettava toiminto tai käytäntö (Hyväksy, hylkää tai POISTA).
  4. kriteerit on joukko ehtoja, joiden perusteella paketteja tarkastellaan. Se koostuu vähintään yhdestä (todennäköisimmin useammasta) seuraavista lipuista. Pystypalkilla erotetut suluissa olevat vaihtoehdot vastaavat toisiaan. Loput edustavat valinnaisia kytkimiä:
[--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.

Testausympäristömme

Liimaa tämä kaikki kolmeen klassiseen esimerkkiin käyttämällä seuraavaa testiympäristöä kahdelle ensimmäiselle:

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

Ja tämä viimeiseksi esimerkiksi

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
ESIMERKKI 1: DROP- ja RJECT-käytäntöjen välisen eron analysointi

Määritämme ensin DROP-käytännön palomuurin ping-kutsuille. Eli icmp-paketit pudotetaan hiljaa.

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

Ennen kuin jatkamme REJECT-osion kanssa, huuhtelemme kaikki INPUT-ketjun säännöt varmistaaksemme, että pakettimme testataan tällä uudella säännöllä:

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

ESIMERKKI 2: ssh-kirjautumisten poistaminen käytöstä/uudelleenkäyttöönotto dev2:sta dev1:een

Käsittelemme OUTPUT-ketjua samalla kun käsittelemme lähtevää liikennettä:

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

ESIMERKKI 3: NFS-asiakkaiden (alkaen 192.168.0.0/24) salliminen/estäminen NFS4-osuuksien asentamisesta

Suorita seuraavat komennot NFSv4-palvelimessa/palomuurissa sulkeaksesi portit 2049 ja 111 kaikenlaiselle liikenteelle:

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

Nyt avataan ne portit ja katsotaan mitä tapahtuu.

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

Kuten näet, pystyimme asentamaan NFSv4-osuuden liikenteen avaamisen jälkeen.

Sääntöjen lisääminen, lisääminen ja poistaminen

Aiemmissa esimerkeissä näytimme, kuinka sääntöjä liitetään INPUT- ja OUTPUT-ketjuihin. Jos haluamme lisätä ne ennalta määritettyyn paikkaan, meidän tulisi käyttää sen sijaan -I-kytkintä (isot kirjaimet i).

Sinun on muistettava, että säännöt arvioidaan peräkkäin ja että arviointi pysähtyy (tai hyppää), kun PUDOTA tai ACCEPT-käytäntö osuu. Tästä syystä saatat joutua siirtämään sääntöjä ylös tai alas ketjuluettelossa tarpeen mukaan.

Käytämme triviaalia esimerkkiä tämän osoittamiseksi:

Laitetaan seuraava sääntö,

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

kohdassa 2) INPUT-ketjussa (siten siirretään edellinen #2 numeroksi 3)

Yllä olevan asennuksen avulla liikenne tarkistetaan sen varmistamiseksi, onko se ohjattu porttiin 80, ennen kuin tarkistetaan portti 2049.

Vaihtoehtoisesti voit poistaa säännön ja muuttaa jäljellä olevien sääntöjen kohteeksi REJECT (käyttäen -R-kytkintä):

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

Viimeisenä, mutta ei vähäisimpänä, sinun on muistettava, että jotta palomuurin säännöt pysyisivät pysyvinä, sinun on tallennettava ne tiedostoon ja palautettava ne sitten automaattisesti käynnistyksen yhteydessä (valitsemallasi menetelmällä tai on saatavilla jakelullesi).

Palomuurisääntöjen tallentaminen:

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

Sääntöjen palauttaminen:

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

Tässä voimme nähdä samanlaisen toimenpiteen (palomuurisääntöjen tallentaminen ja palauttaminen käsin) käyttämällä valetiedostoa nimeltä iptables.dump oletustiedoston sijaan, kuten yllä on kuvattu.

iptables-save > iptables.dump

Voit tehdä näistä muutoksista pysyviä kaikissa käynnistyksissä seuraavasti:

Ubuntu: Asenna iptables-persistent-paketti, joka lataa /etc/iptables/rules.v4-tiedostoon tallennetut säännöt.

apt-get install iptables-persistent

CentOS: Lisää seuraavat 2 riviä /etc/sysconfig/iptables-config-tiedostoon.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: Luettelo sallitut portit, protokollat, osoitteet ja niin edelleen (pilkuilla erotettuna) tiedostossa /etc/sysconfig/SuSEfirewall2.

Katso lisätietoja itse tiedostosta, jota on runsaasti kommentoitu.

Johtopäätös

Tässä artikkelissa esitetyt esimerkit eivät kata kaikkia iptablesin kelloja ja pillejä, mutta niiden tarkoitus on havainnollistaa, kuinka saapuva tai lähtevä liikenne otetaan käyttöön ja poistetaan käytöstä.

Ne teistä, jotka ovat palomuurifanit, muistakaa, että palaamme tähän aiheeseen tarkempien sovellusten kanssa tämän LFCE -sarjan osassa 10.

Ota rohkeasti yhteyttä, jos sinulla on kysyttävää tai kommentteja.