Настройка маршрутизации для
FTP протокола оказывается довольно сложная вещь и делал я это в первый раз, поэтому объективность поста может быть под вопросом, но тем не менее работает.
И так имеется:
-Интернет, откуда нужно открыть доступ к
FTP-серверу;
-Машина с
FreeBSD 7.1 и
PF используемая в качестве роутера c внешним интерфейсом
100.100.10.123 и
DMZ интерфейсом
192.168.0.1;
-DMZ с серверами, в том числе и
FTP-сервером;
-
FTP-сервер с адрессом 192.168.0.12, работающий на 1025 порту;
FTP использует пассивный режим, но простой редирект в
PF почему-то не дал результата.
Решение было найдено при помощи
ftp-proxy, который начиная с
FreeBSD 7.0 идет в системе по умолчанию и не нуждается в установке.
Для начала нужно научиться вообще перенаправлять трафик при помощи
ftp-proxy. Для этого с правами рута:
#ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025Тут 192.168.0.12 - IP
FTP-сервера в DMZ, 100.100.10.123
- IP внешнего интерфйса, 1025 - порт, на котором запущен
FTP-сервер, 21 - порт, на котороый подключаются пользователи из интернета.
И открыть 21 порт в фаэрволе, если он закрыт. Для этого в /etc/pf.conf вписать строчку
pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state
где
$ext_if имя внешнего интерфейса, а
$ext_ip его IP-адресс и перезапустить фаэрвол:
#pfctl -f /etc/pf.confЕсли все получилось, то
FTP-сервер должен отвечать на подключения извне(хотя подключения может и не произойти, но порт будет открытым и
FTP-сервер увидит попытку подключения) , и в списке процессов должен появится запущенный
ftp-proxy:
#ps ax|grep ftp-proxy
535 ?? Ss 0:07,99 ftp-proxy
537 ?? Ss 0:08,35 ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025
Проверить работоспособность сервера можно, к примеру, при помощи http://www.net2ftp.com/
Но это был старт "Вручную". Для того чтобы
ftp-proxy запускался при старте системы я добавил /etc/rc.conf строку:
ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025
Возможно и не правильно, но рекомендованный способ запуска с указанием в rc.conf
ftpproxy_enable="YES" ftpproxy_flags="-R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025"
НЕ ПОМОГ.
В
/etc/pf.conf нужно добавить такие правила:
########## \ redirect ftp from internet/##################
#Якоря для ftp-proxy
nat-anchor "ftp-proxy/*"
nat on $ext_if inet from $int_dmz -> ($ext_if)
rdr-anchor "ftp-proxy/*"
###########################################
#################\ ftp filter rights/######################
pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state
pass out on $int_dmz inet proto tcp to $ftpserv_ip port 21 user proxy flags S/SA keep state
anchor "ftp-proxy/*"
###########################################
Где:
$ext_if - внешний интерфейс;
$ext_ip - IP адресс интерфейса
$ext_if $int_dmz - интерфес роутера, смотрящий в DMZ сеть, в которой находится
FTP-сервер;
$ftpserv_ip - IP адресс
FTP-сервера в DMZ
Более подробно по настройке
ftp-proxy можно почитать тут http://www.openbsd.org/faq/pf/ftp.html