4 175
muokkausta
p (pientä kehitystä) |
|||
Rivi 7: | Rivi 7: | ||
Iptablesin kanssa paketit jaetaan viiteen luokkaan: INPUT, OUTPUT, FORWARD, PREROUTING ja POSTROUTING. OUTPUT-tyyppiset paketit ovat paketteja jotka lähtevät koneeltasi Internettiin - esimerkiksi ladatessasi tämän sivun lähetit wikin palvelimelle paketin, jossa pyysit tätä sivua. Kun palvelin sitten vastaa pyyntöösi lähettäen tätä sivua paketteina, ne tulevat INPUT-tyyppisinä. FORWARD-tyyppiset paketit ovat paketteja, jotka vastaanotetaan toisesta verkosta ja lähetetään toiseen (yleensä Internetistä lähiverkkoon tai päinvastoin). | Iptablesin kanssa paketit jaetaan viiteen luokkaan: INPUT, OUTPUT, FORWARD, PREROUTING ja POSTROUTING. OUTPUT-tyyppiset paketit ovat paketteja jotka lähtevät koneeltasi Internettiin - esimerkiksi ladatessasi tämän sivun lähetit wikin palvelimelle paketin, jossa pyysit tätä sivua. Kun palvelin sitten vastaa pyyntöösi lähettäen tätä sivua paketteina, ne tulevat INPUT-tyyppisinä. FORWARD-tyyppiset paketit ovat paketteja, jotka vastaanotetaan toisesta verkosta ja lähetetään toiseen (yleensä Internetistä lähiverkkoon tai päinvastoin). | ||
Vielä yksi perusasia ennen kuin lähdemme säätelemään palomuuriamme: tehtyäsi asetukset ne eivät tallennu mihinkään, vaan seuraavan uudelleenkäynnistyken jälkeen asetukset palautuvat alkuperäisiksi. | Vielä yksi perusasia ennen kuin lähdemme säätelemään palomuuriamme: tehtyäsi asetukset ne eivät tallennu mihinkään, vaan seuraavan uudelleenkäynnistyken jälkeen asetukset palautuvat alkuperäisiksi. Tallentaminen onnistuu komennoilla <tt>iptables-save</tt> ja <tt>iptables-restore</tt> joista lisää myöhemmin. | ||
Kannattaa myös huomioida että ipforward pitää olla kytketty päälle /etc/sysctl.conf tiedostossa (net.ipv4.ip_forward=1) jotta FORWARD ketjun ja nat taulun säännöillä olisi vaikutusta. Tiedoston muutos tulee voimaan vasta uudelleenkäynnistyksen jälkeen, joten jos haluaa, että ipforward tulee heti päälle pitää antaa seuraava komento: | Kannattaa myös huomioida että ipforward pitää olla kytketty päälle /etc/sysctl.conf tiedostossa (net.ipv4.ip_forward=1) jotta FORWARD ketjun ja nat taulun säännöillä olisi vaikutusta. Tiedoston muutos tulee voimaan vasta uudelleenkäynnistyksen jälkeen, joten jos haluaa, että ipforward tulee heti päälle pitää antaa seuraava komento: | ||
Rivi 13: | Rivi 13: | ||
Lisäksi iptables pitää kytkeä päälle, jos se ei ole jo. Tämä onnistuu seuraavalla komennolla: | Lisäksi iptables pitää kytkeä päälle, jos se ei ole jo. Tämä onnistuu seuraavalla komennolla: | ||
/sbin/chkconfig iptables on | /sbin/chkconfig iptables on | ||
Nykyään iptables on käytössä käytännössä kaikissa jakeluissa eikä mitään erityissäätöjä tarvitse tehdä sen käyttöönottamista varten. | |||
=== Pakettien estäminen === | === Pakettien estäminen === | ||
Tietystä osoitteesta tulevia paketteja voidaan estää iptables-komennoilla joiden syntaksi on seuraavanlainen: | Tietystä osoitteesta tulevia paketteja voidaan estää iptables-komennoilla joiden syntaksi on seuraavanlainen: | ||
iptables -s osoite -A INPUT -j DROP | iptables -s osoite -A INPUT -j DROP | ||
Parametri -s tarkoittaa osoitetta, josta paketit tulevat (engl. <i>source</i>). Osoite voi olla joko IP-osoite (123.345.456.578) tai DNS-nimi (esim | Parametri -s tarkoittaa osoitetta, josta paketit tulevat (engl. <i>source</i>). Osoite voi olla joko IP-osoite (123.345.456.578) tai DNS-nimi (esim. linux.fi). Yksittäisen osoitteen sijaan voidaan antaa myös kokonainen IP-osoiteavaruus käyttäen [[wikipedia:Netmask|verkkomaskia]]: esimerkiksi IP-osoitteet väliltä 192.168.0.0-192.168.0.255 valittaisiin merkinnällä 192.168.0.0/255.255.255.0. | ||
-A tarkoittaa paketin tyyppiä, tässä tapauksessa sisään tulevaa pakettia. -j kertoo, mitä paketille tehdään. Tässä tapauksessa se pudotetaan (engl. <i>drop</i>), eli sitä ei päästetä palomuurin läpi. | -A tarkoittaa paketin tyyppiä, tässä tapauksessa sisään tulevaa pakettia (<tt>INPUT</tt>). -j kertoo, mitä paketille tehdään. Tässä tapauksessa se pudotetaan (engl. <i>drop</i>), eli sitä ei päästetä palomuurin läpi. | ||
Vastaavasti tiettyyn osoitteeseen lähetettävät paketit voitaisiin estää komennolla | Vastaavasti tiettyyn osoitteeseen lähetettävät paketit voitaisiin estää komennolla | ||
iptables -d osoite -A OUTPUT -j DROP | iptables -d osoite -A OUTPUT -j DROP | ||
Huomaa, että pakettilähteen (-s) tilalla käytetään nyt pakettien kohdetta -d (engl. <i>destination</i>). Lisäksi pakettien tyyppi -A on nyt OUTPUT. | Huomaa, että pakettilähteen (-s) tilalla käytetään nyt pakettien kohdetta -d (engl. <i>destination</i>). Lisäksi pakettien tyyppi -A on nyt <tt>OUTPUT</tt>. | ||
=== Tarkempaa | === Tarkempaa rajo | ||
Edellä estimme kaikki mahdolliset paketit tiettyyn osoitteeseen. Iptables tarjoaa kuitenkin mahdollisuuden käyttää tarkempia rajoituksia. Esimerkiksi seuraavassa | ---- | ||
iptables -A INPUT -s 123.456.789.123 -p tcp | ittamista === | ||
Huomaa uudet valitsimet -p (protokolla) ja - | Edellä estimme kaikki mahdolliset paketit tiettyyn osoitteeseen. Iptables tarjoaa kuitenkin mahdollisuuden käyttää tarkempia rajoituksia. Esimerkiksi seuraavassa estäisimme kaiken saapuvan [[SSH]]-liikenteen osoitteesta 123.456.789.123 (porttiin 22 kohdistuvan [[TCP]]-protokollaa käyttävän liikenteen). | ||
iptables -A INPUT -s 123.456.789.123 -p tcp --dport 22 -j DROP | |||
Huomaa uudet valitsimet -p (protokolla) ja --dport (kohdeportti, <i>destination port</i>, voi olla myös alue muodossa alku:loppu). Iptables ymmärtää myös portin numeron sijasta protokollien nimiä, esimerkiksi ssh (portti 22) tai http (80). | |||
=== SYN-paketit === | === SYN-paketit === | ||
SYN paketit ovat käytännöllisiä pikku kikkoja, kun haluamme kohdeosoitteen keskustelevan meidän kanssamme vasta siinä vaiheessa kun olemme ensin itse ottaneet yhteyden kohdekoneeseen. Eli paketit estetään jos kohdejärjestelmä aloittaa yhteyden, mutta hyväksytään siinä vaiheessa jos yhteyden aloittaja olemme me. Seuraavassa komennossa meidän tulee määritellä laite, joka on kytköksissä verkkoon josta haluamme estää liikenteen. Tämä tapahtuu kytkimellä -i(interface), jonka jälkeen tulee laitteen "nimi" (yleensä laajakaistajärjestelmissä verkkokortti eth0). Seuraavalla komennolla saamme estettyä kaiken liikenteen tietokoneemme TCP-portteihin jos emme itse ensin ota yhteyttä kohdekoneeseen: | SYN-paketit ovat käytännöllisiä pikku kikkoja, kun haluamme kohdeosoitteen keskustelevan meidän kanssamme vasta siinä vaiheessa kun olemme ensin itse ottaneet yhteyden kohdekoneeseen. Eli paketit estetään jos kohdejärjestelmä aloittaa yhteyden, mutta hyväksytään siinä vaiheessa jos yhteyden aloittaja olemme me. Seuraavassa komennossa meidän tulee määritellä laite, joka on kytköksissä verkkoon josta haluamme estää liikenteen. Tämä tapahtuu kytkimellä -i(interface), jonka jälkeen tulee laitteen "nimi" (yleensä laajakaistajärjestelmissä verkkokortti eth0). Seuraavalla komennolla saamme estettyä kaiken liikenteen tietokoneemme TCP-portteihin jos emme itse ensin ota yhteyttä kohdekoneeseen: | ||
iptables -A INPUT -i eth0 -p tcp --syn -j DROP | iptables -A INPUT -i eth0 -p tcp --syn -j DROP | ||
Näin, entä jos haluamme ajaa esim. http-palvelinta kuten [[Apache]]? Ei huolta, määrittelemme kohdeportiksi kaikki muut portit paitsi TCP/80, jota apache käyttää vakiona. Tämä saadaan aikaan komennolla | Näin, entä jos haluamme ajaa esim. http-palvelinta kuten [[Apache]]? Ei huolta, määrittelemme kohdeportiksi kaikki muut portit paitsi TCP/80, jota apache käyttää vakiona. Tämä saadaan aikaan komennolla | ||
iptables -A INPUT -i eth0 -p tcp --syn --destination-port ! 80 -j DROP | iptables -A INPUT -i eth0 -p tcp --syn --destination-port ! 80 -j DROP | ||
== Asetusten tallentaminen ja palauttaminen == | |||
Iptablesin senhetkiset asetukset saa ulos ajamalla pääkäyttäjänä komennon | |||
iptables-save | |||
, joka tulostaa nykyiset asetukset (käytännössä normaaleita iptables-komentoja ilman iptables-alkuosaa). Toimivat asetukset kannattaakin [[Komentorivin perusteet#putkitus|tallentaa]] tiedostoon: | |||
iptables-save > /home/tux/iptables-asetukset | |||
Jonka jälkeen toimivat asetukset on tarvittaessa helppo palauttaa komennolla | |||
iptables-restore /home/tux/iptables-asetukset | |||
== Pikamuuri == | == Pikamuuri == | ||
Rivi 46: | Rivi 57: | ||
Seuraavaksi sallitaan [[loopback]]-liikenne | Seuraavaksi sallitaan [[loopback]]-liikenne | ||
iptables -A INPUT -i lo -j ACCEPT | iptables -A INPUT -i lo -j ACCEPT | ||
Jos sinulla on lähiverkko, voit sallia liikenteen siinä ( | Jos sinulla on lähiverkko, voit sallia liikenteen siinä (oletetaan, että lähiverkon nimiavaruus on 192.168.0.x) | ||
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT | iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT | ||
Tähän kohtaan voidaan avata halutut portit ('''ÄLÄ AVAA JOS EI OLE TARVETTA''') | Tähän kohtaan voidaan avata halutut portit ('''ÄLÄ AVAA JOS EI OLE TARVETTA''') | ||
Rivi 143: | Rivi 154: | ||
${IPTABLES} -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE | ${IPTABLES} -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE | ||
== Ongelmatilanteita == | |||
Joissain jakeluissa käytössä olevat verkkoyhteyden hallintatyökalut saattavat aiheuttaa ongelmia, jos iptablesia käytetään käsin. Esimerkiksi [[Ubuntu]]n käyttämä [[NetworkManager]] on tällainen. Lisätietoja löytyy [https://help.ubuntu.com/community/IptablesHowTo Ubuntun ohjeista]. | |||
== Aiheesta muualla == | |||
*[http://gentoo-wiki.com/HOWTO_Iptables_for_newbies Iptables-opas] Gentoo-wikissä | |||
*[https://help.ubuntu.com/community/IptablesHowTo Ubuntun iptables-opas] | |||
[[Luokka:Järjestelmä]] | [[Luokka:Järjestelmä]] |