Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
pf + ftp-proxy, ftp сервер в нутри локальной сети
 
Hi All!
Задача. В локалке ftp-сервер(freebsd + ftpd) нужно его выставить в интернет используя шлюз (freebsd + pf + ftp-proxy). http://www.openbsd.org/faq/pf/ftp.html - статья по настройке, http://mr-tacitus.blogspot.com/2007/10/ftp-proxy-freebsd.html - еще одна.
Код
# ee /etc/pf.conf
prov_if="rl0" # Внешний сетевой интерфейс
int_if="fxp0" # Внутренний сетевой интерфейс
internal_net="{192.168.0.0/24}" # локалка
me="{192.168.0.1}"

scrub in all

nat on $prov_if from $internal_net to any -> $prov_if  # натим пользователей в интернет
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $prov_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021

anchor "ftp-proxy/*"

# Открыл все что бы развеить сомнения относительно некоторых правил.
pass in all
pass out all

Код
# ee /etc/inetd.conf
ftp-proxy       stream  tcp     nowait  root    /usr/libexec/ftp-proxy  ftp-proxy -R 192.168.0.250 -S 192.168.0.1

Ну и все пробуем.( из винды)
Код
# ftp – d doman.ru
# Связь с doman.ru
# 220 bsd.natu.local FTP server <Version 6.00LS> ready.
# Пользователь <doman.ru:<none>>: test
# ---> USER test
# 331 Password required for test.
# Пароль:
# ---> PASS test
# 230 User test logged in.
# ls
# PORT 192,168,0,3,9.140
# 200 PORT command successful.
# ---> NLST
# Подключение разорвано удаленных узлом.

Почему рвется соединение? Соответственно не работают фтп клиенты. Помогите опытные руты!
 
Цитата

-R 192.168.0.250 -S 192.168.0.1
192.168.0.250 - как понимаю, ftp-сервер
192.168.0.1 - как понимаю, внутренний IP шлюза, а по-моему, тут должен стоять внешний адрес...
 
