Linux Iptables: verschil tussen versies

Uit Rolandow
Ga naar: navigatie, zoeken
(Nieuwe pagina aangemaakt met '= port forwarding = This seemed to work for me: First of all - you should check if forwarding is allowed at all: <source lang="bash"> cat /proc/sys/net/ipv4/conf/pp…')
 
(port forwarding)
 
(Een tussenliggende versie door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
 
= port forwarding =
 
= port forwarding =
  
This seemed to work for me:
+
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.
  
First of all - you should check if forwarding is allowed at all:
+
Vervolgens de volgende twee regels om verkeer van buitenaf te forwarden naar een server binnen het netwerk:
  
<source lang="bash">
+
<source lang=bash>
cat /proc/sys/net/ipv4/conf/ppp0/forwarding
+
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 80 -j DNAT --to-destination 172.16.255.14
cat /proc/sys/net/ipv4/conf/eth0/forwarding
+
$IPTABLES -A FORWARD -p tcp -d 172.16.255.14 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
</source>
 
</source>
  
If both returns '1' it's ok. If not do following:
+
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.
  
<source lang="bash">
+
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:
echo '1' > /proc/sys/net/ipv4/conf/ppp0/forwarding
+
 
echo '1' > /proc/sys/net/ipv4/conf/eth0/forwarding
+
<source lang=bash>
 +
$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
 
</source>
 
</source>
  
Second thing - DNAT could be applied on nat table only. So, your rule should be extended of table specification ('-t nat'):
+
En ja, dat postrouting is nodig, anders werkt het niet.
  
<source lang="bash">
+
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 -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
 
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
</source>
 
Both rules are applied only to tcp traffic (if you want to alter udp as well, you need to provide similar rules but with '-p udp' option set).
 
  
Last, but not least is routing configuration. Type:
 
 
<source lang="bash">
 
<source lang="bash">
ip route
+
$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>
 
</source>
and check if 192.168.1.0/24 is among returned routing entries.
 
  
 
[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]
 +
 +
= voorbeeld firewall =
 +
 +
<source lang=bash>
 +
#!/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
 +
</source>

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