> In the passive modes session, i counted 4 pf rules being added, as
> also in the active modes. But reading ftp-proxy(8) i can see the
> following reference:
>
<snip excerpt from man page>
> I.e., two rules for active mode and three for passive mode. I could
> not understand what happened to the others listed in the source code.
I agree with you and I think the man page is missing a line - at least
for passive mode which is all that I tested (running ftp-proxy with no
options) . It does appear that 2 translation rules are added for PASV -
an rdr and a nat:
So for PASV ftp to an ftp server at A.B.C.D I get the following
# pfctl -a ftp-proxy/6145.2 -sn
nat inet proto tcp from 192.168.0.10 to A.B.C.D port = 26703 -> 192.168.1.30
rdr inet proto tcp from 192.168.0.10 to A.B.C.D port = 57239 -> A.B.C.D
port 26703
# pfctl -a ftp-proxy/6145.2 -sr
pass in quick inet proto tcp from 192.168.0.10 to A.B.C.D port = 26703
flags S/FSRA keep state (max 1)
pass out quick inet proto tcp from 192.168.1.30 to A.B.C.D port = 26703
flags S/FSRA keep state (max 1)
It looks like that rdr rule is added in order to achieve the port
rewriting noted in the code comments:
* 3) Source and destination ports are rewritten to minimize
* port collisions, to aid security (some systems pick weak
* ports) or to satisfy RFC requirements (source port 20).
NB I haven't tested Active.
> I could not understand why the first filter rules is necessary, since
> after being natted, the proxy address is the only one to been seen by
> pf.
I think this is explained when you consider the 4 rules together, so for
my test:
1) Inbound translation:
Packet: "192.168.0.10 to A.B.C.D:57239"
Action: rdr matches and packet becomes "192.168.0.10 to A.B.C.D:26703"
2) Inbound filter:
Packet: "192.168.0.10 to A.B.C.D:26703"
Action: Matches first filter rule.
3) Outbound translation... matches the NAT rule
4) Outbound filter... matches the 2nd filter rule
>
> thanks in advance for any clarifications.
>
HTH, my understanding is a lot clearer if this is all correct. Hopefully
someone else can confirm.
SteveW