FTP port forwarding using Linux router

Welcome to Linux Screw! If you're new here, you may want to subscribe our RSS feed.

Well, let’s imagine rather trivial situation: you have Linux router connected to Internet via e.g. ADSL modem and some local network comprising several computers and servers connected to that router via switches and/or Wi-Fi access points.

Done? Ok.

There is one public IP assigned to WAN interface of the router while FTP server (of course run by Linux as well) has IP something like 192.168.123.14 or 172.16.*.* or 10.*.*.*. Moreover you want to allow people to access your FTP from every corner of Internet… So, there are several ways how to apply this but let’s talk about how to achieve this by means of using port forwarding feature that is available in any router’s functions list.

So, let’s say we have the following configuration:

Internet <-> [a] router [b] <-> [c] FTP server

[a] is WAN interface with 212.213.214.215 (just an example) IP assigned to it, [b] is NIC with 192.168.0.1 and [c] is server’s interface with IP 192.168.0.2. All what we need is that users from Internet can access FTP server using 212.213.214.215 IP and default 21 TCP port.

One of the main problems is that passive mode of FTP service uses any port from range 1024 to 65535 so it’s not enough to forward 21/20 ports to FTP server and let the ball rolling. So, go to servers’ CLI and open configuration file of an FTP service. It would be vsftpd, proftpd whatever. Let’s say we have vsftpd so we have to add the following lines to /etc/vsftpd.conf:

pasv_min_port=12000
pasv_max_port=13000

When changes are saved restart vsftpd server.

Now access router’s CLI and type the following:

iptables -t nat -I PREROUTING -d 212.213.214.215 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.0.1
iptables -t nat -I PREROUTING -d 212.213.214.215 -p tcp -m tcp --dport 12000:13000 -j DNAT --to-destination 192.168.0.1

This will add netfilter port forwarding rules which will redirect traffic coming at routers’ public IP through 21 TCP port to FTP server and will properly handle passive FTP mode.

Wuala - it’s a finish.

 
 
» You might also be interested in the following articles:
Microsoft tells how to recover data using Linux
Another Linux utility to investigate sockets
Try Google Chrome in Linux
FAQ: static routes after restart/reboot in Fedora/RedHat/CentOS
Secure Linux/Unix system that runs OpenSSH



» Want to stay up to date? Subscribe to our E-MAIL or RSS feed!

3 Responses to “FTP port forwarding using Linux router”


  1. 1 Sergey Gotsulyak

    We maintain special Linux distro to quick deploy of firewall/router/gateway software appliance. It’s commercial, but if you are interested, visit http://www.idecogateway.com

  2. 2 nick192

    hi..thx for this topic. i wanted this1. now can u help me following structure? i want to know whether it is possible or not.

    Internet [a-eth0] linux as a router [b-eth1 as HTTP][c-eth2 FTP]
    a: wan ip: xxx.xxx.xxx.20
    b: live/public ip that i own: xxx.xxx.xxx.40
    c: live/public ip that i own: xxx.xxx.xxx.41

    now i want to access http and ftp servers from their own live ip adresses, like:
    http://xxx.xxx.xxx.40
    ftp://xxx.xxx.xxx.41

  3. 3 GamblingSoftwaresite

    Great tutorial, I like the easy way to implement this.

Leave a Reply




Friendly Sites:Who is behind Linux Screw?
Aspiring Sysadmin | GeekyBits³ | Bash Cures Cancer | TOTMS
Linux Operating System | Small Linux Deployments | My SysAd Blog
The Danesh Project | ZEPY | Linux config Wiki | Planet Sysadmin
The Sys Admin | {buhay sysad} | a non-geek's linux notes
Linux HOWTOs, Tutorials & Projects with Adam Palmer | LinuxAlt.Com
My name is Artem Nosulchik (artiomix AT gmail DOT com) and I'm Linux/Unix, Cisco systems engineer. The main idea of Linux Screw is to share relevant knowledge, skills and observations over The Web. Here you can find a lot of information related to different Linux distributions, FreeBSD, IOS as well as a other Open Source around staff. Read more ››