[Olug-list] help: ipchains og iptables

Erik Grinaker erikg@wired-networks.net
22 Dec 2002 14:52:33 +0100


On Sun, 2002-12-22 at 02:42, Espen B=F8 wrote:

> Jeg lurer p=E5 om det er noen som kan hjelpe meg med ipchains og iptables=
.
>=20
> Jeg skj=F8nner ingen av dem noe serlig... S=E5 vist dere kunne lage et op=
psett
> til meg med begge to hadde det hvert fint. Gjerne med litt forklaringer p=
=E5
> et veldig enkelt nybegynner spr=E5k;)

Ok. F=F8rst og fremst; ipchains er for kernel 2.2, og iptables er for 2.4.
Hvilken du skal bruke er avhengig av kernel-versjonen din, men iptables
er helt klart den beste - s=E5 bruk helst den dersom du ikke har noen
spesiell grunn for =E5 bruke kernel 2.2.

N=E5 er det ogs=E5 slik at jeg startet med linux omkring tiden da 2.4 kom
ut, og har derfor ikke noe s=E6rlig erfaring med ipchains. men jeg kan
fortelle hvordan dette skal gj=F8res med iptables.

Du b=F8r ogs=E5 lese et par av HOWTOene p=E5 netfilter-sidene (netfilter er
pakkefilter-systemet i linux 2.4 kernelen, iptables er verkt=F8yet du
bruker for =E5 kontrollere det);

http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html
http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.html
http://www.netfilter.org/documentation/index.html

