Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: HOWTO: пассивный режим vsftpd за NAT-ом  (Прочитано 20901 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ais77

  • Автор темы
  • Участник
  • *
  • Сообщений: 186
  • linux blondy
    • Просмотр профиля
HOWTO: пассивный режим vsftpd за NAT-ом
« : 31 Октября 2008, 04:38:35 »
Отличающийся почти параноидальной безопасностью vsftp server имеет одно неприятное ограничение:
когда он работает за NAT при динамическом выделении IP (как это у меня под СТРИМ-ом) он неправильно сообщает клиентам IP-адрес для пассивных подключений (500 PORT command illegal).
Т.е. вместо внешенго реального IP (например, 215.23.67.12) он передает NAT-овый внутренний адрес (например, 192.168.1.2) для параметра pasv_address, что вызывает указанную ошибку.
Даже продвинутый параметр pasv_addr_resolve не спасает ситуацию, т.к. он резолвится только при перезагрузке vsftp сервера, что никак, увы, не связано с моментом, когда внешний IP вдруг поменяется.
2 приведенных ниже скрипта позволяют исправить это ограничение vsftpd и заставить его работать в пассивном режиме при динамическом IP за NAT-ом.

Создайте в каталоге /usr/sbin/ следующего содержания файл vsftpd.ip:
#!/bin/sh
# Script is dedicated for setting real (external) IP-address in pasv_address=
# parameter in vsftpd.conf.
# It's neccessary for running vsftp in dynamic DNS environment
# behind NAT in passive mode. It checks external IP every 5 minutes, then sleeps.
# Wriiten by: ais77 (https://forum.ubuntu.ru)


# Configure these settings:
CONFIG_FILE=/etc/vsftpd.conf    # Location of vsftpd.conf
CONFIG_FILE_TMP=/etc/vsftpd.conf.tmp   # Location of temporary file
DOMAIN=ais77.homeftp.net   # Your external domain (i.e. from DynDNS.com)
LOG_FILE=~/vsftpd.ip.log

touch $CONFIG_FILE_TMP
touch $LOG_FILE

while :
do
realIP=`dig $DOMAIN +short`
vsftpdIP=`sed -n "/pasv_address=/s/pasv_address=//p" $CONFIG_FILE`
  if [ $realIP != $vsftpdIP ]; then
     sed "s/$vsftpdIP/$realIP/" $CONFIG_FILE > $CONFIG_FILE_TMP
     mv -f $CONFIG_FILE_TMP $CONFIG_FILE
     /etc/init.d/vsftpd restart
     echo "["`date`"] IP changed: from "$vsftpdIP" to "$realIP >> $LOG_FILE
  fi
  sleep 5m
done

exit 0



Тоже делаем его исполняемым:
~$ sudo chmod +x /etc/init.d/ipftp
Запускаем демон командой:
~$ sudo /etc/init.d/ipftp start
Чтобы он запускался атоматически при старте:
~$ sudo update-rc.d ipftp defauts
Все. ;)

updated 07.01.10: скрипт vsftpd.ip обновлён, исправлена ошибка цикла и добавлено ведение лога обновлений.
« Последнее редактирование: 07 Января 2010, 21:57:25 от victor53p »

Оффлайн Alexey.Miller

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #1 : 10 Декабря 2008, 18:34:49 »
listen=YES
listen_port=21
ssl_enable=NO
pasv_address=89.105.x.x
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=7700
pasv_max_port=7799
xferlog_enable=YES
use_localtime=YES
anonymous_enable=YES
anon_root=/home/ftp
secure_chroot_dir=/var/run/vsftpd
max_per_ip=16
nopriv_user=ftp
pasv_promiscuous=YES
port_promiscuous=YES

на роутере сделал проброс портов 20:21 7700:7799
Локально могу зайти , с внешки нет.  В чем проблема?
Роутер говорит что порты форвардятся
Destination     Proto.  Port Range  Redirect to
all             TCP     7700:7799   10.10.10.149
all             TCP     20:21       10.10.10.149

С внешки пишет connection refused
« Последнее редактирование: 11 Декабря 2008, 06:14:46 от Alexey.Miller »

