At 06:57 AM 9/20/2009, Jorge Bastos wrote:
Content-Type: multipart/alternative;

Howdy,
 
Is it possible to configure ProFTPD to use keep alive commands such as NOOP?
I use the FileZilla client (as almost everyone I believe), and I have it configured to issue NOOP to the server to keep the session alive, but with ProFTPD doesn’t work.
 
Is this possible/configurable?

I've had to make sure that I didn't set a _combination_ of timeout rules that would do the wrong thing.  Check all the different timeout settings, including defaults, to see if they might interfere with each other.

I went back and looked at TimeoutIdle :
      The TimeoutIdle directive configures the maximum number of seconds that
      proftpd will allow clients to stay connected without receiving any data on
      either the control or data connection. If data is received on either connection,
      the idle timer is reset.

Since that description mentions the "control channel", and commands come in on that channel, I'd always thought that commands like 'NOOP' would reset that timer.  And it works for me.  Here's an example:

    29880 97.134.119.23 cpe-97-134-109-23.wi.res.rr.com UNKNOWN bird99 [04/Sep/2009:
          :   :   :   :   :   :
        [:09:11:33] "PASV" 227 -
        [:09:11:33] "LIST" 226 346
        [:09:12:22] "NOOP" 200 -
        [:09:13:22] "NOOP" 200 -
        [:09:14:22] "NOOP" 200 -
          :   :   :   :   :   :
        [:09:41:22] "NOOP" 200 -
        [:09:42:22] "NOOP" 200 -

    30180 97.134.119.23 cpe-97-134-109-23.wi.res.rr.com UNKNOWN budgftp [04/Sep/2009:
        [:09:43:24] "USER bird99" 331 -
        [:09:43:24] "PASS (hidden)" 230 -

Pid 29880 is an existing FTP session that has been "doing stuff".  We can see the last 'real' activity at 09:11:33.  After that the session sends a 'NOOP' every minute to keep the session alive.  But that session dies at ~ 09:43.  Why?  Because I set the TimeoutNoTransfer to 1900, or 31.6 minutes.  So the session didn't die because of 'idle' timeout, but because of another timeout.  The 'NOOP's were working.

Here's the timeouts I use:

    # Set timeouts longer than defaults for NoTransfer and Idle
    # These values apply to both primary and virtual servers.
    TimeoutLogin        300       # default  300
    TimeoutSession      0         # default    0
    TimeoutNoTransfer   1900      # default  300
    TimeoutIdle         1830      # default  600
    TimeoutStalled      3600      # default 3600

(Some of the times are so long because of old network problems - it was usually "our fault", not the outside network's fault).

Note that the timeouts can override each other.  If there hasn't been a data transfer in over 31 minutes, it won't matter what commands are sent.  The session will be dropped because of "no transfers".  And notice that the default for TimeoutNoTransfer is just 5 minutes.

Could the interaction between the different timeout settings be confusing you?  Try setting all the others explicitly to 0 ('off') and test just TimeoutIdle by itself?

Jorge,