N=E5 skal det ogs=E5 sies at n=E5r du skal leke med iptables direkte s=E5
forutsetter det at du kan en del om nettverking, og ogs=E5 at du virkelig
er interessert i =E5 l=E6re hvordan det fungerer. Hvis du vil ha noe som
"bare funker" foresl=E5r jeg at du bruker en frontend for iptables, slik
som f eks firestarter (http://firestarter.sourceforge.net/).


> Her er det jeg =F8nsker.
>=20
> Jeg har en Linux maskin og en Windows maskin. Linux maskinen skal dele ut
> internett til den andre maskinen. Windows maskinen skal brukes til vanlig=
e
> ting. (surfe, mail, ftp, spille osv..)
> Linux maskinen skal man kunne gj=F8re det samme med, men jeg vil ogs=E5 k=
unne
> dele ut ftp serveren min ut p=E5 internett n=E5r jeg vil det (ellers skal=
 det
> hvere oppe p=E5 lokal nettverket) og ssh n=E5r det kan hvere behov for de=
t.

Ok. Det du trenger for =E5 f=E5 til dette er NAT (network address
translation). Dette er et system som gj=F8r om p=E5 alle pakkene som kommer
fra lokalnettet slik at det ser ut som om de kommer fra linux-boksen din
(alts=E5 den eksterne IP-adressen din).

Dette st=F8ttes i Netfilter, og vi kommer til =E5 bruke en spesiell versjon
av NAT, som kalles masquerading - denne er spesielt godt egnet for
bokser som har dynamiske ip-adresser (noe jeg regner med at du har).

I tillegg kommer vi til =E5 sette opp en veldig enkel brannmur. Denne kan
du senere bygge videre p=E5 for =E5 f eks kun tillate ssh fra et par-tre
spesifikke ip-adresser.

Noe som pleier =E5 v=E6re vanskelig for newbies er at iptables-oppsettet
ikke blir automatisk lagret. N=E5r du kj=F8rer en iptables-kommando s=E5 bl=
ir
den lagt inn i kernelens pakkefilter-tabeller i minnet, men minnet
t=F8mmes n=E5r du starter om og kernelen har helt tomme tabeller. Du m=E5
derfor lagre dette som et shell-skript, og deretter kj=F8re dette skriptet
hver gang maskinen starter om (hvor du setter dette i oppstartsskriptene
er avhengig av hvilken distribusjon du har).



F=F8rst et par sm=E5 forklaringer om hvordan iptables fungerer;

kernelen har i utgangspunktet tre s=E5kalte chains; INPUT, FORWARD og
OUTPUT. N=E5r kernelen mottar en pakke s=E5 g=E5r den gjennom en av disse
kjedene helt til den finner en regel som matcher pakken. Den f=F8rste og
beste regelen som matcher vil bli brukt. Dersom ingen regler i kjeden
matcher vil pakken bli fanget opp av kjede-policien. INPUT brukes for
pakker som kommer inn p=E5 et interface og skal til linux-maskinen. OUTPUT
er for alle pakker som skal fra linux-maskinen og ut p=E5 et interface.
FORWARD brukes for all trafikk som rutes gjennom brannmuren din (dvs fra
LAN til internett, og omvendt).

iptables er et s=E5kalt stateful packetfilter. Det vil si at det har
mulighet til =E5 analysere hvor en connection oppst=E5r, og deretter knytte
bestemte pakker opp mot allerede eksisterende tcp connections. Dette
gj=F8r livet utrolig mye enklere, samt at det gir bedre kontroll og mye
h=F8yere sikkerhet. Det fikser ogs=E5 problemet med =E5 kj=F8re ftp gjennom=
 nat
(noe som i "gamle dager" var en hodepine uten like).



Jeg kommer til =E5 anta at du har det f=F8lgende oppsettet:

lokalnett: 192.168.0.0/24
linux-eth1: 192.168.0.1
linux-eth0: dhcp (internett)

Jeg regner ogs=E5 med at all iptables-funksjonalitet er kompilert inn i
kernelen. Dersom distribusjonen din har dette som moduler s=E5 m=E5 modulen=
e
f=F8rst loades inn i kernelen din.

N=E5 er jeg =F8rlitt rusten n=E5r det gjelder NAT og iptables, s=E5 det er =
mulig
dette ikke funker 100%... Men vi gj=F8r et fors=F8k.



#!/bin/bash

# Hvis du m=E5 loade moduler for kernelen din, b=F8r dette gj=F8res her.
# Evt i /etc/modules.conf

# I tilfelle ruting ikke er skrudd p=E5 for kernelen din s=E5 gj=F8r vi
# det her
echo 1 >/proc/sys/net/ipv4/ip_forward

# Vi setter ogs=E5 noen variabler, slik at det blir enkelt =E5 endre
LAN=3D192.168.0.0/24
IF_LAN=3Deth1
IP_LAN=3D192.168.0.1
IF_INET=3Deth0

# F=F8rst t=F8mmer vi tabellene for eventuelle eksisterende regler
iptables -F
iptables -X

# S=E5 setter vi standard policies for alle kjeder til DROP.
# Det vil si at alt vi ikke eksplisitt sier at skal v=E6re tillatt,
# er forbudt; hvis ingen regler matcher pakken, s=E5 droppes den.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Vi setter deretter opp NAT masqueradingen. Det er dette som lar
# deg "dele" internett-linjen din med andre (ikke bry deg om hva
# dette betyr enn=E5, NAT er litt spesielt)
iptables -t nat -A POSTROUTING -o $IF_INET -j MASQUERADE

# Her sier vi at all trafikk som er del av en allerede eksisterende
# connection skal v=E6re tillatt.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vi tillater ogs=E5 all icmp-trafikk
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# All trafikk p=E5 loopback-interfacet m=E5 ogs=E5 tillates
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# Her tillater vi alle nye tcp/udp-connections fra lokalnettet til internet=
t
iptables -A FORWARD -p tcp -s $LAN --tcp-flags SYN,ACK,RST SYN -j ACCEPT
iptables -A FORWARD -p udp -s $LAN -m state --state NEW -j ACCEPT

# Siden du ikke har en fast ip, s=E5 tillater vi all trafikk ut
# som opprettes fra linux-boksen din
iptables -A OUTPUT -p tcp --tcp-flags SYN,ACK,RST SYN -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW -j ACCEPT

# Her tillater vi all trafikk fra lokalnettet til linux-boksen
iptables -A INPUT -i $IF_LAN -p tcp --tcp-flags SYN,ACK,RST SYN -s $LAN -d =
$IP_LAN -j ACCEPT
iptables -A INPUT -i $IF_LAN -p udp -m state --state NEW -s $LAN -d $IP_LAN=
 -j ACCEPT

# Deretter tillater vi ftp og ssh inn fra internett til linux-
# boksen din
iptables -A INPUT -i $IF_INET -p tcp --tcp-flags SYN,ACK,RST SYN --dport 21=
 -j ACCEPT
iptables -A INPUT -i $IF_INET -p tcp --tcp-flags SYN,ACK,RST SYN --dport 22=
 -j ACCEPT



S=E5nn, det var det. Mer info om hva de forskjellig switchene betyr finner
du i man-sidene til iptables.

N=E5 skrev jeg bare dette rett fra hodet, uten =E5 teste dette - s=E5 det k=
an
godt hende at det ikke fungerer helt. Men det skal v=E6re et veldig greit
utgangspunkt iallefall. Hvis noe ikke fungerer helt s=E5 m=E5 du bare
sp=F8rre.

Lykke til!



--=20
Erik Grinaker
http://erikg.wired-networks.net

"To iterate is human, to recurse, divine"
  - Robert Heller