Взял отсюда - http://mr-tacitus.blogspot.com/2007/10/ftp-proxy-freebsd.html да все правильно понимаете, если поставить внешний адрес то даже соединится не удается.
Это вывод tcpdump с ftp сервера. Я конечно не селен в unix, но мне кажется что сам ftp сервет отфутволевает соединения.
Код
qmail# tcpdump host 192.168.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes
19:03:45.877985 arp who-has 192.168.0.1 tell beta.natu.local
19:04:29.630593 arp who-has 192.168.0.1 tell setevoy7.natu.local
19:05:02.763400 IP 192.168.0.1.54562 > 192.168.0.250.ftp: P 1515840794:1515840801(7) ack 1000330335 win 33304 <nop,nop,timestamp 18462524 348958356>
19:05:02.763847 IP 192.168.0.250.ftp > 192.168.0.1.54562: P 1:37(36) ack 7 win 33304 <nop,nop,timestamp 349399717 18462524>
19:05:02.863187 IP 192.168.0.1.54562 > 192.168.0.250.ftp: . ack 37 win 33304 <nop,nop,timestamp 18462624 349399717>
19:05:06.839980 IP 192.168.0.1.54562 > 192.168.0.250.ftp: P 7:13(6) ack 37 win 33304 <nop,nop,timestamp 18466600 349399717>
19:05:06.840286 IP 192.168.0.250.ftp > 192.168.0.1.54562: P 37:51(14) ack 13 win 33304 <nop,nop,timestamp 349403794 18466600>
19:05:06.840413 IP 192.168.0.250.ftp > 192.168.0.1.54562: F 51:51(0) ack 13 win 33304 <nop,nop,timestamp 349403794 18466600>
19:05:06.840538 IP 192.168.0.1.54562 > 192.168.0.250.ftp: . ack 52 win 33304 <nop,nop,timestamp 18466600 349403794>
19:05:07.043208 IP 192.168.0.1.54562 > 192.168.0.250.ftp: F 13:13(0) ack 52 win 33304 <nop,nop,timestamp 18466803 349403794>
19:05:07.043335 IP 192.168.0.250.ftp > 192.168.0.1.54562: . ack 14 win 33303 <nop,nop,timestamp 349403997 18466803>
19:05:10.346659 IP 192.168.0.1.54752 > 192.168.0.250.ftp: S 476996435:476996435(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp 18470106 0,sackOK,eol>
19:05:10.346796 IP 192.168.0.250.ftp > 192.168.0.1.54752: S 3540802573:3540802573(0) ack 476996436 win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp 349407301 18470106,sackOK,eol>
19:05:10.346985 IP 192.168.0.1.54752 > 192.168.0.250.ftp: . ack 1 win 33304 <nop,nop,timestamp 18470107 349407301>
19:05:10.368975 IP 192.168.0.250.ftp > 192.168.0.1.54752: P 1:58(57) ack 1 win 33304 <nop,nop,timestamp 349407323 18470107>
19:05:10.469133 IP 192.168.0.1.54752 > 192.168.0.250.ftp: . ack 58 win 33304 <nop,nop,timestamp 18470229 349407323>
19:05:13.301377 IP 192.168.0.1.54752 > 192.168.0.250.ftp: P 1:13(12) ack 58 win 33304 <nop,nop,timestamp 18473061 349407323>
19:05:13.304853 IP 192.168.0.250.ftp > 192.168.0.1.54752: P 58:92(34) ack 13 win 33304 <nop,nop,timestamp 349410259 18473061>
19:05:13.404254 IP 192.168.0.1.54752 > 192.168.0.250.ftp: . ack 92 win 33304 <nop,nop,timestamp 18473164 349410259>
19:05:16.679781 IP 192.168.0.1.54752 > 192.168.0.250.ftp: P 13:26(13) ack 92 win 33304 <nop,nop,timestamp 18476439 349410259>
19:05:16.697139 IP 192.168.0.250.ftp > 192.168.0.1.54752: P 92:119(27) ack 26 win 33304 <nop,nop,timestamp 349413652 18476439>
19:05:16.796601 IP 192.168.0.1.54752 > 192.168.0.250.ftp: . ack 119 win 33304 <nop,nop,timestamp 18476556 349413652>
 
Код
FreeBSD# netstat -an -f inet
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  192.168.0.1.50124      192.168.0.250.21       ESTABLISHED
tcp4       0      0  127.0.0.1.8021         213.234.***.***.62283  ESTABLISHED
tcp4       0      0  *.8021                 *.*                    LISTEN
tcp4       0      0  *.22                   *.*                    LISTEN
tcp4       0      0  *.21                   *.*                    LISTEN
tcp4       0     52  192.168.0.1.22         192.168.0.5.1686       ESTABLISHED
tcp4       0      0  *.80                   *.*                    LISTEN
tcp4       0      0  *.3306                 *.*                    LISTEN
udp4       0      0  *.1194                 *.*
udp4       0      0  *.514                  *.*
 
Перевесьте демона с адреса 127.0.0.1 на другой интерфейс. Это грабля такая во фре, то-ли из да совместной работы pf и ipfw, то ли еще из-за чего-то. Вобщем, мне оказалось проще перевесить.
 
Спасибо!!! Я разобрался если интересует решение пишите
 
интересует
 
На самом деле тут просто были грабли, с запуском ftp-proxy.

Начнем с начала!
Ставим ftp-proxy ( в дефолтной фре его нет )
Код
# cd /usr/ports/ftp/ftp-proxy
# make install

Далее важный момент где я споткнулся.
Запускать надо не через Inetd почему не понятно.
В rc.conf добавляем:
Код
# ee /etc/rc.conf
# Разрешаем запуск ftp-proxy
ftpproxy_enable="YES"
# Проксируем на ftp в моем случае это 192.168.0.250, ключ –R обязателен служит для перенаправления.
ftpproxy_flags="-R 192.168.0.250"

ну далее:

В pf.conf ничего сильно не изменилось, но все равно посмотрите.
Код
# ee /etc/pf.conf

prov_if="rl0" # Внешняя сетевуха
int_if="fxp0" # Внутренняя сетевуха
ftp_server="192.168.0.250" # фтп сервер
internal_net="{192.168.0.0/24}" # локальная сеть
scrub in all

nat on $prov_if from $internal_net to any -> $prov_if

# Вот правила для проксиравания, но тут так заморочка мозги поразмять&#61514; вол линк кому интересно почитайте
# http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#pf-ftp-modes
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $prov_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021

# Если не хотите использовать ftp-proxy просто расскоментируйте и уберите выше стоящие правила, только не жалуйтесь потом что
# ftp работает как то криво и медленно
# rdr on $prov_if proto tcp from any to any port ftp-data -> $ftp_server port 21
# rdr on $prov_if proto tcp from any to any port 21 -> $ftp_server port 21
# rdr on $prov_if proto tcp from any to any port 49152:65535 -> $ftp_server port 49152:65535

pass in all
pass out all

anchor "ftp-proxy/*"


В итоге действительно по сравнению с nat скорость даже визуально возврасла.
 
У меня стоит такая же задача. Расшарить наружу внутренний FTP сервер.

Нашёл для себя эту ветку очень полезной и хотел бы кое что прояснить.
1. Для чего вообще ftp-proxy ? Ведь сам pf (ipfw) умеет прокидывать соединения. Да я видел сообщения, что без прокси тормозит. Но почему ?
2.  Хочу понять порядок обработки подключения. ftp-proxy ->  nat  ->   клиент или наоборот. И от чего это зависит.
Страницы: 1
Читают тему