ftp-proxy требует pf, поэтому поставил frox


bsd$ whereis -s frox

bsd$ frox: /usr/ports/ftp/frox

bsd$ cd /usr/ports/ftp/frox

bsd$ sudo make -D BATCH install clean

bsd$ rehash

Если клиент использует активный режим FTP, то после соединения с сервером на порт 21 и прохождения аутентификации клиент отправит командой PORT свой серый IP-адрес и ftp-сервер никогда не сможет с ним соединиться (PORT n1,n2,n3,n4,n5,n6 = IP-адрес клиента (n1.n2.n3.n4) и порт (n5 x 256 + n6))

Решением является организация клиентам доступа по ftp в пассивном режиме через ftp-прокси /usr/ports/ftp/frox

Для прозрачного прокси необходим форвардинг пакетов, адресованных на порт 21, на порт прокси ftp, в данном случае 2121

bsd$ less /etc/rc.firewall

${fwcmd} add fwd 192.168.XXX.XX,2121 from ${ftpallow} to any 21

${fwcmd} nat 123 config if ${ext_if} same_ports unreg_only

....

${fwcmd} add nat 123 from ${subnet} to any out via ${ext_if}

${fwcmd} add nat 123 from any to me in via ${ext_if}

${fwcmd} add allow tcp from any to ${ftpallow} established

....

${fwcmd} add allow all from me to any

${fwcmd} add allow all from any to me

Для форвардинга пришлось заново собрать ядро с Options IPFIREWALL_FORWARD

bsd$ sudo ee /usr/src/sys/i386/conf/kern.ipfw

bsd$ cd /usr/src/

bsd$ sudo make buildkernel KERNCONF=kern.ipfw

bsd$ sudo make installkernel KERNCONF=kern.ipfw

Непосредственно перед установкой нового ядра, необходимо скопировать существующее ядро

bsd$ sudo cp -r /boot/kernel /boot/kern.org

Для соединения клиентов в пассивном режиме в ipfw придется открывать доступ клиентам на непривилегированные порты (т.е. те, у которых номера выше 1023) и транслировать пакеты через внешний интерфейс

${fwcmd} nat 123 config if ${ext_if} same_ports unreg_only

....

${fwcmd} add nat 123 from ${ftpallow} to any out via ${ext_if}

${fwcmd} add nat 123 from any to me in via ${ext_if}

${fwcmd} add allow tcp from ${ftpallow} to any 21,32768-65535

${fwcmd} add allow tcp from any to ${ftpallow} established

....

${fwcmd} add allow all from me to any

${fwcmd} add allow all from any to me


FreeBSD 9.0-RELEASE: Mon Feb 10 13:18:46 UTC 2014