# Проблемы со Squid и FTP

## Nicephorus

Собственно это мой первый серьезный опыт в Linux 

Собрал шлюз на Gentoo2004.3. 

Установил и настроил Squid, iptables стоит но пока все разрешает. 

Постить сюда squid.conf не стал уж очень он огромен..., 

почти все настройки стандартные, то что с фтп связанно вообще не трогал. у клиентов(у фтп тоже) в настройках http подключение. 

ПРОБЛЕМА след характера. 

все бы было отлично если бы. 

Можно зайти на фтп сервера... даже скачивать с них..., но 

Невозможно загружать на сервера, редактировать файлы, удалять и вообще выполнять какие-либо операции связанные с записью. 

P.S. пожалуйста помогите чем-нибудь. 

может запостите хоть часть сквидконфа, или на мыло вышлите. 

P.P.S. единств настройка связ с фтп - email для анонимного доступа. 

P.P.S.S. Самое интересное что на шлюзе стоит еще и ProFTPD, так вот ИЗ ЛОКАЛКИ ТОЖЕ НЕЛЬЗЯ НИЧЕГО ПИСАТЬ!(подсети одинаковые). 

инет работает отлично.

----------

## YD

Я так понял.

1. ftpd - ProFTPD.

2. Доступ на ftp через squid.

3. Какой ftp-клиент ?

Изходя из этого: 

1. Анонимные пользователи  по дефолту  там вроде не могут писать.  Надо конфиг мучать, а так у меня мирно живёт vsftpd через xinetd (не так часто юзается). Ну и были варианты с  туннелингом SSHD, но  за ненадобностью не юзаю, scp довольно редко используется.

2. ЗАЧЕМ такой гемор? Почему нельзя напрямую?

3. squid на сколько я знаю HTTP-прокси, но так же работает и с FTP, но file uploading имеет свои недостатки, некоторые клиенты просто не умеют так работать.

----------

## Nicephorus

1) - НА любый ФТП серверы в интернете ( у меня есть хостинг, + у начальника, без squid все писалось (но с ним перестало работать)

так же как я и написал на локальном фтп таже проблема стала.(пользователи не анонимные, локальный(кот внутри нашей сети) ProFTPD настроен нормально, полььзователи с именами и паролями, но видно Сквид и внутреннюю сеть тоже через себя пускает, или блокинрует).

2) А как напрямую? Если можно подробнее как сделать доступ к фтп не через Squid? через НАТ чтоли делать?

3) Клиенты из винды - TotalCommander и CuteFtpPro 3.3.

Вот начет настроек я кокраз и спрашиваю какие нужны чтобы UPLOAD заработал. Может какие порты для FTP открыть? вроде 21 порт открыт.

Пожалуйста помогите, в понедельник меня уже пинать будут  :Shocked: 

----------

## viy

Хм...

В настройках клиентов надо убрать всякое упоминание про proxy --- если все во внутренней сети, нефиг голову морочить.

А дальше все так, как было "без squid'а", ибо squid тебе не нужен.

Ты бы лучше написал чего надо сделать в принципе. Пока сдается, что подход у тебя не правильный...

----------

## Nicephorus

Внутренняя сеть - фиг бы с ней., я приводил ее только как пример.

Проблема именно в том, что ВНЕШНИЕ ФТП (Internet) таже проблема.

Сделать нужно чтобы через шлюз на котором стоит Squid можно было полноценно работать с ФТП серверами(делать все, на что есть права у пользователя)

----------

## stopa

Насколько я знаю во-первых в IE 6.0 (по-моему) есть баги и он не всегда бегает на FTP через прокси-сервер.

А во-вторых, SQUID не позволит закачивать на фтп, удалять, изменять - хоть ты тресни. Нужен другой прокси, или прямой доступ (через iptables) на ftp.

----------

## Nicephorus

хорошо, мне не нужен FTP прокси, что тогда в Squid настроить чтобы он ФТП не трогал, и как настроить доступ на ФТП через Iptables( я как понимаю NAT настроить придется?)

Огромное спасибо если подскажите или дадите ссылку на место где почитать...

----------

## viy

А что тогда надо? Поставить машину в DMZ и дать к ней доступ снаружи (на ftp)?

Надо поискать/почитать iptables howto в google и на форумах в частности.

----------

## Nicephorus

Я же написал что машина шлюз, доступ снаруже крайне не приветствуется...

нужно только чтобы он работал как прокси сервер, и работало все!

внутренний фтп нужен для внутренних целей.

сквид конф смогу запостить только в понедельник

----------

## stopa

http://www.opennet.ru/docs/RUS/iptables/index.html - это про то как iptables настраивать, а чтоб SQUID ftp не трогал нужно в клиентах прописать, что на ftp доступ прямой

