Linux Iptables

Uit Rolandow
Versie door Rolandow (Overleg | bijdragen) op 20 dec 2011 om 14:04

Ga naar: navigatie, zoeken

port forwarding

Ten eerste: als je een regel toevoegt die al het verkeer van het interne netwerk accepteert, dan werkt het NATTEN van het web verkeer niet. Resultaat: ik kon niet meer browsen. Het verkeer wordt dan kennelijk op de gateway al opgevangen.

Vervolgens de volgende twee regels om verkeer van buitenaf te forwarden naar een server binnen het netwerk:

$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 80 -j DNAT --to-destination 172.16.255.14
$IPTABLES -A FORWARD -p tcp -d 172.16.255.14 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Hierbij is -d waarbij je het IP adres opgeeft denk ik belangrijk, anders zou al het verkeer worden geforward. Dat is weer niet handig als je de machine ook als gateway gebruikt. EXTIP is het internet IP adres van de machine.

Om de forward ook van "binnenuit" werkend te krijgen, zodat je dus op het lokale netwerk de server ook gewoon kan bereiken, kun je dit doen:

$IPTABLES -t nat -A PREROUTING -p tcp -i $INTIF -s 172.16.0.0/16 -d $EXTIP --dport 80 -j DNAT --to-destination 172.16.255.14
$IPTABLES -t nat -A POSTROUTING -p tcp -s 172.16.0.0/16 -o $INTIF -d 172.16.255.14 --dport 80 -j SNAT --to $EXTIP

En ja, dat postrouting is nodig, anders werkt het niet.

Source at serverfault

voorbeeld firewall

#!/bin/sh
IPTABLES='/sbin/iptables'

# Set interface values
EXTIF='eth1'
EXTIP='92.xxx.xxx.xxx'
INTIF='eth0'

# enable ip forwarding in the kernel
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

# flush rules and delete chains
$IPTABLES -F
$IPTABLES -X

# Forward port 80 to SOAP server
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 80 -j DNAT --to-destination 172.16.255.14
$IPTABLES -A FORWARD -p tcp -d 172.16.255.14 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# internal
$IPTABLES -t nat -A PREROUTING -p tcp -i $INTIF -s 172.16.0.0/16 -d $EXTIP --dport 80 -j DNAT --to-destination 172.16.255.14
$IPTABLES -t nat -A POSTROUTING -p tcp -s 172.16.0.0/16 -o $INTIF -d 172.16.255.14 --dport 80 -j SNAT --to $EXTIP

#Enable masquerading to allow LAN internet access
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

#Forward LAN traffic from LAN $INTIF to Internet $EXTIF
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

#Allowing access to the SSH server"
$IPTABLES -A INPUT -s xx.xx.xx.xx  --protocol tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -s xx.xx.xx.xx  --protocol tcp --dport 22 -i $INTIF -j ACCEPT


# Allow ping
$IPTABLES -A INPUT -p icmp -j ACCEPT

# DON'T DO THIS
#$IPTABLES -A INPUT -s 172.16.0.0/16 -j ACCEPT

IPLIST="217.21.203.0/29 217.21.192.64/29 193.67.129.60 193.67.129.61 193.67.129.63 193.67.129.65 193.67.129.180"
for ip in $IPLIST; do
  echo Opening voip ports for IP $ip
  $IPTABLES -A INPUT -s $ip --protocol tcp -m multiport --dports 5004,5060,10000:30000 -j ACCEPT
  $IPTABLES -A INPUT -s $ip --protocol udp -m multiport --dports 5004,5060,10000:30000 -j ACCEPT
done

$IPTABLES -A INPUT -s 172.16.0.0/16 --protocol udp -i $INTIF -m multiport --dports 5004,5060,10000:30000 -j ACCEPT

# block all other Internet access on $EXTIF
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j REJECT
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j REJECT