Bon, je ne suis pas très motivé pour aller triturer le code PHP, n'ayant d'ailleurs pas de compétence de développeur PHP…
Il faudrait en outre regarder de plus près comment marche pfilter, ce que je n'ai pas encore eu trop le temps de faire...
Ce que j'avais vu en faisant mes tests :
en créant une règle de NAT sur le port 21, pfSense démarrait un process :
/usr/local/sbin/pftpx -f <my.private.ftp.server.ip>-b <my.public.ip>-c 21 -g 21
le fameux proxy ftp !
En créant un NAT sur un autre port public vers le port 21 de ma machine interne serveur ftp, rien.
Voici des extraits de pfctl concernant le FTP :
vr0 = lan
vr1 = wan
vr2 = dmz -> serveur ftp
Le ftp helper est aussi activé sur l'interface lan (vr0)
TRANSLATION RULES:
nat-anchor "pftpx/" all
rdr-anchor "pftpx/" all
no rdr on vr0 proto tcp from any to <vpns>port = ftp
rdr on vr0 inet proto tcp from any to any port = ftp -> 127.0.0.1 port 8021
FILTER RULES:
scrub all no-df random-id fragment reassemble
anchor "ftpsesame/" all
anchor "ftpproxy" all
anchor "pftpx/" all
pass in quick on vr1 proto tcp from any to <ftpserver>port = ftp keep state label "USER_RULE: NAT FTP server"
pass in quick on vr1 inet proto tcp from any to <my.public.ip>port = ftp keep state label "USER_RULE: NAT FTP server"
pass in quick on vr0 inet proto tcp from any to 127.0.0.1 port = ftp-proxy keep state label "FTP PROXY: Allow traffic to localhost"
pass in quick on vr0 inet proto tcp from any to 127.0.0.1 port = ftp keep state label "FTP PROXY: Allow traffic to localhost"
pass in quick on vr1 inet proto tcp from any port = ftp-data to (vr1) port > 49000 flags S/SA keep state label "FTP PROXY: PASV mode data connection"
pass in quick on vr2 inet proto tcp from any to 127.0.0.1 port = 8022 keep state label "FTP PROXY: Allow traffic to localhost"
pass in quick on vr2 inet proto tcp from any to 127.0.0.1 port = ftp keep state label "FTP PROXY: Allow traffic to localhost"
pass in quick on vr1 inet proto tcp from any to (vr1) port > 49000 flags S/SA keep state label "FTP PROXY: RFC959 violation workaround"
Les seules lignes ajoutées en créant la règle de NAT sur le port 21 sont donc les deux premières règles de filtrage en bleu.
J'avais également bien entendu parcouru en détails le forum en anglais sans trouver de réponse à cette problématique.
Je reste donc sur mon idée d'origine : le FTP helper ne marche que sur le port par défaut.
Je trouve qu'il faudrait pouvoir spécifier un port alternatif ou même tout simplement activer le FTP helper en cochant une case à la création d'une règle de NAT.
Cela ne semble pas compliqué.
Je vais donc certainement poster une "feature request" dans la section NAT du forum…</my.public.ip></ftpserver></vpns></my.public.ip></my.private.ftp.server.ip>