Оффлайн ais77

  • Автор темы
  • Участник
  • *
  • Сообщений: 186
  • linux blondy
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #2 : 10 Декабря 2008, 23:47:49 »
на роутере сделал проброс портов 20:21 7700:7799
Локально могу зайти , с внешки нет.  В чем проблема?
Роутер говорит что порты форвардятся
Ситуация аналогична с точностью до наоборот - если нужно зайти на сервер локально, приходится комментить pasv_address в конфиге и рестартовать vsftpd, т.к. по-умолчанию рутер не пускает локальные запросы "через инет"
а с закомментеным pasv_address vsftpd исправно подставляет для пассивов локальный свой же 192.168.1.2, что и требуется для локального доступа.
что фтп-клиент пишет, когда через инет идёшь?

мой конфиг попроще - для справки:

$ cat /etc/vsftpd.conf
(Нажмите, чтобы показать/скрыть)

Оффлайн Alexey.Miller

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #3 : 11 Декабря 2008, 05:27:26 »
на роутере сделал проброс портов 20:21 7700:7799
Локально могу зайти , с внешки нет.  В чем проблема?
Роутер говорит что порты форвардятся
Ситуация аналогична с точностью до наоборот - если нужно зайти на сервер локально, приходится комментить pasv_address в конфиге и рестартовать vsftpd, т.к. по-умолчанию рутер не пускает локальные запросы "через инет"
а с закомментеным pasv_address vsftpd исправно подставляет для пассивов локальный свой же 192.168.1.2, что и требуется для локального доступа.
что фтп-клиент пишет, когда через инет идёшь?

а с внешки пускает? мне главное что с внешки пускал.
Пока стояла гента я взял pureftpd и за минуту все настроил. В убунте же он как-то жутко настраивается, нужно файлы создавать на каждый параметр.

Оффлайн ais77

  • Автор темы
  • Участник
  • *
  • Сообщений: 186
  • linux blondy
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #4 : 11 Декабря 2008, 11:20:31 »
а с внешки пускает? мне главное что с внешки пускал.
С внешки по-умолчанию пускает - за это и отвечает незакомментированный pasv_address.
Что с выводом ошибок фтп-клиента, что не так, говорит, при подключении?

И вот это у тебяв конфиге - зачем?
pasv_promiscuous=YES
port_promiscuous=YES
и pasv_promiscuous я вообще в мане vsftpd.conf не нашёл - точно есть такой параметр?

Повторяю - если ты, сидя в локалке за рутером, пытаешься "извне" достучаться до любого сервиса в локалке - рутер тебя не пустит. Об этом часто забывают, почему-то - сам часа 2 как-то пытался так один сервис проверить - понять не мог, почему "извне" его не видно. А изнутри-"извне" не работает просто - рутер так настроен, что логично.
Тестировать нужно с любого внешнего IP - попроси кого-нибудь из приятелей или прокси-анонимайзер внешний юзай -чтобы IP был другой..
« Последнее редактирование: 11 Декабря 2008, 11:27:29 от ais77 »

Оффлайн Alexey.Miller

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #5 : 11 Декабря 2008, 15:43:31 »
 
Цитировать
      port_promiscuous
              Set to YES if you want to disable the PORT security check that ensures that outgoing data  connections  can  only  connect  to  the
              client. Only enable if you know what you are doing!
Цитировать
       pasv_promiscuous
              Set to YES if you want to disable the PASV security check that ensures the data connection originates from the same IP  address  as
              the  control  connection.   Only  enable if you know what you are doing! The only legitimate use for this is in some form of secure
              tunnelling scheme, or perhaps to facilitate FXP support.
ftp client говорит connection refused. Проверял со своего сервера, который в инете :) так что проверял я провильно.

Локально , т.е. с локального компа на локальный комп (не через ip роутера), с сервером конктится и работает

Похоже что роутер вообще этот порт не открыл, но с чего бы :) говорит что открыл, но nmap это порт не показывает.  Ну и порт форвардинг для другого компа работает.
Да и не понято почему с локального на локальный могу зайти если pasv_address включен.
« Последнее редактирование: 11 Декабря 2008, 15:49:35 от Alexey.Miller »

