Linux Netfilter discussions
 help / color / mirror / Atom feed
* Re: iptables and ftp
  2003-02-22 20:20 iptables and ftp Roman Gavrilov
@ 2003-02-21 23:51 ` Willi Dyck
  2003-02-22  0:59 ` How to do port forwarding dynamically Dhirendra Pal Singh
  1 sibling, 0 replies; 5+ messages in thread
From: Willi Dyck @ 2003-02-21 23:51 UTC (permalink / raw)
  To: Roman Gavrilov; +Cc: netfilter

On Sat, Feb 22, 2003 at 10:20:11PM +0200, Roman Gavrilov wrote:
> Hello,
> 
> My question is about ftp and ftp data connections.
> I know this subject has been heavily discussed but still ...
> 
> I set up my firewall to allow connections to 21 and 20 ports.
>  I also allowed connections to high ports from outside from port 20.
> and of course I enabled all established and related connections.

Have you loaded 'ip_nat_ftp' and 'ip_conntrack_ftp' ?

Regards,

Willi

-- 
the three great virtues of a programmer:
laziness, impatience and hubris.
        Lary Wall


^ permalink raw reply	[flat|nested] 5+ messages in thread

* How to do port forwarding dynamically
  2003-02-22 20:20 iptables and ftp Roman Gavrilov
  2003-02-21 23:51 ` Willi Dyck
@ 2003-02-22  0:59 ` Dhirendra Pal Singh
  2003-02-22  1:34   ` Joel Newkirk
  1 sibling, 1 reply; 5+ messages in thread
From: Dhirendra Pal Singh @ 2003-02-22  0:59 UTC (permalink / raw)
  To: netfilter

>

Hi All,
I am trying to set up a web server inside my home lan. Firewall is 
running on the gatewaty.
Below is the script for the firewall... (its very simple.. I downloaded 
it from the net)

*****************************************
#!/bin/sh
#
# rc.firewall-2.4
FWVER=0.70

echo -e "\n\nLoading simple rc.firewall version $FWVER..\n"
echo -e "\n\nLoading simple rc.firewall version $FWVER..\n"


IPTABLES=/sbin/iptables
DEPMOD=/sbin/depmod
INSMOD=/sbin/insmod

EXTIF="eth0"
INTIF1="eth1"
INTIF2="eth2"
echo "   External Interface:  $EXTIF"
echo "   Internal Interface1:  $INTIF1"
echo "   Internal Interface2:  $INTIF2"

echo -en "   loading modules: "
echo "  - Verifying that all kernel modules are ok"
$DEPMOD -a
echo 
"----------------------------------------------------------------------"

echo -en "ip_tables, "
$INSMOD ip_tables

echo -en "ip_conntrack, "
$INSMOD ip_conntrack

echo -en "ip_conntrack_ftp, "
$INSMOD ip_conntrack_ftp

echo -en "ip_conntrack_irc, "
$INSMOD ip_conntrack_irc

echo -en "iptable_nat, "
$INSMOD iptable_nat

echo -en "ip_nat_ftp, "
$INSMOD ip_nat_ftp

echo ".  Done loading modules."

echo "   enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "   enabling DynamicAddr.."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

echo "   clearing any existing rules and setting default policy.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F

echo "   FWD: Allow all connections OUT and only existing and related 
ones IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF1 -m state --state 
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF2 -m state --state 
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF2 -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG

echo "   Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

echo -e "\nrc.firewall-2.4 v$FWVER done.\n"

**********************************************************************************************
I have stripped off the comments for simplicity. Now when I want to open 
a port and forward it I am trying to execute the following 2 commands...

$iptables -A INPUT -j ACCEPT -p tcp --syn --destination-port 5000
$iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 5000 -j DNAT 
--to-destination 192.168.1.30:80

Shouldnt this forward port 5000 to the internal box on port 80. But this 
is not working. Can someone please help me to correct this script.
Actually I want just 2 lines which I can run for any port and can open 
and forward it to anymachine of my choice...

Any quick help would be very much appreciated...
Thanks and advance..
Dp




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to do port forwarding dynamically
  2003-02-22  0:59 ` How to do port forwarding dynamically Dhirendra Pal Singh
@ 2003-02-22  1:34   ` Joel Newkirk
  2003-02-24 20:13     ` Dhirendra Pal Singh
  0 siblings, 1 reply; 5+ messages in thread
From: Joel Newkirk @ 2003-02-22  1:34 UTC (permalink / raw)
  To: Dhirendra Pal Singh, netfilter

On Friday 21 February 2003 07:59 pm, Dhirendra Pal Singh wrote:
> Hi All,
> I am trying to set up a web server inside my home lan. Firewall is
> running on the gatewaty.
> Below is the script for the firewall... (its very simple.. I
> downloaded it from the net)

