Iptables

Linux.fista
Versio hetkellä 8. huhtikuuta 2007 kello 18.50 – tehnyt Str4nd (keskustelu | muokkaukset) (wikilinkki loopbackille)
Siirry navigaatioon Siirry hakuun

Iptables-työkalulla säädetään Linuxin ytimessä olevaa Netfilter-pakettisuodatinta. Sen avulla voidaan toteuttaa esimerkiksi palomuureja. Iptables on ollut mukana ytimessä versiosta 2.4-alkaen.

Pakettien rajoittaminen

Palomuuri perustuu siihen, että tietyt paketit (tieto liikkuu Internetissä paketteina) pääsevät palomuurin läpi ja tietyt estetään. Näitä esto- ja päästösääntöjä säädetään iptablesilla.

Iptablesin kanssa paketit jaetaan kolmeen luokkaan: INPUT, OUTPUT ja FORWARD. 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. Tämä voidaan estää tallentamalla asetukset komennolla /sbin/iptables-save. Tallennetut asetukset palautetaan komennolla /sbin/iptables-restore.

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.

Pakettien estäminen

Tietystä osoitteesta tulevia paketteja voidaan estää iptables-komennoilla joiden syntaksi on seuraavanlainen:

iptables -s osoite -A INPUT -j DROP

Parametri -s tarkoittaa osoitetta, josta paketit tulevat (engl. source). Osoite voi olla joko IP-osoite (123.345.456.578) tai DNS-nimi (esim. wiki.linux.fi).

-A tarkoittaa paketin tyyppiä, tässä tapauksessa sisään tulevaa pakettia. -j kertoo, mitä paketille tehdään. Tässä tapauksessa se pudotetaan (engl. drop), eli sitä ei päästetä palomuurin läpi.

Vastaavasti tiettyyn osoitteeseen lähetettävät paketit voitaisiin estää komennolla

iptables -d osoite -A OUTPUT -j DROP

Huomaa, että pakettilähteen (-s) tilalla käytetään nyt pakettien kohdetta -d (engl. destination). Lisäksi pakettien tyyppi -A on nyt OUTPUT.

Tarkempaa rajoittamista

Edellä estimme kaikki mahdolliset paketit tiettyyn osoitteeseen. Iptables tarjoaa kuitenkin mahdollisuuden käyttää tarkempia rajoituksia. Esimerkiksi seuraavassa rajoittaisimme kaiken SSH-liikenteen (porttiin 22 kohdistuvan TCP-protokollaa käyttävän liikenteen).

iptables -A INPUT -s 123.456.789.123 -p tcp –destination-port 22 -j DROP

Huomaa uudet valitsimet -p (protokolla) ja -destination-port (kohdeportti). Iptables ymmärtää myös portin numeron sijasta protokollien nimiä, esimerkiksi ssh (portti 22) tai http (80).

Pikamuuri

Tässä ohjeet yksinkertaisen palomuurin pystyttämiseen:

Ensin säädetään perusasetukset: kaikki sisään tuleva estetään ja ulos menevä sallitaan

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Seuraavaksi sallitaan loopback-liikenne

iptables -A INPUT -i lo -j ACCEPT

Jos sinulla on lähiverkko, voit sallia liikenteen siinä (oletan, että lähiverkon nimiavaruus on 192.168.0.x)

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)

#ssh-portin avaaminen koneen etäkäyttöön (22):
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
#http-portin avaaminen web-palvelinta varten (80):
iptables -A INPUT -p tcp --dport http -j ACCEPT 

Estetään liikenne private-portteihin

iptables -A INPUT -p tcp --dport 0:1023 -j DROP
iptables -A INPUT -p udp --dport 0:1023 -j DROP

Estetään SYN-paketit ja ICMP-liikenne

iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p icmp -j DROP

Sallitaan kaikki "takaisin palaava" liikenne

iptables -A INPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p UDP -m state --state RELATED,ESTABLISHED -j ACCEPT

Lopuksi estetään loput

iptables -A INPUT -j DROP

Esimerkkejä

Tämän pienen iptables-skriptin avulla saat Linux-koneen reitittämään netin muille koneille.

Koneessa on 2 verkkokorttia:

  • eth0 = Lähiverkko
  • eth1 = Internet

Lähiverkon ip-avaruus on 192.168.x.x

#!/bin/bash

#Muuttujat
LAN=eth0
LAN_IP=192.168.0.0/255.255.0.0
WAN=eth1
IPTABLES=/sbin/iptables

###########################################################
###################### Perustaulukko ######################
###########################################################

#Putsataan taulukko
${IPTABLES} -F
${IPTABLES} -X

#Taulukoiden perussäännöt
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P INPUT DROP
${IPTABLES} -P OUTPUT ACCEPT

#---------- INPUT ----------#
${IPTABLES} -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
${IPTABLES} -A INPUT -i ${LAN} -s ${LAN_IP} -j ACCEPT
#Salli SSH-yhteys ulkopuolelta
#${IPTABLES} -A INPUT -p tcp --dport ssh -j ACCEPT
${IPTABLES} -A INPUT -i ${WAN} -p tcp --dport 0:1023 -j DROP
${IPTABLES} -A INPUT -i ${WAN} -p udp --dport 0:1023 -j DROP
${IPTABLES} -A INPUT -i ${WAN} -p tcp --syn -j DROP
${IPTABLES} -A INPUT -i ${WAN} -p icmp -j DROP
${IPTABLES} -A INPUT -i ${WAN} -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT
${IPTABLES} -A INPUT -i ${WAN} -p UDP -m state --state RELATED,ESTABLISHED -j ACCEPT
${IPTABLES} -A INPUT -j DROP

#---------- FORWARD ----------# 
${IPTABLES} -A FORWARD -i ${WAN} -p tcp --dport 0:1023 -j DROP
${IPTABLES} -A FORWARD -i ${WAN} -p udp --dport 0:1023 -j DROP
${IPTABLES} -A FORWARD -i ${WAN} -p tcp --syn -j DROP
${IPTABLES} -A FORWARD -i ${WAN} -p icmp -j DROP
${IPTABLES} -A FORWARD -i ${LAN} -o ${WAN} -s ${LAN_IP} -j ACCEPT
${IPTABLES} -A FORWARD -i ${WAN} -o ${LAN} -d ${LAN_IP} -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT
${IPTABLES} -A FORWARD -i ${WAN} -o ${LAN} -d ${LAN_IP} -p UDP -m state --state RELATED,ESTABLISHED -j ACCEPT
${IPTABLES} -A FORWARD -j DROP

#---------- OUTPUT ----------#

##########################################################
###################### NAT-taulukko ######################
##########################################################

#Putsataan taulukko
${IPTABLES} -t nat -F
${IPTABLES} -t nat -X

#Taulukoiden perussäännöt
${IPTABLES} -t nat -P PREROUTING ACCEPT
${IPTABLES} -t nat -P POSTROUTING ACCEPT
${IPTABLES} -t nat -P OUTPUT ACCEPT

#---------- PREROUTING ----------#
#Tänne uudelleenohjeukset
#Call of Duty 
#${IPTABLES} -t nat -A PREROUTING -p udp --dport 28960 -i ${WAN} -j DNAT --to 192.168.x.x
#web-serveri
#${IPTABLES} -t nat -A PREROUTING -p tcp --dport http -i ${WAN} -j DNAT --to 192.168.x.x

#---------- POSTROUTING ----------#
${IPTABLES} -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

#---------- OUTPUT ----------#

Katso myös