Оффлайн ais77

  • Автор темы
  • Участник
  • *
  • Сообщений: 186
  • linux blondy
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #6 : 11 Декабря 2008, 22:44:38 »
ftp client говорит connection refused.
говорит что открыл, но nmap это порт не показывает.  Ну и порт форвардинг для другого компа работает.
Да и не понято почему с локального на локальный могу зайти если pasv_address включен.
вот последнее - самое странное, учитывая pasv_enable=YES и pasv_address
попробуй отрубить promiscuous - пустит без них с локального?
+ при работе в локалке - он точно пассив использует у тебя, что в логе клиента (какой юзаешь, кстати)?
попробуй бровзером - там точно пассив.
а по nmap - (не юзал его раньше, разбираюсь) у меня он тоже однозначно открытые (юзаю из нета каждый день) вовне порты MLDonkey, USD, SSH и vsftpd не показал с самым простым ключом -А - так что не факт, что без бубна ты им свои порты увидишь.
connection refused - либо пров (он точно не блокирует 21-й порт? Попробуй vsftpd на другой повесить - повыше), рутер (врёт, что открыл, хз как) или файервол на убе не пускает извне (iptables включены-настроены?).
ФТП - единственный сервис для извне или что-то работает уже? Хотя, проброс портов, ты говоришь, работает...
Значит - не рутер.
Смотри логи фтп и iptables

Оффлайн Alexey.Miller

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #7 : 12 Декабря 2008, 07:12:52 »
ftp client говорит connection refused.
говорит что открыл, но nmap это порт не показывает.  Ну и порт форвардинг для другого компа работает.
Да и не понято почему с локального на локальный могу зайти если pasv_address включен.
вот последнее - самое странное, учитывая pasv_enable=YES и pasv_address
попробуй отрубить promiscuous - пустит без них с локального?
+ при работе в локалке - он точно пассив использует у тебя, что в логе клиента (какой юзаешь, кстати)?
попробуй бровзером - там точно пассив.
а по nmap - (не юзал его раньше, разбираюсь) у меня он тоже однозначно открытые (юзаю из нета каждый день) вовне порты MLDonkey, USD, SSH и vsftpd не показал с самым простым ключом -А - так что не факт, что без бубна ты им свои порты увидишь.
connection refused - либо пров (он точно не блокирует 21-й порт? Попробуй vsftpd на другой повесить - повыше), рутер (врёт, что открыл, хз как) или файервол на убе не пускает извне (iptables включены-настроены?).
ФТП - единственный сервис для извне или что-то работает уже? Хотя, проброс портов, ты говоришь, работает...
Значит - не рутер.
Смотри логи фтп и iptables
1)  без promiscuous - все аналогично
2) в локалке использую ftp консольный , но браузер тоже заходит.
3) пров не виноват :) до установки кубунты стоял генту + pureftpd и все работало. И щас бы рад поставить pureftpd, но конфигутить его в убунте смерть.
4) фтп не единственный. работает vnc проброс на другой комп, ну и dc++.
Раньше правда был проброс на другой айпишник. может у роутера косяк с этим, пытается пробросит по старому. как посмотреть с консоли какие порты форвордятся? а то хз, че он там в своей веб морде показывает
5) он вроде как недолжен работать из локалки, раз pasv_enable=YES

щас попробовал pftp
dm@dm-laptop:~$ pftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
Name (localhost:dm): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (89,105,x,x,30,79)
ftp: connect: Connection refused
Получается из локальки в активном режиме работает, в пассивном нет.
значит разбираться надо с роутером? wl500gp прошивка от Олега

в общем разобался, я сам дурак. не правильно прописал проброс
« Последнее редактирование: 12 Декабря 2008, 08:51:29 от Alexey.Miller »

Оффлайн victor53p

  • Заслуженный пользователь
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
    • Ubuntu в Воронежской области
Re: HOWTO: пассивный режим vsftpd за NAT-ом
« Ответ #8 : 07 Января 2010, 21:56:50 »
updated 07.01.10  от автора:

скрипт vsftpd.ip обновлён, исправлена ошибка цикла и добавлено ведение лога обновлений.

 

Страница сгенерирована за 0.041 секунд. Запросов: 25.