LINUX.ORG.RU
ФорумAdmin

Нужен совет по ftp-серверу


0

0

Ситуация такая, есть сеть 192.168.0.0/24, в ней стоит шлюз 192.168.0.1, являющийся vpn-сервером с аутентификацией по RADIUS. То есть все ходят в инет через 192.168.0.1. При соединении появляется интерфейс ppp0 с локальнымы адресами 10.10.5.0/24 и с удаленным адресом 10.10.5.1.

Задача такая, надо поставить в сети ftp-сервер, но чтобы доступ к нему был только у тех пользователей, у которых есть инет. Можно просто поставить его на 192.168.0.2, установить с него впн, у него появится второй адрес 10.10.5.2, и пускать только с этого адреса (то есть только тех юзеров, у которых установлено впн-соединение). Но весь трафик будет идти через этот шлюз, что не есть хорошо. Вот возникли 2 вопроса:

Можно же сделать так, чтобы соединение для комманд (в фтп 2 соединения используются же) шло через 10.10.5.2, а data-соединение - через 192.168.0.2, например сказать команде PASV одавать определенный адрес ? Таким образом все данные будут идти напрямую, а команды - через шлюз.

И второй вопрос, как еще можно решить такую проблему, потому что заморочка с другим адресом для PASV кажется слишком уж некрасивым решением?

PS. юзеры у которых есть инет очень часто меняются, так что вручную запрещать их файрволом/еще чем либо не пойдет.

★★★★★

сделать редирект с внешнего ip роутера на 192.168.0.2, и запретить обращение к ftp изнутри (только для шлюза), а к ftp шлюза запретить вход с внешних адресов (чтоб не ломали)

anonymous
()
Ответ на: комментарий от anonymous

Так весь ftp-трафик будет идти через шлюз.

init ★★★★★
() автор топика

У vsftpd например есть возможность управлять командой PASV, 
т.е. можно подставить в неё адрес 192.168.0.х вместо 10.10.5.х

man vsftpd.conf 
pasv_address
   Use  this  option  to  override  the IP address that vsftpd will
   advertise in response to the PASV command. Provide a numeric  IP
   address.
   Default:  (none  -  the  address is taken from the incoming con-
              nected socket)

А вот что вы будете делать с ACTIVE mode? Запретить на сервере?
man vsftpd.conf
 port_enable
     Set to NO if you want to disallow the PORT method of obtaining a
     data connection.
     Default: YES
----------------------------------------------------------------------
Другой вариант использовать ftp-server, который может авторизовать
клиента через радиус. (сам так никогда не делал)

anonymous
()

ИМХО: Для разделения cmd-канала и data-канала использование PASV/PORT наиболее правильное (единственное ?) решение.

anonymous
()
Ответ на: комментарий от anonymous

> У vsftpd например есть возможность управлять командой PASV,

Что-то я попробовал, пока не очень получается..

> Другой вариант использовать ftp-server, который может авторизовать клиента через радиус. (сам так никогда не делал)

Я такого ftp просто не нашел, с поддержкой радиуса

init ★★★★★
() автор топика
Ответ на: комментарий от init

В vsftpd.conf:

listen_address=10.10.5.2

pasv_address=192.168.0.2

port_enable=NO

коннектюсь, USER, PASS, PASV нормально проходит, но порт не открывает все равно.

init ★★★★★
() автор топика
Ответ на: комментарий от init

А это сделал?

 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.
      Default: NO

anonymous
()
Ответ на: комментарий от anonymous

> А это сделал?

Сделал, то же самое. Он в команде PASV отдает правильно адрес, а порт для data-connection открывает совсем на другом ip (на том, на котором control-connection)

init ★★★★★
() автор топика
Ответ на: комментарий от init

>Он в команде PASV отдает правильно адрес, а порт для data-connection открывает совсем на другом ip (на том, на котором control-connection)

Да действительно.

Это уже через Ж.
На компе с vsftpd:

iptables -I PREROUTING -t nat -p tcp -d 192.168.0.2 -j DNAT --to-destination 10.10.5.2

anonymous
()
Ответ на: комментарий от anonymous

> iptables -I PREROUTING -t nat -p tcp -d 192.168.0.2 -j DNAT --to-destination 10.10.5.2

А что это даст? Мне нужно пускать только тех юзеров, у которых есть инет, а это просто DNAT.

init ★★★★★
() автор топика
Ответ на: комментарий от init

iptables -I PREROUTING -t nat -p tcp -d 192.168.0.2 ! --dport 21 -j DNAT --to-destination 10.10.5.2

vsftpd в PASV отдает адрес 192.168.0.2, хотя при этом ждет соединение на 10.5.5.2
клиент будет конектится на 192.168.0.2 (из PASV), DNAT перекинет на 10.10.5.2

! --dport 21 -- чтобы не коннектились напрямую

anonymous
()
Ответ на: комментарий от anonymous

Хм, действительно, это выход, спасибо. Только мне кажется vsftpd сам должен открывать порт на 192.168.0.2.

init ★★★★★
() автор топика
Ответ на: комментарий от init

Я тоже так думаю. Надо бы в его исходниках посмотреть, чего он упрямится, а может есть у него какие опции компиляции связанные с этим, хотя я не нашел.

anonymous
()
Ответ на: комментарий от init

vsftpd через PAM работает, так что вперед
---------------------------------------------------------
$ apt-cache search pam radius
libpam-radius-auth - The PAM RADIUS authentication module
---------------------------------------------------------
auth required /lib/security/pam_radius_auth.so
account required /lib/security/pam_permit.so
session required /lib/security/pam_radius_auth.so

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.