Linux Iptables: verschil tussen versies
(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…') |
|||
Regel 1: | Regel 1: | ||
= port forwarding = | = 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: | |
− | <source lang= | + | <source lang=bash> |
− | + | $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 | |
</source> | </source> | ||
− | + | 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= | + | 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: |
− | + | ||
− | + | <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> | ||
− | + | En ja, dat postrouting is nodig, anders werkt het niet. | |
+ | |||
+ | [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> | </source> | ||
− | |||
− | |||
− |
Versie van 20 dec 2011 om 14:04
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.
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