Ett litet exempel på maskering

Nedan följer ett exempel på en Linuxdator med netfilter/iptables och två nätverkskort. Det ena nätverkskortet, eth1, kopplas till omvärlden och det andra, eth0, kopplas till det interna nätverket.



/etc/rc.d/init.d/firewall-start

Vi börjar med att skapa filen /etc/rc.d/init.d/firewall-start för att sätta upp standardregler och rensa bort gamla regler och gamla kedjor.

#!/bin/sh

# Firewall rules

# Sätt upp standardregler
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

# Rensa bort gamla brandväggsregler
/sbin/iptables -F
/sbin/iptables -t nat -F

# Rensa bort gamla kedjor
/sbin/iptables -X


/etc/rc.d/init.d/firewall

Därefter skapar vi filen /etc/rc.d/init.d/firewall som är den som sätter upp brandväggsreglerna.

#!/bin/sh

# eth1 utsida
# eth0 insida

# Om maskeringen är kompilerad som modul
# aktivera raden nedan (genom att ta bort # i början på raden)
#modprobe iptable_nat

# För att ESTABLISHED, RELATED ska fungera bra för FTP-trafik ladda
# nedanstående modul. Om den ligger fast i kärnan kommentera bort raden.
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# Slå på routing
echo "1" > /proc/sys/net/ipv4/ip_forward

# Firewall rules
# Min egna IP-adress på eth1 (yttre interface)
MEeth1=`/sbin/ifconfig eth1 |sed -n '/inet/s/^[ ]*inet addr:\([0-9.]*\).*/\1/p'`
# Min broadcastadress på eth1
MYBROADCASTeth1=`/sbin/ifconfig eth1 |sed -n '/inet/s/^.*Bcast:\([0-9.]*\).*/\1/p'`

# Min egna IP-adress på eth0 (inre interface)
MEeth0=`/sbin/ifconfig eth0 |sed -n '/inet/s/^[ ]*inet addr:\([0-9.]*\).*/\1/p'`
# Min broadcastadress på eth0
MYBROADCASTeth0=`/sbin/ifconfig eth0 |sed -n '/inet/s/^.*Bcast:\([0-9.]*\).*/\1/p'`

# Skapa kedjan logdrop som loggar och kastar trafiken
/sbin/iptables -N logdrop
/sbin/iptables -A logdrop -j LOG
/sbin/iptables -A logdrop -j DROP

# Logga och kasta nya TCP-paket som inte är SYN-paket
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW NOT SYN  "
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW NOT SYN  "
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP


# FORWARDREGLER
# Spärra trafik som kommer till broadcastadressen
/sbin/iptables -A FORWARD --in-interface eth1 --destination $MYBROADCASTeth0/32 -j logdrop
/sbin/iptables -A FORWARD --in-interface eth0 --destination $MYBROADCASTeth1/32 -j logdrop

# Släpp ut trafik från interna nätet, och släpp in svarstrafik
/sbin/iptables -A FORWARD --in-interface eth0 -j ACCEPT
/sbin/iptables -A FORWARD --in-interface eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Lägg på maskering på utgående trafik som ska ut till Internet så att
# det ser ut som att det är brandväggens utsida som surfar
/sbin/iptables -t nat -A POSTROUTING -o eth1  -j SNAT --to $MEeth1
#
# Om du får din adress på yttre interfacet, eth1, dynamiskt via
# t.ex. dhcp ska följande rad användas istället för SNAT-regeln ovan:
# /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Notera att MASQUERADE gör av med lite mer CPU-kraft än SNAT.
#
# Om du får din adress dynamiskt på eth1 lägg även till följande rad:
# echo "1" > /proc/sys/net/ipv4/ip_dynaddr 

# Logga och spärra resten
/sbin/iptables -A INPUT -j logdrop
/sbin/iptables -A FORWARD -j logdrop

Spara de två filerna och gör de exekverbara med:
chmod a+x /etc/rc.d/init.d/firewall-start
chmod a+x /etc/rc.d/init.d/firewall



Starta brandväggsreglerna automatisk vid boot

Nästa steg är att se till att brandväggsreglerna automatiskt sätts upp vid boot.

Om din dator normalt bootar till run level 3 går du till katalogen /etc/rc.d/rc3.d (RedHat och RedHat-liknande system) med kommandot:
cd /etc/rc.d/rc3.d
Om du använder grafisk inloggning, dvs din dator bootar normalt till run level 5 går du istället till katalogen /etc/rc.d/rc5.d (RedHat och RedHat-liknande system) med kommandot:
cd /etc/rc.d/rc5.d

I andra Linuxsystem kan katalogerna rc3.d respektive rc5.d ligga till exempel direkt under /etc och där får du istället göra:
cd /etc/rc3.d respektive
cd /etc/rc5.d

Är du osäker på vilken run level din dator bootar till kan du titta i filen /etc/inittab efter följande rad:
id:3:initdefault:
siffran 3 innebär att datorn normalt bootar till run level 3.

Nästa steg är att sätta upp symboliska länkar för att få brandväggsreglerna att automatiskt sättas upp vid boot. Först sätts standardreglerna upp innan nätverket tas upp och sedan sätts brandväggsregler upp efter att nätverket har kommit upp. Gör:
ln -s ../init.d/firewall-start S01firewall-start
ln -s ../init.d/firewall S12firewall




Brandväggsregler för trafik till Linuxdatorn

Notera att inga brandväggsregler för trafik till Linuxdatorn själv är uppsatta. Om Linuxdatorn ska kunna kommunicera med andra datorer måste regler för detta läggas till i filen /etc/rc.d/init.d/firewall. Exempel på några sådana regler är en för att Linuxdatorn ska få prata med sig själv och en för att tillåta inkommande svarstrafik till Linuxdatorn.

# Tillåt att prata med sig själv
/sbin/iptables -A INPUT --in-interface lo --source 127.0.0.0/8 -j ACCEPT

# Släpp fram svarstrafik
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Dessa regler läggs in innan reglerna för att spärra och logga resterande trafik.



Copyright © 2010-2024 Kjell Enblom.
This document is covered by the GNU Free Documentation License, Version 1.3

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".