iptables / FTP masquerading: Port command illega

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Everyone,

I finally got my FTP server working on my Red Hat 9 Linux firewall box. For 
some reason, I could only get it to work on a port other than 21. I elected for 
port 29 and changed /etc/services ftp entry and my firewally rules accordingly. 
For some reason, if I change back to 21, no response sent by ftp server to syn 
pkt from client ftp. If anyone has any ideas why it works on any other port 
than 21, please let me know.

Anyways, i got passive mode ftp to work on this box. However, active mode 
fails. and it complains:
ftp> dir
500 Illegal PORT command.
ftp: bind: Address already in use

When i look at the packets, I see the client sending a Port cmd using its non-
routable IP. This then passes through a firewall, and the source IP gets 
translated to a public IP. Then hits my Linux firewall and I the vsftpd process 
it and sends back that Illegal port response.

My firewall is using DHCP over my DSL connection. Hence I am using MASQUERADING 
in iptables:

-A POSTROUTING -o eth1 -j MASQUERADE

modules in memory are:

ip_conntrack_ftp 5296 1 (autoclean)
ip_nat_ftp 4112 0 (unused)
iptable_mangle 2776 0 (autoclean) (unused)
ipt_MASQUERADE 2200 1 (autoclean)
iptable_nat 21720 2 (autoclean) [ip_nat_ftp ipt_MASQUERADE]
ipt_state 1048 10 (autoclean)
ip_conntrack 26976 3 (autoclean) [ip_conntrack_ftp ip_nat_ftp ipt_MASQUERADE 
iptable_nat ipt_state]
iptable_filter 2412 1 (autoclean)
ip_tables 15096 7 [iptable_mangle ipt_MASQUERADE iptable_nat ipt_state 
iptable_filter]

Anybody know whats going on?

My actual firewall rules are:

filter table:
-A INPUT  -p tcp -m tcp -i eth1 --sport 1024: --dport 20:21 -j ACCEPT
-A OUTPUT -p tcp -m tcp -o eth1 --sport 20:21 --dport 1024: -j ACCEPT
-A INPUT -i eth1 -p tcp --sport 1024: --dport 1024: -m state --state NEW,ESTABLI
SHED -j ACCEPT
-A OUTPUT -o eth1 -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHE
D,RELATED -j ACCEPT
-A INPUT  -i eth1 -p tcp --dport 29 -m state --state NEW,ESTABLISHED  -j ACCEPT
-A OUTPUT -o eth1 -p tcp --sport 29 -m state --state ESTABLISHED,RELATED -j ACCE
PT
-A INPUT  -i eth1 -p tcp --dport 20 -m state --state NEW,ESTABLISHED  -j ACCEPT
-A OUTPUT -o eth1 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCE
PT

nat table:
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth1 -j MASQUERADE

Thanks Gurus!







[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux