IPTables, något att lära och förstå?

Först och främst, detta handlar inte om hur eller vad du skall installera, jag förutsätter att du har paketen iptables samt iptables-persistent i din utrustning så att du kan texteditera /etc/iptables/rules.v4 eller .v6 för att göra ändringar 😉 …

Att lära sig, och inte minst förstå, IPTables är viktigt om du kör Linux, det är där du enklast beskriver vilka regler som skall gälla till och från din maskin samt även hur trafik som går genom den (routas) hanteras, vad som skall tillåtas, stoppas, adressöversättas (NAT) och så vidare …

IP Tables explained

IPtables består, lite grovt förklarat, av fem huvuddelar. Det är ”prerouting”, ”forward” och ”postrouting” för trafik som skall skickas (routas) genom din utrustning samt ”input” och ”output” istället för ”forward” om trafiken skall till någon av din utrustnings interna processer, t.ex. en webbserever.

Innan vi tar oss in i exemplen så tittar vi först på IPTables olika byggstenar.

Prerouting

Första steget när IP-paketen kommer in i IPTablesprocessen är vad som kallas Prerouting och här kan man t.ex. styra destinations-NAT, omdirigeringar med mera. Tänk bara på att om du styr om från en destinations-IP i det inkommande paketet till delprocessen till en annan destinations-IP eller kanske IP-port så är det denna man sedan får ange i påföljande delsteg … Klurigt kan det bli … 😉

Forward

I Forwarddelsteget arbetar man med vilken IP-trafik som skall ges lov att prata med andra IP-nät eller IP-adresser innan paketet når operativsystemets egen routingprocess, dvs. att själva omdirigeringen (routingen) hanteras inte över huvud taget av IPTables.

Postrouting

Efter att operativsystemets routingprocess hanterat eventuella vägval för IP-paketet så tar åter IPTables hand om det och nu hanteras det i delsteget som heter Postrouting, det är bland annat här man adressöversätter från intern privat IP-adress till en publik IP-adress på routern utsida, t.ex. mot Internet, så kallad SNAT (Source NAT).

Input

För hantering av inkommande IP-trafik mot den egna utrustningens interna processer använder man ett delsteg som heter Input och detta delsteg ligger efter Prerouting och före de interna processerna, det kan vara webbserver, SSH och andra tjänster som ligger aktiva i utrustningen och som väntar på anrop.

Output

För hantering av IP-trafik från den egna enhetens interna processer mot andra enheters IP-adresser så använder man delsteget Output.

Filter och NAT

Man delar konfigurationsfilen för iptables-persistent i olika grupper, dels för ”filter” och dels för ”nat”.

Exempel?

Ett exempel på en /etc/iptables/rules.v4 kan se ut såhär.

*filter

# Om inget annat sägs, kasta all trafik för Input och för Forward men tillåt allt i Output.

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Tillåt att all trafik som genereras från interna processer tillåts tillbaka in.

-A INPUT -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT

# Tillåt SSH-trafik på IP-port 22 mot egna enheten.

-A INPUT -s 192.168.100.0/23 -p tcp -m tcp –dport 22 -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT

# Kasta all trafik från internt IP-nät 192.168.123.0/24 mot annat internt IP-nät 192.168.100.0/23 oavsett protokolltyp

-A FORWARD -s 192.168.123.0/24 -d 192.168.100.0/23 -j DROP

# Tillåt att all trafik från interna IP-nät 192.168.100.0/23 och 192.168.123.0/24 mot Internet tillåts passera genom enheten, samt att returtrafik tillbaka från Internet skall tillåtas passera mot de interna IP-näten.

-A FORWARD -s 192.168.100.0/23 -d 0.0.0.0/0 -p udp -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.123.0/24 -d 0.0.0.0/0 -p udp -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/23 -d 0.0.0.0/0 -p tcp -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.123.0/24 -d 0.0.0.0/0 -p tcp -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -s 0.0.0.0/0 -d 192.168.100.0/23 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 0.0.0.0/0 -d 192.168.123.0/24 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT

# Slut på *filter

COMMIT

*nat

# Tillåt all trafik för *nat genom Prerouting, Input, Output och Postrouting.

:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# I Postrouting, lägg in en source-NAT mot Internet för båda Interna IP-näten 192.168.100.0/23 samt 192.168.123.0/24. Istället för att ange en IP-adress på utsidan som ISP kan ändra, använd utsidans IP-adress genom interfacenamn, i det här fallet ”eth1”.

-A POSTROUTING -s 192.168.100.0/23 -o eth1 -j MASQUERADE
-A POSTROUTING -s 192.168.123.0/24 -o eth1 -j MASQUERADE

# Slut på *nat

COMMIT