Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Nov 2000 15:24:08 +0300
From:      "Alexei V. Alexandrov" <ava@elcomsoft.com>
To:        Ryan Thompson <ryan@sasknow.com>
Cc:        freebsd-isp@freebsd.org
Subject:   Re: proftpd passive weirdness through firewall
Message-ID:  <6641.001124@elcomsoft.com>
In-Reply-To: <Pine.BSF.4.21.0011232255090.32998-100000@ren.sasknow.com>
References:  <Pine.BSF.4.21.0011232255090.32998-100000@ren.sasknow.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello Ryan,

Friday, November 24, 2000, 8:19:04 AM, you wrote:


RT> Hi all...

RT> As many admins are aware, configuring an FTP server through a firewall can
RT> be a major pain.  It is a pain I thought I had mastered, though :-)  My
RT> firewall setup such that I have everything inbound blocked but basic
RT> connectivity, and the protocols I wish to enable, including FTP.  
RT> Outgoing connections are allowed to any network on (almost) any port, as
RT> this is not a user machine.

RT> Now, a few customers have been complaining that passive mode transfers
RT> (and directory listings) do not work, which has enticed me to look into
RT> the problem a bit further.  We moved to proftpd from wuftpd a while back,
RT> and the problem seemed to start around that time.

RT> It appears as though, when initiating a transfer, very low port numbers
RT> are chosen:

RT> Script started on Thu Nov 23 22:55:46 2000
RT> Connected to ftp.sasknow.com.
RT> 220 ProFTPD 1.2.0pre10 Server (SaskNow Technologies FTP Server) [ftp.sasknow.com]
RT> Name (ftp.sasknow.com:ryan): ryan
RT> 331 Password required for ryan.
RT> Password:
RT> 230 User ryan logged in.
RT> Remote system type is UNIX.
RT> Using binary mode to transfer files.
ftp>> ls
RT> 500 EPSV not understood.
RT> 227 Entering Passive Mode (207,195,92,131,15,135).
RT> ^C
RT> receive aborted. Waiting for remote to finish abort.
ftp>> passive
RT> Passive mode: off; fallback to active mode: off.
ftp>> ls
RT> 200 PORT command successful.
RT> 150 Opening ASCII mode data connection for file list.

RT> < normal ls output >

RT> 226 Transfer complete.
ftp>> quit
RT> 221 Goodbye.

RT> Script done on Thu Nov 23 22:56:15 2000


RT> The following is a few snippets of my firewall configuration (not the
RT> whole thing, obviously):


RT> # Basic connectivity rules ====================================================

RT> # Allow established connections
RT> $fwcmd add 600 pass tcp from any to any established

RT> # Allow outgoing connections originating from our subnet only
RT> $fwcmd add 700 pass tcp from ${sasknow} to any setup

RT> # Explicitly block ICMP redirects
RT> # $fwcmd add 1000 deny icmp from any to any icmptype 5

RT> # Allow all other ICMP
RT> $fwcmd add 1100 pass icmp from any to any

RT> # Open default traceroute port on udp only.
RT> # The default port range starts at 33434
RT> $fwcmd add 1200 pass udp from any to any 33434-33500

RT> # Individual protocol access ==================================================

RT> # Completely open up standard FTP
RT> $fwcmd add 9900 pass tcp from any 20 to any
RT> $fwcmd add 9901 pass udp from any 20 to any
RT> $fwcmd add 9950 pass tcp from any to ${ftp} 21 setup


RT> # More inbound protocols allowed....


RT> # Everything else is denied by default!

RT> So, anything with a source port of 20 is let through, and control
RT> connections can be established on port 21.  Standard FTP, therefore, works
RT> fine.  Many clients nowadays have passive mode on by default, though (or
RT> are behind firewalls themselves), and it's passive mode that causes grief!  
RT> Since all outbound connections are explicitly allowed by rule 0700, why
RT> isn't passive mode functional?  From my testing, this problem spans more
RT> than a dozen different clients on several different networks (many of
RT> which are not restricted by a firewall themselves).  Disabling the
RT> firewall rules, here, of course allows passive mode to work perfectly from
RT> anywhere.

RT> I've tried playing with the "passive ports" directive in
RT> /usr/local/etc/ftpaccess, and explicitly opening up those ports for
RT> inbound access, but to no avail.  It seems a little strange to have to do
RT> this, anyway.

Yes. ProFTP daemon has a bug in selecting ports when in passive mode.
By default it default to ANY port. This can be controlled applying a
patch to it (check the www.proftpd.net and follow the link which
points to mod_wrap. Still the patch is only for CVS version.). In my
case i did the following. First on the server you run Proftpd set the
following options:

sysctl -w net.inet.ip.portrange.first=49152
sysctl -w net.inet.ip.portrange.last=65534

This will instruct the kernel to give ports in rage 49152-65534 when
a call to bind to port recieves ANY. So this way we know that our FTP
server will use ports in this range so you can write a firewalling
rule allowing all outbound packets from this port which have
connection flag set. Thats all... In my case this works fine. If you
have problems cantact me.

P.S.: This is a rule fo IPFilter:

pass out quick on <iface> proto tcp from any to a.b.c.d/32 port 49152 >< 65534 flags S keep state

Best regards,
Alexei V. Alexandrov | @ ElcomSoft Ltd.  | Phone:  +7 095 974-11-62 
System Administrator | www.elcomsoft.com | Mail:  ava@elcomsoft.com
---------------------+-------------------+-------------------------
***   It`s always a long day, 86400 doesn`t fit into a short.   ***




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-isp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6641.001124>