----------

## viy

 *Nicephorus wrote:*   

> нужно только чтобы он [шлюз] работал как прокси сервер, и работало все!

 

Блин, это не объяснение.

Тебе нужно, чтобы пользователи из инета могли на внутренний ftp файлы заливать? Ставишь ftp сервер и настраиваешь полный доступ. Люди в интернете сами будут думать --- нужен им прокси или нет, чтобы к тебе ходить (это зависит от ИХ конфигурации сети). Если ты хочешь ограничить доступ СВОИХ пользователей (в твоей сетки) в глобальный интернет, то ставишь для них прокси и закрываешь прямой доступ.

Я так и не понял, какую категорию клиентов (внешние или внутренние) ты пытаешься охватить. Потому и просил объяснить --- кто и как будет работать с твоими сервисами. Мое мнение --- ты пытаешься использовать squid там, где ему не место.

Или я в танке?..

----------

## Nicephorus

 *viy wrote:*   

>  *Nicephorus wrote:*   нужно только чтобы он [шлюз] работал как прокси сервер, и работало все! 
> 
> Блин, это не объяснение.
> 
> Тебе нужно, чтобы пользователи из инета могли на внутренний ftp файлы заливать? Ставишь ftp сервер и настраиваешь полный доступ. Люди в интернете сами будут думать --- нужен им прокси или нет, чтобы к тебе ходить (это зависит от ИХ конфигурации сети). Если ты хочешь ограничить доступ СВОИХ пользователей (в твоей сетки) в глобальный интернет, то ставишь для них прокси и закрываешь прямой доступ.
> ...

 

в танке!  :Smile: 

ладно все по полочкам.

1) Пользователи моей сети должны иметь доступ в интернет через Squid. (как я понял ФТП через него не настроить, так что придется и просто форвардингом через нат на фтп пускать)

2) Внутренний фтп нужен только для них(ДЛЯ ЛОКАЛЬНОГО ИСПОЛЬЗОВАНИЯ) для внешних он не нужен.

----------

## viy

CuteFtp умеет работать с http типа проксями, как и IE, и Firefox.

