Настройка маршрутизации для 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
Комментариев нет:
Отправить комментарий