Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Active FTP

    Scheduled Pinned Locked Moved NAT
    11 Posts 4 Posters 6.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • johnpozJ
      johnpoz LAYER 8 Global Moderator
      last edited by

      On side A allow from side B IP and source port 20 traffic and on side B setup outbound static port NAT.  So after the NAT traffic will still be coming from source port 20.

      An intelligent man is sometimes forced to be drunk to spend time with his fools
      If you get confused: Listen to the Music Play
      Please don't Chat/PM me for help, unless mod related
      SG-4860 24.11 | Lab VMs 2.8, 24.11

      1 Reply Last reply Reply Quote 0
      • B
        bardelot
        last edited by

        … nor do I want to setup a VPN from side A to B (security risk)

        You can limit the tunnel to the involved hosts also by firewall e.g. such that only the scanner has access to the FTP server via the VPN tunnel, and there's no need to route the complete network. Will be more secure than using unencrypted FTP, which I assume it is, over the Internet.

        1 Reply Last reply Reply Quote 0
        • deltaendD
          deltaend
          last edited by

          @johnpoz:

          On side A allow from side B IP and source port 20 traffic and on side B setup outbound static port NAT.  So after the NAT traffic will still be coming from source port 20.

          Johnpoz, this sounds like a great idea, however I think you typed this quickly as it seems to be missing some information.  Could you elaborate in detail?

          Thanks!

          1 Reply Last reply Reply Quote 0
          • marcellocM
            marcelloc
            last edited by

            Did you tried native built in ftp proxy on pfSense.

            One simple rule allowing port 21 on starting traffic interface could do the job.

            Treinamentos de Elite: http://sys-squad.com

            Help a community developer! ;D

            1 Reply Last reply Reply Quote 0
            • deltaendD
              deltaend
              last edited by

              @marcelloc:

              Did you tried native built in ftp proxy on pfSense.

              One simple rule allowing port 21 on starting traffic interface could do the job.

              Unless I'm gravely mistaken, the FTP proxy only works correctly with Passive FTP.  Additionally, I've already tried.

              1 Reply Last reply Reply Quote 0
              • deltaendD
                deltaend
                last edited by

                Ok, here was my solution, although it sounds like there might have been other solutions available.  Our FTP server is just one of several servers behind the PfSense firewall on side B.  Therefore, it was given a virtual IP.  Outgoing connections on side B go out through the main firewall IP address, but incoming connections to that FTP server go in through the virtual IP address.  Therefore, we created a NAT + Firewall rule on side A that routes ports 1-65535 to the printer when the connection comes from the main firewall IP address on side B.

                This seems like such a broken and poor way to do this, but it seems better than VPNing the systems together as far as security goes. Johnpoz sounded like he had an idea, but either he left out some critical details or I'm missing something as I have tried combinations of what it seems like he was saying to no effect.  Perhaps if Johnpoz comes back to this thread, he can expand upon his idea in detail so I can understand.  My solution will obviously only work in very specific situations so it would be nice to see a solution that was designed for a larger variety of equipment configurations.

                1 Reply Last reply Reply Quote 0
                • johnpozJ
                  johnpoz LAYER 8 Global Moderator
                  last edited by

                  So your printer is making the connection right? is it doing active or passive?

                  If it is using active then it would tell the server some random port to come back on from source port 20 on the server side.

                  In a passive connection the server would give it some random Port and the client would connect to this random port from some random port on its site.

                  Here is a good writeup on active passive ftp connections.
                  http://slacksite.com/other/ftp.html

                  What is your printer using, can you change it to use either?  And then would be happy to give you an exact drawing with examples of what I was thinking.  Here is a basic drawing we can work with - so if you can fill in the details of what the private network is on side A, and what the private network is on side B.  And maybe some example public networks we can work - Say 24.13.a.x and 24.13.b.x, and for understanding what ftp server software your running we can walk through the exact sort of setup.

                  An important piece of the puzzle is your printer/client using active or passive.  And if can be set to use one or the other.  Any way the printer can do sftp vs ftp.  Sftp just uses your ssh port, normally 22 and no need for any weird stuff.  What specific printer is it?

                  ftpdrawing.jpg
                  ftpdrawing.jpg_thumb

                  An intelligent man is sometimes forced to be drunk to spend time with his fools
                  If you get confused: Listen to the Music Play
                  Please don't Chat/PM me for help, unless mod related
                  SG-4860 24.11 | Lab VMs 2.8, 24.11

                  1 Reply Last reply Reply Quote 0
                  • deltaendD
                    deltaend
                    last edited by

                    @johnpoz:

                    So your printer is making the connection right? is it doing active or passive?

                    If it is using active then it would tell the server some random port to come back on from source port 20 on the server side.

                    In a passive connection the server would give it some random Port and the client would connect to this random port from some random port on its site.

                    Here is a good writeup on active passive ftp connections.
                    http://slacksite.com/other/ftp.html

                    What is your printer using, can you change it to use either?  And then would be happy to give you an exact drawing with examples of what I was thinking.

                    The printer, like many Sharp and older Ricoh printers, is using Active FTP.  If it was using passive FTP, it would be simple to setup, however due to (what I'm guessing is insanity during the design phase) I have encountered more industrial printers that use active FTP than ones that support passive FTP.

                    Here is the step by step of what is happening.

                    1. User scans file and sends file to server.
                    2. Scanner attempts to connect to server.
                    3. Scanner authenticates via FTP to remote FTP server.
                    4. Scanner attempts to open a data-connection.
                    5. Scanner tells FTP server to connect BACK to the scanner on a random port(s) above 1023.
                    6. FTP server connects back to the scanner and attempts to grab the file stream for placement.
                    7. File finishes uploading and data connection closes.  Scanner disconnects from FTP server.

                    From the diagram on page: http://slacksite.com/other/ftp.html it seems like what you might have been saying is that we can setup a rule that states that connections that come FROM port 20 on side B (FTP server side) should be allowed route to the scanner.  This would remove the requirement for ports 1-65535 to be routed and should still work… correct?

                    1 Reply Last reply Reply Quote 0
                    • deltaendD
                      deltaend
                      last edited by

                      @johnpoz:

                      What is your printer using, can you change it to use either?  And then would be happy to give you an exact drawing with examples of what I was thinking.  Here is a basic drawing we can work with - so if you can fill in the details of what the private network is on side A, and what the private network is on side B.  And maybe some example public networks we can work - Say 24.13.a.x and 24.13.b.x, and for understanding what ftp server software your running we can walk through the exact sort of setup.

                      An important piece of the puzzle is your printer/client using active or passive.  And if can be set to use one or the other.  Any way the printer can do sftp vs ftp.  Sftp just uses your ssh port, normally 22 and no need for any weird stuff.  What specific printer is it?

                      Yes, that would be a great solution to switch it to passive FTP or to set it up for SFTP.  I wish I could do either.

                      1 Reply Last reply Reply Quote 0
                      • johnpozJ
                        johnpoz LAYER 8 Global Moderator
                        last edited by

                        Ok so your using active.  Which means the client sends some random Port and server will connect to your client on that port from Port 20.

                        The issue is, that on site B the servers source port is 20.  But after it goes through NAT that port could be random.  Which is why you need to setup a static port nat.  In a normal nat setup you run into this – these are source ports going to say port 1028 on server from client

                        privateip:20 --->public:2028 (NAT router) publicIP:randomPORT ---> public:2028

                        Now to be honest your ftp helper on side A should allow for this and send the traffic in to your client.  No matter what the source port is.

                        All you really should have to do is setup site B to forward 21 to your server - you could lock this down so only site A IP is allowed.

                        When your server comes back to site A -- your ftp helper should allow the connection back in.  I don't have any problems using active pfsense from behind a nat.  Now if you lock down B to only allow specific ports outbound you might have issues?  What are your lan rules on site B?  Do you allow all outbound ports?  Even if you do not, just allow all outbound ports to site A IP from source of your ftp server private IP on your lan rules and you should be good.

                        What version of pfsense are you using btw.  I know I have no problems with active connections to ftp server from my clients - I am using 2.1 version of pfsense.  Let me make a test connection to show you.

                        edit:  So here is active connection to server on the public internet from client behind nat

                        Status: Resolving address of snipped.net
                        Status: Connecting to 173.xx.xx.xx:21...
                        Status: Connection established, waiting for welcome message...
                        Response: 220 snipped FTP Server
                        Command: USER johnpoz
                        Response: 331 Password required for johnpoz
                        Command: PASS **********
                        Response: 230 User johnpoz logged in
                        Command: SYST
                        Response: 215 UNIX Type: L8
                        Command: FEAT
                        Response: 211-Features:
                        Response: MDTM
                        snipped for brevity
                        Response: REST STREAM
                        Response: SIZE
                        Response: 211 End
                        Command: OPTS UTF8 ON
                        Response: 200 UTF8 set to on
                        Status: Connected
                        Status: Retrieving directory listing...
                        Command: PWD
                        Response: 257 "/" is the current directory
                        Command: TYPE I
                        Response: 200 Type set to I
                        Command: PORT 192,168,1,100,98,136
                        Response: 200 PORT command successful
                        Command: MLSD
                        Response: 150 Opening ASCII mode data connection for MLSD
                        Response: 226 Transfer complete
                        Status: Directory listing successful

                        So you see there where client sent its Private IP of 192.168.1.100 on port (256x98+136 = 25224)

                        And pfsense helper changed that IP to my public one, and allowed the connection back into my client.  Unless your blocking outbound connections on your side B.  You should have no issues.  And only rule you should need is forward 21 on side B, and allow the ports outbound on your Side A

                        So I just looked in my states after doing a few refreshes, so the PORT command changes every time you make a data connection.

                        192.168.1.100:25238 <- 24.13.xx.xx:25238 <- 173.xx.xx.xx:20

                        Notice how the public port is same as private port - that is doing a static nat.  That is not always the case in a napt nat setup you could have something like this in the state

                        192.168.1.100:2283 <- 24.13.xx.xx:25238 <- 173.xx.xx.xx:20

                        An intelligent man is sometimes forced to be drunk to spend time with his fools
                        If you get confused: Listen to the Music Play
                        Please don't Chat/PM me for help, unless mod related
                        SG-4860 24.11 | Lab VMs 2.8, 24.11

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.