Я через CuteFTP через общий прокси (на squid'е) на работе обмениваюсь файлами с 3 организациями, т.е. и upload, и download и все, что хочешь.

Там используется CONNECT <хост>. И работать надо в пассивном режиме (т.е. и данные и команды идут через один коннект).

----------

## Nicephorus

значит собака зарыта в настройках Squid... Можешь свои запостить сюда?

я смогу показать только в понедельник то что навоял

----------

## Jekpol

Я не пойму твоей проблемы, в клиентах ftp просто не указываешь squid сервер, а шлюз ставишь по-умолчанию твоего сервера internet и все! Так как iptables у тебя не настроен, то все пакеты будут летать мимо squid.

А захочешь контролировать процесс хождения пакетов, настрой iptables нормально. Например, пускать ftp трафик мимо squid можно так:

У меня это осуществляется, например таким правилом (здесь пакеты tcp (на порт 80,443 ...добавь какие тебе нужны) идущие от внутренней сети во внешнею заворачиваются на порт squid 3128). Почему заворачиваются? А весь iptables настроен так, что если на клиенте указать шлюз данного сервера со squid без настройки в программах адреса и порта proxy, то все будут ходить в инет мимо squid.

Вот правило:

iptables -t NAT -A PREROUTING -s 192.168.0.0/255.255.0.0 -d ! 192.168.0.0/255.255.0.0 -p tcp -m tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 3128

Добавляя 21 порт к 80,443 заворачиваешь и ftp запросы на squid.

----------

## ba

 *Jekpol wrote:*   

> iptables -t NAT -A PREROUTING -s 192.168.0.0/255.255.0.0 -d ! 192.168.0.0/255.255.0.0 -p tcp -m tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 3128
> 
> Добавляя 21 порт к 80,443 заворачиваешь и ftp запросы на squid.

 

а что, https тоже можно прозрачно проксевать?

а с ftp так точно ничего не выйдет...

----------

## viy

Я таки не понимаю, что и как надо проксевать.

Если сервис для внешних клиентов, то прокси не нужен.

Если для своих родимых (внутри своей же сети), то нафига тут прокси?

Если хочется дать доступ своим в мир, то да --- надо squid настраивать. Я щас глянул наши настройки, ничего особого там для FTP-кэша не делается, т.е. если спецом не выключена поддержка CONNECT-запросов, то все должно работать...

----------

## Jekpol

У меня через 443(squid поддерживает https) работают  ICQ клиенты. Я приводил пример для работы своих внутренних клиентов, а для внешних конечно нужно настраивать iptables, и squid тут конечно не причем, по крайней мере в начальной постановке задачи. Как я понял Nicephorus, то он не мог настроить своих внутренних клиентов через squid, которые коннектятся на внешние ftp-сервера и делают там какие-то операции чтения-записи. На компьютерах внутренних клиентов нужно было указать в сетевых настройках ip-адрес шлюза (сервера) по-умолчанию, а в программе ftp-клиента (cutFTP, и др.) не указывать прокси совсем. В этом случае все будет идти мимо squid через указанный шлюз по-умолчанию. Но тогда трафик будет не контролируемым, если не настроить iptables.

 То правило, которое я приводил работает, и у меня работает с портами 80,443,21, т.е. трафик по запросам на эти порты я заворачиваю на squid, и любой "умный юзер", указавший у себя шлюз по-умолчанию не сможет выйти в интернет, если он не заведен в squid.

----------

## ba

Jekpol

Если завернуть 21 порт на сквид, то ftp работать точно не будет.

А то что сквид поддерживает https, это не значит, что его можно прозрачно проксевать(хотя если прописать сертификат сквиду, то может и можно, но при коннекте на любой сайт как минимум браузер будет ругаться что сертификат не на то имя), вот я и спрашиваю, работает ли? например https://mts.ru/?

И я не совсем понял причем тут icq клиенты, если ты в них прописываешь прокси, то тогда зачем разворот 443 порта на сквид? если нет, то с какой стати они по 443 порту-то пойдут?

----------

## viy

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

----------

## Jekpol

Я уже говорил, что у меня это работает без проблем, и заворачиваю я, чтобы юзеры, которым не разрешен доступ в инет, не могли коннектиться, укзав просто шлюз по умолчанию. В клиентах ICQ конечно же указывается порт 443 , а не 5190 (это не порт squid), т.к. через 5190 у меня лично не работают клиенты через проксю, а через 443 аж бегом.  Про пассивный режим я забыл сказать. Да нужно обязательно указывать в клиентах пассивный режим. И еще раз говорю, что то правило, которое я привел, р а б о т а е т !!!

----------

## viy

Да, ладно, ладно  :Wink: 

Верим мы тебе, работает -- и это главное!

----------

## ba

 *Jekpol wrote:*   

> И еще раз говорю, что то правило, которое я привел, р а б о т а е т !!!

 

не верю (C.) по крайней мере работает не так как можно подумать увидев это правило. Говорим щас только о 21 порте. В ftp-клиенте прокси прописан? если да, то вместо этого правила можно просто закрыть коннекты по 21 порту и ничего не изменится, так? Если прокси не прописан и ftp работает, то что-то тут нетак, скорее всего коннект идет каким-то образом мимо сквида, в логах коннекты логятся?

----------

## Jekpol

По умолчанию  в squid ftp_passive on и в клиенте нужно указывать пассивный режим. Сейчас специально проверил, и качнул (через firefox правда - в настройках указан адрес прокси squid и для ftp) с ftp сервера, в логах squid все пишется, равно как и других программ, которые тянут с ftp серверов файлы (антивирусы и т.д.).

----------

## ba

 *Jekpol wrote:*   

> По умолчанию  в squid ftp_passive on и в клиенте нужно указывать пассивный режим. Сейчас специально проверил, и качнул (через firefox правда - в настройках указан адрес прокси squid и для ftp) с ftp сервера, в логах squid все пишется, равно как и других программ, которые тянут с ftp серверов файлы (антивирусы и т.д.).

 

Еще раз перечитай мой пост, конкретно вот эту часть

 *Quote:*   

> В ftp-клиенте прокси прописан? если да, то вместо этого правила можно просто закрыть коннекты по 21 порту и ничего не изменится, так?

 

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

----------

## Jekpol

Насчет ж..., это можно и поспорить. В моем случае в клиенте ftp можно не указывать вообще прокси сервер, правилом iptables завернет на squid по-любому. Вот я и использовал прозрачное проксирование как мне было удобно и если хочешь через то самое место, результата я добился, а то что решения другие есть и может быть и лучше, я не спорю, но это уже другая история.

----------

## ba

 *Jekpol wrote:*   

> В моем случае в клиенте ftp можно не указывать вообще прокси сервер, правилом iptables завернет на squid по-любому.

 

А вот это точно не правда. Когда прописываешь прокси в ftp-клиенте, то он либо начинает делать запросы по ftp, но оформляя их как запросы по http к прокси(ie так делает например), либо начинает использовать метод CONNECT прокси сервера и писать все комманды через него. А когда ты ничего не прописываешь, то ftp клиент начинает сыпать ftp комманды сквиду(который их не понимет) думая что общается не с прокси, а с ftp-сервером.

----------

## Jekpol

Скажи тогда, на какие порты ftp клиент может коннектится и какие протоколы использует? Правилом iptables у меня все запросы по tcp протоколу на 80 и 21 порт перебрасываются на порт 3128. Остальные блокируются, что мне и нужно.

----------

## ba

 *Jekpol wrote:*   

> Скажи тогда, на какие порты ftp клиент может коннектится и какие протоколы использует?

 

В пассивном режиме использует только 21 порт, а протокол использует ftp, если идет мимо прокси. Или через прокси делает комманду CONNECT(вот уже не знаю, входит ли она в http протокол) и так же начинает использовать ftp пртокол. Или делает http-proxy запрос, но только с ftp:// ссылкой.

Ты лучше скажи, у тебя без прописывания прокси в клиенте ftp работает? и в логах все логится? сомневаюсь...

----------

## Jekpol

Без прописывания в клиенте ftp прокси сервера конечно ничего не выйдет, т.к. прокси у меня пускает только под именем и паролем (т.е. использует аутентификацию). Но мне нужно не пустить тех юзеров, которые настроили сами свои клиенты, а те, которые настрою я, будут работать нормально. Теперь понятно?

 Если запретить коннекты по 21 порту, то можно добиться аналогичного результата, но так как по 80-му все-равно заворачивается, то зачем добавлять еще одно правило? А если squid будет вообще за файрволом, (если конечно такое может быть) то никто не сможет коннектиться по 21 порту, указывай не указывай прокси.

----------

## ba

Мы о разном спорим %) ты говоришь что у тебя все работает так как тебе хочется. В этом я тебе верю :)

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

 *Jekpol wrote:*   

