Поиск по этому блогу

суббота, 4 июля 2009 г.

FTP сервер за NAT на FreeBSD 7.1

Настройка маршрутизации для 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

Комментариев нет:

Отправить комментарий