Bluehost.com Web Hosting $6.95

Redirect problem with iptables and port forwarding

This is a discussion on Redirect problem with iptables and port forwarding within the Linux Networking forums, part of the Linux Forums category; Hi, here is the network configuration of my firewall: eth1 = connected to the internet eth0 = connected to my internal lan ...


Go Back   Usenet Forums > Linux Forums > Linux Networking

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 10-23-2003
Bertrand Sirodot
 
Posts: n/a
Default Redirect problem with iptables and port forwarding

Hi,

here is the network configuration of my firewall:
eth1 = connected to the internet
eth0 = connected to my internal lan

On the internal lan, I have a web server, so I do port forwarding on
the firewall to forward all the connections coming to port 80 to the
port 80 of the web server.
I am running debian unstable, with kernel 2.4.18 and iptables 1.2.6a.

My problem is the following: I can access my web server from the
internet without any problem, so the port forwarding on that side
works well, but if I try, from any server on the internal lan, to do
links http://<external IP> , then I get a connection refused. I have
looked at various mailing lists and done quite a few searches on the
web and google, but I don't seem to find anything.

Any ideas?

Here is my firewall script:
#!/bin/sh

echo -e "\n\nLoading simple rc.firewall ..\n"
iptables=/sbin/iptables
extif=eth1
extip=`ifconfig ${extif} |grep inet |awk '{print $2}' |cut -d: -f2`
intif=eth0
intip=192.168.1.1
intnet=192.168.1.0/24
websrvip=192.168.1.13
universe="0/0"

echo -e "\tExternal Interface: ${extif}\n"
echo -e "\tInternal Interface: ${intif}\n"
echo -e "\tEnabling forwarding .."
echo 1 > /proc/sys/net/ipv4/ip_forward

echo -e "\tClearing any existing rules and setting default policy .."
$iptables -P INPUT DROP
$iptables -F INPUT
$iptables -P OUTPUT DROP
$iptables -F OUTPUT
$iptables -P FORWARD DROP
$iptables -F FORWARD
$iptables -t nat -F
$iptables -F input-and-log-it
$iptables -F output-and-log-it
$iptables -F forward-and-log-it
$iptables -X
$iptables -Z

echo -e "\tCreating a INPUT DROP chain .."
$iptables -N input-and-log-it
$iptables -A input-and-log-it -j LOG --log-level 6 --log-prefix "Input
Chain: "
$iptables -A input-and-log-it -p tcp -j REJECT --reject-with tcp-reset
$iptables -A input-and-log-it -p udp -j REJECT --reject-with
icmp-host-unreachable
echo -e "\tLoading INPUT ruleset .."
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A INPUT -i ${intif} -s ${intnet} -j ACCEPT
$iptables -A INPUT -i ${extif} -p ICMP -d ${extip} -j ACCEPT
$iptables -A INPUT -i ${extif} -s ${intnet} -j input-and-log-it
$iptables -A INPUT -i ${extif} -d ${extip} -m state --state
ESTABLISHED -j ACCEPT
$iptables -A INPUT -i ${extif} -d ${extip} -p TCP --dport 80 -j ACCEPT
$iptables -A INPUT -i ${extif} -d ${extip} -p TCP --dport 21 -j ACCEPT
$iptables -A INPUT -s ${universe} -d ${universe} -j input-and-log-it

echo -e "\tCreating a OUPUT DROP chain .."
$iptables -N output-and-log-it
$iptables -A output-and-log-it -j LOG --log-level 6 --log-prefix
"OUTPUT Chain: "
$iptables -A output-and-log-it -p tcp -j REJECT --reject-with
tcp-reset
$iptables -A output-and-log-it -p udp -j REJECT --reject-with
icmp-host-unreachable

echo -e "\tLoading OUTPUT ruleset .."
$iptables -A OUTPUT -o lo -j ACCEPT
$iptables -A OUTPUT -o ${intif} -s $extip -d ${intnet} -j ACCEPT
$iptables -A OUTPUT -o ${intif} -s ${intip} -j ACCEPT
$iptables -A OUTPUT -o ${extif} -d ${intnet} -j output-and-log-it
$iptables -A OUTPUT -o ${extif} -s ${extip} -j ACCEPT
$iptables -A OUTPUT -s ${universe} -d ${universe} -j output-and-log-it

echo -e "\tCreating a FORWARD DROP chain .."
$iptables -N forward-and-log-it
$iptables -A forward-and-log-it -j LOG --log-level 6 --log-prefix
"FORWARD Chain: "
$iptables -A forward-and-log-it -p tcp -j REJECT --reject-with
tcp-reset
$iptables -A forward-and-log-it -p udp -j REJECT --reject-with
icmp-host-unreachable

echo -e "\tLoading FORWARD ruleset .."
echo -e "\t\tFWD: Allow all connections OUT and only existing/related
IN"
$iptables -A FORWARD -i ${extif} -o ${intif} -m state --state
ESTABLISHED,RELATED -j ACCEPT
$iptables -A FORWARD -i ${intif} -o ${extif} -j ACCEPT
$iptables -A FORWARD -i ${extif} -o ${intif} -p tcp -d ${websrvip}
--dport 80 -j ACCEPT

echo -e "\t\tNAT: Enabling SNAT (MASQUERADE) functionality on
${extif}"
$iptables -t nat -A POSTROUTING -o ${extif} -j SNAT --to ${extip}
$iptables -t nat -A PREROUTING -i ${extif} -p tcp --dport 80 -j DNAT
--to ${websrvip}:80
$iptables -t nat -A PREROUTING -i ${extif} -p tcp --dport 21 -j DNAT
--to ${websrvip}:21

$iptables -A FORWARD -j forward-and-log-it


echo -e "\nrc.firewall loaded.\n"

Thanks a lot in advance for your help,
Bertrand.
Reply With Quote
  #2 (permalink)  
Old 10-23-2003
Jari Laurila
 
Posts: n/a
Default Re: Redirect problem with iptables and port forwarding

On Wed, 22 Oct 2003 19:52:18 -0700, Bertrand Sirodot wrote:

> Hi,
>
> here is the network configuration of my firewall:
> eth1 = connected to the internet
> eth0 = connected to my internal lan
>
> On the internal lan, I have a web server, so I do port forwarding on
> the firewall to forward all the connections coming to port 80 to the
> port 80 of the web server.
> I am running debian unstable, with kernel 2.4.18 and iptables 1.2.6a.
>
> My problem is the following: I can access my web server from the
> internet without any problem, so the port forwarding on that side
> works well, but if I try, from any server on the internal lan, to do
> links http://<external IP> , then I get a connection refused. I have
> looked at various mailing lists and done quite a few searches on the
> web and google, but I don't seem to find anything.


When you connect from internal machine to server, packet gets routed to
firewall machine and it forwards the packet to server. Server responds
directly to internal machine using its internal ip. The problem is that
reply packets source address is different from request packets destination
address.

Ugly hack to fix it:

Server:

ipconfig eth0:1 EXTERNAL_IP
route del -net EXTERNAL_NET netmask 255.255.255.0 eth0

Client:

route add -host EXTERNAL_IP eth0

I assumed that you have only one nic in server and client. If you do this
all packets client sends to EXTERNAL_IP gets routed to server.

--
Jari Laurila
Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 10:02 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0