FTP is a bit odd in that to allow inbound traffic on port 21 and outbound traffic on port 20 :
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
In addition ftp will use a random higher port. To allow this you need to load the ip_conntrack_ftp module on boot. Uncomment and modify the IPTABLES_MODULES line in the /etc/sysconfig/iptables-config file to read
IPTABLES_MODULES="ip_conntrack_ftp"
You will still need a way to save your iptables configuration and restore it when you boot. Ubuntu does not have a simple way of doing this. Basically you can either use /etc/rc.local or disable NetworkManager and use networking scripts.
First save your rules:
sudo iptables-save /etc/iptables.save
Method 1 : Edit /etc/rc.local and add the line
iptables-restore /etc/iptables.save
Method 2 : Edit /etc/network/interfaces and use "post-up" to bring our iptables rules up.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /sbin/iptables-restore /etc/iptables.save
Then reboot.
The preferred method is probably to use UFW
sudo ufw allow ftp
UFW is the fedault tool for Ubuntu, uses syntax very similar to iptables, and is enabled and restored on rebooting.
See:
https://serverfault.com/questions/38398/allowing-ftp-with-iptables
http://slacksite.com/other/ftp.html
http://bodhizazen.com/Tutorials/iptables
https://help.ubuntu.com/community/UFW
sudo iptables -A -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT. FTP opens another connection for data transfer. I think "RELATED" should handle that. – Eric Carvalho Feb 26 '13 at 18:58sudo modprobe nf_conntrack_ftp. You can also trysudo iptables -A -p tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED,RELATED. – Eric Carvalho Feb 26 '13 at 19:20sudo netstat -tlnpto check, search for port 21). – Eric Carvalho Feb 26 '13 at 19:38sudo iptables -P INPUT DROP,sudo iptables -P OUTPUT DROP, etc. – Eric Carvalho Feb 27 '13 at 16:07