Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proxy support #50

Open
rpetti opened this issue Apr 23, 2020 · 7 comments
Open

proxy support #50

rpetti opened this issue Apr 23, 2020 · 7 comments

Comments

@rpetti
Copy link

rpetti commented Apr 23, 2020

This is a duplicate of #20 but I couldn't find a way to reopen it.

How can we configure the ftp connection to use a proxy? My network requires the use of a proxy in order to access the internet. I've tried setting FTP_PROXY as per the standard, but it didn't work. The connection still attempts to go direct, and thus times out.

@muirdm
Copy link
Contributor

muirdm commented Apr 23, 2020

I'm not too familiar with FTP proxies. Can you just connect directly to the proxy? It seems like most proxies accept the remote server after an @ sign in the username, e.g. a username of some_user@ftp.example.com.

@rpetti
Copy link
Author

rpetti commented Apr 23, 2020

FTP proxies are just HTTP Connect proxies. Usually you define it by setting the FTP_PROXY environment variable, which is analogous to the HTTP_PROXY and HTTPS_PROXY env vars.

They aren't FTP servers themselves, so connecting directly to it with an FTP client won't work.

@muirdm
Copy link
Contributor

muirdm commented Apr 23, 2020

You are saying it proxies FTP over HTTP? When I googled for FTP proxy, all I saw are actual FTP proxy servers where you connect to them using FTP, and they proxy to other FTP servers. Do you have a link describing how your FTP proxy works?

@rpetti
Copy link
Author

rpetti commented Apr 23, 2020

It's a standard web proxy that you would find at most companies:
https://en.wikipedia.org/wiki/Proxy_server#Web_proxy_servers

Our specific one is Squid, and we need to use it in order to access resources on the internet.

Essentially, an application will read the proxy configuration from the environment or elsewhere, then instead of connecting to the target server directly it will open a tunnel through the proxy using an HTTP CONNECT request. After the connection is established it's used by the application as normal.

Here's an example configuration from filezilla:
https://www.youngzsoft.net/ccproxy/faq_66.htm

Here's an example for lftp:
https://www.librebyte.net/en/ftp/lftp-behind-a-proxy/

I was looking for similar instructions for this client, but after examining the code it doesn't appear to support proxies at all...

@muirdm
Copy link
Contributor

muirdm commented Apr 23, 2020

Thanks!

I have no plans to support proxies like this in goftp. It seems like they are various kinds of proxies and they fall outside the purvey of ftp itself.

We could add the ability to create an ftp connection given a generic net.Conn so the user's code could set up the proxy connection and pass that to goftp. Would that solve your problem?

@rpetti
Copy link
Author

rpetti commented Apr 23, 2020

That would work for any other protocol except FTP. Without knowing what ports the ftp session needs for data transfers, there's no way to create the correct connections ahead of time.

I'm going to see if I can wrap our app in something that can catch connections, or see if there's a way to forward all traffic through the proxy using redsocks and iptables... Failing that I guess we'll just need to rewrite our app using something else.

Thanks anyways!

@machship-mm
Copy link

I have implemented this on my fork of the repo and created a pull request #55

I have used this in conjunction with mwitkow/go-http-dialer to be able to make connections via squid proxy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants