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