Linux Iptables: verschil tussen versies

Uit Rolandow
Ga naar: navigatie, zoeken
(port forwarding)
 
Regel 20: Regel 20:
  
 
En ja, dat postrouting is nodig, anders werkt het niet.
 
En ja, dat postrouting is nodig, anders werkt het niet.
 +
 +
LET OP: Als je forward naar een machine op het interne netwerk, die een andere gateway gebruikt, lukt het niet. Onderstaande code was goed om naar een andere port te forwarden, maar werkte niet omdat joop een andere gateway had dan de SIP server (die tevens de forwarder was).
 +
 +
<source lang="bash">
 +
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 2222 -j DNAT --to-destination 172.16.99.20:22
 +
$IPTABLES -A FORWARD -p tcp -d 172.16.99.20 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 +
</source>
  
 
[http://serverfault.com/questions/140622/how-can-i-port-forward-with-iptables Source at serverfault]
 
[http://serverfault.com/questions/140622/how-can-i-port-forward-with-iptables Source at serverfault]

Huidige versie van 13 sep 2012 om 13:45

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.

LET OP: Als je forward naar een machine op het interne netwerk, die een andere gateway gebruikt, lukt het niet. Onderstaande code was goed om naar een andere port te forwarden, maar werkte niet omdat joop een andere gateway had dan de SIP server (die tevens de forwarder was).

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

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