Hi.  I feel like this is a newbie question, but I just can't see it.
I'm setting up a PF F/W, and it only allows SSH in.  That works.
Passive FTP works outgoing, but not active.  I have almost *EXACTLY*
the same setup on another machine (or three, actually), and they all
work. . .

When I initiate an active FTP 'ls' from a linux box behind this
firewall (note it fails for active ftp from the firewall itself),
here's what I get on the interface on the active return-path:

16:13:52.999528 the.ftp.server.ftp-data > the.ftp.client.51505: S 
234239363:234239363(0) win 49640 <mss 1460,nop,nop,sackOK> (DF)
16:13:53.000131 the.ftp.client.51505 > the.ftp.server.ftp-data: S 
1181053425:1181053425(0) ack 234239364 win 16384 <mss 1460,nop,nop,sackOK> (DF)
16:13:53.039997 the.ftp.server.ftp-data > the.ftp.client.51505: . ack 1 win 
49640 (DF)
16:13:53.118417 the.ftp.server.ftp-data > the.ftp.client.51505: P 1:1019(1018) 
ack 1 win 49640 (DF)
16:13:53.120570 the.ftp.server.ftp-data > the.ftp.client.51505: FP 
1019:1529(510) ack 1 win 49640 (DF)
16:13:53.120895 the.ftp.client.51505 > the.ftp.server.ftp-data: . ack 1530 win 
15992 (DF)

Everything looks like it SHOULD look but (the data is in the packets),
but nada. 

Any help?  Am I missing something stupid?  Should I be rdr'ing packet
going out to the proxy (to catch the firewall's ftp?).

I have the following line in inetd.conf:

127.0.0.1:8021  stream  tcp     nowait  root    /usr/libexec/ftp-proxy 
ftp-proxy -n -m 49152 -M 51937

Here's my pf.conf file:

int_if="le0"
ext_if="le1"
table <NoRoute> { 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }
int_net="192.168.22.0/24"
scrub in all
rdr on $int_if inet proto tcp from any to any port 21 -> 127.0.0.1 port 8021
nat on $ext_if inet from $int_net to any -> ($ext_if:0)
block in quick on $ext_if from <NoRoute> to any
block out quick on $ext_if from any to <NoRoute>
block in on $ext_if all
block out on $ext_if all
pass out quick on $ext_if inet proto tcp from ($ext_if) to any flags S/SA keep 
state
pass out quick on $ext_if inet proto { udp, icmp } from ($ext_if) to any keep 
state
pass out quick on $ext_if inet proto gre to any keep state
my_svcs="{ ssh }"
my_block_return="{ ident }"
block return quick log on $ext_if inet proto tcp from any to ($ext_if) port 
$my_block_return label "ident"
pass in quick log on $ext_if inet proto tcp from any to ($ext_if) port $my_svcs 
flags S/SA keep state
pass in quick on $ext_if inet proto icmp from any to ($ext_if) icmp-type 8 code 
0 keep state
pass in quick on $ext_if inet proto icmp from any to ($ext_if) icmp-type 3 code 
4 keep state
pass in quick on $ext_if inet proto tcp from port 20 to ($ext_if) user proxy 
flags S/SA keep state

Reply via email to