> echo "   enabling forwarding.."
> echo "1" > /proc/sys/net/ipv4/ip_forward

Best not to do this until you've already created the rules, and the DROP 
policy.

> echo "   enabling DynamicAddr.."
> echo "1" > /proc/sys/net/ipv4/ip_dynaddr
>
> echo "   clearing any existing rules and setting default policy.."
> $IPTABLES -P INPUT ACCEPT

This is NOT a good idea.  This allows anybody on the internet to have 
unrestricted access to all ports on your firewall/gateway.  (unless you 
DNAT them to another machine, or have a rule that explicitly DROPs 
something)  You want a DROP policy instead, and then ACCEPT only traffic 
that needs to access the gateway machine itself.  A simple, more-secure 
(but still not tight) approach is to have a DROP policy on INPUT, then 
use:

$IPTABLES -A INPUT -i $INTIF1 -j ACCEPT
$IPTABLES -A INPUT -i $INTIF2 -j ACCEPT

which allows all machines on the local networks unrestricted access to 
the gateway itself (this is a separate matter from forwarding!) but 
ignores connection attempts from the outside world.  Even better would 
be to ACCEPT ONLY the absolute bare minimum.  Under normal operation 
nobody (internet _OR_ LAN) should need access to the firewall box 
itself.  If you do all your work on the machine sitting in front of it 
with it's own keyboard and monitor, and it's not offering other services 
then you can probably work just fine with DROP policy for INPUT (and 
even OUTPUT).  If there are services that the gateway offers to the LAN 
(mailserver, DNS, filesharing, whatever) then you should have ACCEPT 
rules for the necessary ports on INPUT chain, and limit them as above to 
ONLY the LAN, never the internet.  


>************************ I have stripped off the comments for
> simplicity. Now when I want to open a port and forward it I am trying
> to execute the following 2 commands...
>
> $iptables -A INPUT -j ACCEPT -p tcp --syn --destination-port 5000
> $iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 5000 -j DNAT
> --to-destination 192.168.1.30:80
>
> Shouldnt this forward port 5000 to the internal box on port 80. But

Nope.  This DNATs port 5000 incoming to port 80 on the internal box, and 
ACCEPTs syn to port 5000 on the gateway.  You want the PREROUTING rule 
as is, (but "-i $EXTIF" would fit the script style better...) but the 
second rule should be:

$IPTABLES -A FORWARD -i $EXTIF -p tcp --dport 80 -j ACCEPT

Differences:  This is FORWARD chain, which is where packets to be 
forwarded will go instead of INPUT.  The destination port is now 80, not 
5000, since the DNAT rule already changed the DPORT when it changed the 
destIP.

> this is not working. Can someone please help me to correct this
> script. Actually I want just 2 lines which I can run for any port and
> can open and forward it to anymachine of my choice...
>
> Any quick help would be very much appreciated...
> Thanks and advance..
> Dp

INPUT is for connections directly to the firewall machine, or responses 
to something initiated by the machine itself.  OUTPUT is for connections 
initiated by the firewall machine, or responses to something that came 
in INPUT.  FORWARD is for connections that are only passing through.

j



^ permalink raw reply	[flat|nested] 5+ messages in thread

* iptables and ftp
@ 2003-02-22 20:20 Roman Gavrilov
  2003-02-21 23:51 ` Willi Dyck
  2003-02-22  0:59 ` How to do port forwarding dynamically Dhirendra Pal Singh
  0 siblings, 2 replies; 5+ messages in thread
From: Roman Gavrilov @ 2003-02-22 20:20 UTC (permalink / raw)
  To: netfilter

