Ero sivun ”Iptables” versioiden välillä
Siirry navigaatioon
Siirry hakuun
Uutta selkeämpää (toivottavasti) tekstiä iptablesin perusteista
p (nfttables) |
(Uutta selkeämpää (toivottavasti) tekstiä iptablesin perusteista) |
||
Rivi 2: | Rivi 2: | ||
[[wikipedia:fi:reititin|reitittimiä.]] Iptables on ollut mukana ytimessä versiosta 2.4-alkaen. [[NFTables]] on korvaamassa ytimen 3.19 versiosta alkaen. | [[wikipedia:fi:reititin|reitittimiä.]] Iptables on ollut mukana ytimessä versiosta 2.4-alkaen. [[NFTables]] on korvaamassa ytimen 3.19 versiosta alkaen. | ||
== | == Peruskäsitteitä == | ||
Tämänhetkiset | Pakettien käsittely perustuu sääntöihin (rule), joita voidaan muokata iptables-komennolla. Kussakin säännössä on tietyt ehdot, jotka määrittävät mihin paketteihin kyseistä sääntöä sovelletaan. Ehdot voivat määrittää esimerkiksi, että sääntöä sovelletaan paketteihin, jotka saapuvat tietystä IP-osoitteesta, tai jotka ovat matkalla tiettyyn porttiin. Lisäksi kussakin säännössä määritellään mikä toiminto suoritetaan kun paketti täsmää säännön ehtoihin. Yleensä toiminto on joko hylkääminen (DROP) tai hyväksyminen (ACCEPT). | ||
iptables -L | |||
Säännöt tallennetaan ketjuihin (chain). Kun paketti tulee käsiteltäväksi tiettyyn ketjuun, käydään ketjun sääntöjä järjestyksessä lävitse yksi kerrallaan, kunnes löytyy sääntö joka täsmää pakettiin. | |||
iptables - | |||
Ketjut tallennetaan tauluihin (table). Oletuksena iptables käsittelee filter-taulua, jolla voidaan toteuttaa tavanomainen palomuuritoiminnallisuus. Muitakin tauluja on olemassa, mutta niiden käsittelyä voidaan pitää edistyneempänä käyttönä. | |||
Säännöillä voidaan esimerkiksi määrittää, että tietystä IP-osoitteesta tai tiettyyn porttiin saapuvat paketit joko estetään tai päästetään läpi. Säännöillä voidaan myös määritellä edistyneempiä toimintoja, esimerkiksi voidaan estää uudet yhteydet tietystä IP-osoitteesta, jos yhteyksiä on jo samasta IP-osoitteesta auki liian monta. | |||
== Yksinkertainen palomuuri == | |||
Iptablesin oletuksena käsittelemässä filter-taulussa on kolme sisäänrakennettua ketjua, INPUT, FORWARD ja OUTPUT. Kun ulkomaailmasta saapuu palvelimelle paketti, siihen sovelletaan INPUT-ketjussa olevia sääntöjä. Vastaavasti jos palvelimelta lähtee ulospäin paketti, siihen sovelletaan OUTPUT-ketjussa olevia sääntöjä. FORWARD-ketjun sääntöjä sovelletaan siinä tapauksessa, että paketti saapuu palvelimelle ulkoa päin, mutta sen lopullinen kohde on jokin toinen palvelin, eli paketti on vain kauttakulkumatkalla. | |||
Jos siis halutaan vaikkapa estää palvelimelle tuleva liikenne tietystä IP-osoitteesta, täytyy lisätä uusi sääntö INPUT-ketjuun. Samoin jos halutaan estää palvelimelta yhteydet ulospäin tiettyihin portteihin, täytyy lisätä yksi tai useampi sääntö OUTPUT-ketjuun. | |||
Tämänhetkiset säännöt näkee komennolla | |||
iptables -L | |||
Kun mitään asetuksia ei ole tehty, palauttaa komento seuraavanlaisen listauksen: | |||
Chain INPUT (policy ACCEPT) | |||
target prot opt source destination | |||
Chain FORWARD (policy ACCEPT) | |||
target prot opt source destination | |||
Chain OUTPUT (policy ACCEPT) | |||
target prot opt source destination | |||
Listauksesta nähdään sisäänrakennetut ketjut, ja että ketjut ovat tyhjiä, eli niissä ei ole sääntöjä. Listauksesta voidaan myös nähdä, että jokaisen ketjun oletustoiminnoksi (policy) on asetettu ACCEPT. Oletustoimintoa sovelletaan siinä tapauksessa, että ei löydy mitään sääntöä jota voitaisiin soveltaa. Tässä tapauksessa kaikkien ketjujen oletustoimintona on ACCEPT, eli paketit hyväksytään ja päästetään läpi. | |||
=== Liikenteen salliminen rajattuihin portteihin === | |||
Yksinkertaisissa palomuuriasetuksissa voidaan lähteä siitä, että kaikki sisäänpäin tuleva liikenne estetään, ja erikseen määritellään poikkeustapaukset joissa liikenne sallitaan. Säädetään siis INPUT-ketjun oletustoiminnoksi DROP, jolloin oletuksena sisäänpäin tulevat paketit hylätään: | |||
iptables -P INPUT DROP | |||
Haluamme hallita palvelinta SSH-yhteyden kautta, joten sallimme liikenteen SSH:n käyttämään porttiin 22. Sallimme myös liikenteen portteihin 80 ja 443, jotta ulkopuoliset voivat saada yhteyden HTTP-palvelimeemme: | |||
iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |||
iptables -A INPUT -p tcp --dport 80 -j ACCEPT | |||
iptables -A INPUT -p tcp --dport 443 -j ACCEPT | |||
Valitsimella '''-A INPUT''' määritellään, että lisätään uusi sääntö INPUT-ketjun loppuun (append). | |||
Valitsimella '''-p tcp''' määritellään että sääntö täsmää paketteihin, jotka käyttävät TCP-protokollaa. Valitsimella '''--dport''' määritellään, että sääntö täsmää paketteihin, joiden päämääränä on annettu portti. | |||
Valitsimella '''-j ACCEPT''' määritellään että paketti hyväksytään, eli suorituksessa "hypätään" (jump) sisäänrakennettuun ketjuun nimeltä ACCEPT, joka hyväksyy paketin ja lopettaa sääntöjen suorituksen. | |||
=== Paluuliikenteen salliminen === | |||
Nyt kaikki ulospäin menevät paketit on sallittu, mutta sisäänpäin on sallittu liikenne vain rajattuihin portteihin. Tässä vaiheessa voidaan kuitenkin huomata eriskummallinen seikka, nimittäin yhteydet toisiin palvelimiin eivät tunnu enää toimivan. Yritämme ottaa yhteyden google.com:iin (curl google.com), mutta emme saa vastausta. Emme estäneet ulospäin menevää liikennettä, joten miksi emme enää saa yhteyttä ulos? | |||
Kyse on siitä, että vaikka palomuurimme päästää paketit ulospäin, niin toiselta palvelimelta takaisin tuleva vastaus ei enää pääse palomuurista läpi, koska estimme sisäänpäin tulevan liikenteen. Lisätään siis uusi sääntö, joka sallii sellaiset sisäänpäin tulevat paketit, jotka kuuluvat johonkin jo avoinna olevaan yhteyteen. | |||
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | |||
Valitsimella '''-m state''' otetaan käyttöön iptablesin lisäosa nimeltä state, jonka jälkeen saadaan käyttöön valitsin '''--state''', jonka avulla voidaan määrittää, että sääntö täsmää paketteihin jotka ovat osa jotakin avattua yhteyttä (ESTABLISHED) tai muuten liittyvät johonkin olemassaolevaan yhteyteen (RELATED). | |||
Kun nyt otamme palvelimelta yhteyden ulospäin toiseen palvelimeen, niin palomuuri päästää toiselta palvelimelta tulevan vastauksen läpi, koska palomuuri tunnistaa että kyseiset paketit kuuluvat yhteyteen joka avattiin palvelimeltamme. Vaikka palomuuri päästääkin nyt ulkoapäin tulevat vastaukset läpi, ulkoapäin tulevat uudet yhteydet palomuuri estää edelleen, paitsi jos uusi yhteys avattaisiin erikseen sallimiimme portteihin 22, 80 tai 443. | |||
== Pakettien rajoittaminen == | == Pakettien rajoittaminen == |