> В моем случае в клиенте ftp можно не указывать вообще прокси сервер, правилом iptables завернет на squid по-любому.

 

----------

## Jekpol

Правилом завернет, разве не так? А вот squid дальше пустит или нет, то я об этом не говорил и не утверждал. Завернет по двум признакам: tcp протокол (ftp - это разновидность tcp, для iptables нет понятия ftp протокола, он знает только tcp, icmp, udp протоколы)  и 21 порт. А я расказываю о конкретно своем случае, а не как может быть.

----------

## viy

Завернет-то завернет, только ftp-клиент будет думать, что он говорит с ftp-сервером напрямую, без посредников. А по факту --- все команды будет squid получать. И он будет ругаться, т.к. в чистом виде ftp-протокол squid не понимает (ему надо пару инит-команд дать, чтобы он не думая просто делал tunneling для данных).

Про это и говорит ba.

----------

## ba

 *Jekpol wrote:*   

> В моем случае в клиенте ftp можно не указывать вообще прокси сервер

 

ок, закрываем спор :) просто я эту часть фразы понял как ``можно не прописывать, и так и так будет ходить''...

----------

## viy

Слушай, ba, меня другой вопрос давно волнует: у тебя на аватаре левый или правый глаз?..  :Cool: 

----------

## ba

 *viy wrote:*   

> Слушай, ba, меня другой вопрос давно волнует: у тебя на аватаре левый или правый глаз?.. 8)

 

правый вроде, картинка из опенинга к Elfen Lied %)

дааа... тема скатилась в жуткий оффтопик...

----------

## Nicephorus

вот и я про то, пришел с работы - офигел 35 сообщений, почитал - дельного 0% извините  :Smile: 

может всеже кто-нибудь для меня как для чайника(я не чайник но чтоб понятно было) обьяснить

ВОЗМОЖНА ЛИ РАБОТА ФТП ЧЕРЕЗ SQUID или просто форвардинг через нат для фтп сделать?

----------

## ba

 *Nicephorus wrote:*   

> ВОЗМОЖНА ЛИ РАБОТА ФТП ЧЕРЕЗ SQUID или просто форвардинг через нат для фтп сделать?

 

да возможна, как - тебе объяснили - правильный клиент+пассивный режим и прописанный прокси.

насчет нат-а, это более корректно, тк это прозрачно для пользователя и будет работать не только пассивный режим.

если я правильно понял что тебе надо, то делать в простейшем случае так:

echo 1 > /proc/sys/net/ipv4/ip_forward

или тоже самое через sysctl

и iptables -t nat -A POSTROUTING -s $local_net_with_mask -o $output_interface -j SNAT --to $external_ip

и на всякий случай, чтобы внутрь не пролезли iptables -A FORWARD -i $external_interface -d $local_net_with_mask -m state --state NEW -j REJECT

ну и в ядре включить нат и коннтрак для фтп

----------