[-- Attachment #1: Type: text/plain, Size: 1172 bytes --]

Hello,

My question is about ftp and ftp data connections.
I know this subject has been heavily discussed but still ...

I set up my firewall to allow connections to 21 and 20 ports.
 I also allowed connections to high ports from outside from port 20.
and of course I enabled all established and related connections.


But when ever I connect to my ftp server and issuing "ls" command it stacks.
In the firewall I see :
Feb 22 04:07:46 hostname IN=eth0 OUT= MAC=00:e0:18:d3:1b:4b:00:90:5f:0d:64:38:08:00  SRC=source ip DST=my server ip LEN=60 TOS=00 PREC=0x00 TTL=53 ID=41512 DF PROTO=TCP SPT=37070 DPT=21773 SEQ=3256137382 ACK=0 WINDOW=5648 SYN URGP=0

SPT=37070 DPT=21773 looks strange to me.

It seems that ftp data session is trying to establish connection from a high port to a high port.
SYN means that it trying to establish connection and of course it is dropped by the firewall.
There is no sense in allowing anything from outside to servers high ports.

I think that the client should issue a connect request from a high port to servers 20 port.
And then it should match the established connection.

What can be the problem ?

Thanks


[-- Attachment #2: Type: text/html, Size: 2671 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to do port forwarding dynamically
  2003-02-22  1:34   ` Joel Newkirk
@ 2003-02-24 20:13     ` Dhirendra Pal Singh
  0 siblings, 0 replies; 5+ messages in thread
From: Dhirendra Pal Singh @ 2003-02-24 20:13 UTC (permalink / raw)
  To: netfilter; +Cc: netfilter

Thanks for your detailed help J.
I will try all what you have said and will get back to you later... As I 
do have some more questions but let me try them myself before asking 
again...

Thanks once again..
Dp


Joel Newkirk wrote:

>On Friday 21 February 2003 07:59 pm, Dhirendra Pal Singh wrote:
>  
>
>>Hi All,
>>I am trying to set up a web server inside my home lan. Firewall is
>>running on the gatewaty.
>>Below is the script for the firewall... (its very simple.. I
>>downloaded it from the net)
>>    
>>
>
>  
>
>>echo "   enabling forwarding.."
>>echo "1" > /proc/sys/net/ipv4/ip_forward
>>    
>>
>
>Best not to do this until you've already created the rules, and the DROP 
>policy.
>
>  
>
>>echo "   enabling DynamicAddr.."
>>echo "1" > /proc/sys/net/ipv4/ip_dynaddr
>>
>>echo "   clearing any existing rules and setting default policy.."
>>$IPTABLES -P INPUT ACCEPT
>>    
>>
>
>This is NOT a good idea.  This allows anybody on the internet to have 
>unrestricted access to all ports on your firewall/gateway.  (unless you 
>DNAT them to another machine, or have a rule that explicitly DROPs 
>something)  You want a DROP policy instead, and then ACCEPT only traffic 
>that needs to access the gateway machine itself.  A simple, more-secure 
>(but still not tight) approach is to have a DROP policy on INPUT, then 
>use:
>
>$IPTABLES -A INPUT -i $INTIF1 -j ACCEPT
>$IPTABLES -A INPUT -i $INTIF2 -j ACCEPT
>
>which allows all machines on the local networks unrestricted access to 
>the gateway itself (this is a separate matter from forwarding!) but 
>ignores connection attempts from the outside world.  Even better would 
>be to ACCEPT ONLY the absolute bare minimum.  Under normal operation 
>nobody (internet _OR_ LAN) should need access to the firewall box 
>itself.  If you do all your work on the machine sitting in front of it 
>with it's own keyboard and monitor, and it's not offering other services 
>then you can probably work just fine with DROP policy for INPUT (and 
>even OUTPUT).  If there are services that the gateway offers to the LAN 
>(mailserver, DNS, filesharing, whatever) then you should have ACCEPT 
>rules for the necessary ports on INPUT chain, and limit them as above to 
>ONLY the LAN, never the internet.  
>
>
>  
>
>>************************ I have stripped off the comments for
>>simplicity. Now when I want to open a port and forward it I am trying
>>to execute the following 2 commands...
>>
>>$iptables -A INPUT -j ACCEPT -p tcp --syn --destination-port 5000
>>$iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 5000 -j DNAT
>>--to-destination 192.168.1.30:80
>>
>>Shouldnt this forward port 5000 to the internal box on port 80. But
>>    
>>
>
>Nope.  This DNATs port 5000 incoming to port 80 on the internal box, and 
>ACCEPTs syn to port 5000 on the gateway.  You want the PREROUTING rule 
>as is, (but "-i $EXTIF" would fit the script style better...) but the 
>second rule should be:
>
>$IPTABLES -A FORWARD -i $EXTIF -p tcp --dport 80 -j ACCEPT
>
>Differences:  This is FORWARD chain, which is where packets to be 
>forwarded will go instead of INPUT.  The destination port is now 80, not 
>5000, since the DNAT rule already changed the DPORT when it changed the 
>destIP.
>
>  
>
>>this is not working. Can someone please help me to correct this
>>script. Actually I want just 2 lines which I can run for any port and
>>can open and forward it to anymachine of my choice...
>>
>>Any quick help would be very much appreciated...
>>Thanks and advance..
>>Dp
>>    
>>
>
>INPUT is for connections directly to the firewall machine, or responses 
>to something initiated by the machine itself.  OUTPUT is for connections 
>initiated by the firewall machine, or responses to something that came 
>in INPUT.  FORWARD is for connections that are only passing through.
>
>j
>
>
>
>  
>




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-02-24 20:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-22 20:20 iptables and ftp Roman Gavrilov
2003-02-21 23:51 ` Willi Dyck
2003-02-22  0:59 ` How to do port forwarding dynamically Dhirendra Pal Singh
2003-02-22  1:34   ` Joel Newkirk
2003-02-24 20:13     ` Dhirendra Pal Singh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox