Принудительное FTP-проксирование в FreeBSD и Linux
Добавлено: 27 ноя 2015, 21:24
Источники:
http://www.artmagic.ru/labs/transparent-proxy-ftp.shtml
http://www.opennet.ru/base/net/transparent_ftp.txt.html
Принудительное FTP-проксирование в FreeBSD и Linux
Администраторы очень часто пользуются технологией принудительного проксирования - когда весь HTTP-трафик "разворачивается" на ПРОКСИ-сервер. Как это делается можно прочитать [8]здесь.
Использование ПРОКСИ-сервера повышает уровень управляемости трафиком и позволяет разгружать канал за счет кеширования данных. Например с помощью ПРОКСИ-сервера можно запретить скачивать mp3 и mpeg файлы, что для корпоративной сети весьма актуально.
Конечно после "постановки на учет" HTTP-трафика хочется также контролировать и FTP-трафик, тем более что по этому протоколу пересылаются большие файлы. Аналогично http-потокам, FTP-трафик не "развернуть" на ПРОКСИ-сервер. Однако существует специализированный сервер, который позволяет производить принудительное проксирование FTP-трафика и, что самое приятное, есть возможность использовать для доставки любой ПРОКСИ-сервер.
Называется этот проект frox и работает для ОС Linux и FreeBSD. В нашей лаборатории мы успешно испытали этот сервер для OC Linux Slackware 8.1 и ОС FreeBSD 4.7 совместно с ПРОКСИ-сервером SQUID 2.5.
1. Собираем пакет
Для Linux frox был собран из исходников:
- Скачиваем frox с сайта разработчика
(http://sourceforge.net/projects/frox/)
- Компилируем и инсталируем пакет
(такая сборка активирует модуль локального кеширования, кеширования
через ПРОКСИ-сервер и модуль проверки на вирусы)
Для FreeBSD frox собирается аналогично или из системы портов:
2. Настраиваем конфигурационный файл пакета
Конфигурационный файл пакета frox.conf по умолчанию располагается в каталоге (/usr/local/etc/). Он достаточно прост и содержит всего несколько ключевых параметров, а также снабжен подробными комментариями.
3. Настраиваем форвардинг FTP-пакетов на порт frox.
- Для Linux (эту команду можно записать в /etc/rc.d/rc.local):
- Для FreeBSD (эту команду можно записать в /etc/rc.local):
- важно не перепутать и не указать адрес 127.0.0.1,2121 - работать не будет, потому что frox слушает другой адрес (10.128.1.1).
4. Настраиваем SQUID.
Нужно дать права в ПРОКСИ-сервере на доступ frox. Самое замечательное, что тут же можно и ограничить доступ (например файлы mp3 и т.п.).
Например, вот как можно ограничить закзачку подобных файлов и разрешить закачку всех остальных.
squid.conf
5. Запускаем правила файерволла, frox (/usr/local/sbin/frox или из inetd), squid.
С небольшой долей вероятности все запустится и будет работать.
Первое что нужно посмотреть - регистрирует ли frox FTP-сессии.
Если таких записей нет, то форвардинг на порт 2121 не работает.
Нужно также посмотреть в лог-файл ПРОКСИ-сервера, скачивает ли он по запросу frox файлы:
Если таких записей нет, то frox не связывается с SQUID.
В противном случае - все работает. Остается насладиться кешированными
запросами к ФТП-серверам и запретами на скачивание музыки и фильмов.
Примечания:
Полезные ссылки:
- Домашняя страница frox: http://www.hollo.org/frox/
PS.
1.2
У меня проблема возникла, все настроил как написано, frox запросы получает, лог ведется, файлы с ftp-сервера качаются, но со сквидом связи нет! все работает и при включенном и при выключенном squid.
Как это разрешить?
После непродолжитекльного танца с бубнами все разрешилось, всем спасибо.
Только вот так все равно не удобно, ибо в логах не видно с какого IP ходили на ftp. естественно везде адрес сервера... млин
1.4
Если сделать все, как в этой статье, можно остаться в заблуждении. Если frox видит 403 ответ от squid, он упорно ломится напрямую, и все-таки скачает файл.
http://www.artmagic.ru/labs/transparent-proxy-ftp.shtml
http://www.opennet.ru/base/net/transparent_ftp.txt.html
Принудительное FTP-проксирование в FreeBSD и Linux
Администраторы очень часто пользуются технологией принудительного проксирования - когда весь HTTP-трафик "разворачивается" на ПРОКСИ-сервер. Как это делается можно прочитать [8]здесь.
Использование ПРОКСИ-сервера повышает уровень управляемости трафиком и позволяет разгружать канал за счет кеширования данных. Например с помощью ПРОКСИ-сервера можно запретить скачивать mp3 и mpeg файлы, что для корпоративной сети весьма актуально.
Конечно после "постановки на учет" HTTP-трафика хочется также контролировать и FTP-трафик, тем более что по этому протоколу пересылаются большие файлы. Аналогично http-потокам, FTP-трафик не "развернуть" на ПРОКСИ-сервер. Однако существует специализированный сервер, который позволяет производить принудительное проксирование FTP-трафика и, что самое приятное, есть возможность использовать для доставки любой ПРОКСИ-сервер.
Называется этот проект frox и работает для ОС Linux и FreeBSD. В нашей лаборатории мы успешно испытали этот сервер для OC Linux Slackware 8.1 и ОС FreeBSD 4.7 совместно с ПРОКСИ-сервером SQUID 2.5.
Практическое решение:В репозитории Debian существует пакет ftp-proxy, который является либо клоном, либо текущей разработкой проекта frox
1. Собираем пакет
Для Linux frox был собран из исходников:
- Скачиваем frox с сайта разработчика
(http://sourceforge.net/projects/frox/)
- Компилируем и инсталируем пакет
Код: Выделить всё
./configure --enable-http-cache --enable-local-cache --enable-virus-scan
make
make install
через ПРОКСИ-сервер и модуль проверки на вирусы)
Для FreeBSD frox собирается аналогично или из системы портов:
Код: Выделить всё
cd /usr/ports/ftp/frox
make WITH_HTTP_CACHE=YES
make install
Конфигурационный файл пакета frox.conf по умолчанию располагается в каталоге (/usr/local/etc/). Он достаточно прост и содержит всего несколько ключевых параметров, а также снабжен подробными комментариями.
Другие параметры и подробные комментарии можно изучить из документации и из комментариев в самом конфигурационном файле.[table][tr][td]Listen 10.128.1.1[/td] [td]- указываем IP интерфейс, на котором будет работать frox (как правило, интерфейс локальной сети).[/td][/tr]
[tr][td]Port 2121[/td] [td]- номер порта, на котором frox принимает соединения[/td][/tr]
[tr][td]BindToDevice eth0[/td] [td]- только для Linux можно указать интерфейс, на котором будет работать frox[/td][/tr]
[tr][td]FromInetd yes[/td] [td]- frox можно запускать из демона inetd
В этом случае нужно добавить в /etc/inetd.conf:
frox stream tcp nowait nobody /usr/local/sbin/frox frox
и в /etc/services
frox 2121/tcp[/td][/tr]
[tr][td]User nobody
Group nogroup[/td]
[td]нужно указать пользователя и группу, под которыми будет работать frox.
это должен быть пользователь с минимальными превилегиями.[/td][/tr]
[tr][td]WorkingDir /tmp/frox[/td] [td]- указываем рабочий каталог программы. Важно дать права пользователю nobody на полный доступ к каталогу.[/td][/tr]Код: Выделить всё
mkdir /tmp/frox; chown nobody /tmp/frox; chmod 700 /tmp/frox
[tr][td]LogLevel 20[/td] [td]- лучше указать 20 - для максимальной информативности[/td][/tr]
[tr][td]LogFile /var/log/frox.log[/td] [td]- лог-файл[/td][/tr]
[tr][td]MaxForks 10[/td] [td]- максимальное число процессов frox (число одновременных FTP-соединений через frox).[/td][/tr]
[tr][td]MaxForksPerHost 4[/td] [td]- максимальное количество соединений с одного IP.
Другими словами, максимальное число одновременных сессий от одного пользователя. Действенный метод борьбы с разного рода "качалками" (типа reget), которые качают в кучу потомков (до 8) и "забивают" канал.[/td][/tr]
[tr][td]CacheModule http[/td][td]- активизируем модуль, работающий через http ПРОКСИ-сервер[/td][/tr]
[tr][td]HTTPProxy 10.128.7.11:3128[/td][td]- указываем адрес ПРОКСИ-сервера и порт[/td][/tr]
[tr][td]MinCacheSize 5[/td] [td]- указываем минимальый размер файла, который будет запрашиваться через ПРОКСИ-сервер (здесь поставлен размер 5кб, чтобы практически все файлы шли через ПРОКСИ)[/td][/tr]
[tr][td]ACL Allow 10.128.0.0/16 - *
ACL Allow 10.5.0.0/16 - *[/td]
[td]Указываем сети, которым можно пользоваться сервисом.[/td][/tr]
[tr][td]CacheAll no[/td] [td]- кешировать все запросы (yes), либо только анонимные (no)[/td][/tr][/table]
3. Настраиваем форвардинг FTP-пакетов на порт frox.
- Для Linux (эту команду можно записать в /etc/rc.d/rc.local):
Код: Выделить всё
iptables -A FORWARD -p tcp --dport 21 -j REDIRECT --to-port 2121
Код: Выделить всё
/sbin/ipfw add 100 fwd 10.128.1.1,2121 tcp from 10.128.0.0/16 to any 21
4. Настраиваем SQUID.
Нужно дать права в ПРОКСИ-сервере на доступ frox. Самое замечательное, что тут же можно и ограничить доступ (например файлы mp3 и т.п.).
Например, вот как можно ограничить закзачку подобных файлов и разрешить закачку всех остальных.
squid.conf
Код: Выделить всё
[color=#000080][b][size=85]
acl mp3 urlpath_regex -i \.mp3$
acl wav urlpath_regex -i \.wav$
acl avi urlpath_regex -i \.avi$
acl mpeg urlpath_regex -i \.mpeg$
acl froxserver src 10.128.1.1
http_access deny avi
http_access deny wav
http_access deny mp3
http_access deny mpeg
http_allow froxserver
[/size][/b][/color]
С небольшой долей вероятности все запустится и будет работать.
Первое что нужно посмотреть - регистрирует ли frox FTP-сессии.
Код: Выделить всё
[color=#000080][b]tail -f /var/log/frox.log[/b][/color]
Fri Jan 17 18:44:28 2003 frox[82826] Connect from 10.128.92.2
Fri Jan 17 18:44:28 2003 frox[82826] ... to 65.24.133.64(dhcp065-024-133-064.columbus.rr.com)
Нужно также посмотреть в лог-файл ПРОКСИ-сервера, скачивает ли он по запросу frox файлы:
Код: Выделить всё
[color=#000080][b]tail -f /var/log/squid/access.log[/b][/color]
1042580618.892 11022 10.128.1.1 TCP_MISS/200 7488 GET ftp://128.100.1.32/pub/mes/gifs/sev-zap.gif - DIRECT/128.100.1.32 image/gif
В противном случае - все работает. Остается насладиться кешированными
запросами к ФТП-серверам и запретами на скачивание музыки и фильмов.
Примечания:
Полезные ссылки:
- Домашняя страница frox: http://www.hollo.org/frox/
PS.
1.2
У меня проблема возникла, все настроил как написано, frox запросы получает, лог ведется, файлы с ftp-сервера качаются, но со сквидом связи нет! все работает и при включенном и при выключенном squid.
Как это разрешить?
После непродолжитекльного танца с бубнами все разрешилось, всем спасибо.
Только вот так все равно не удобно, ибо в логах не видно с какого IP ходили на ftp. естественно везде адрес сервера... млин
1.4
Если сделать все, как в этой статье, можно остаться в заблуждении. Если frox видит 403 ответ от squid, он упорно ломится напрямую, и все-таки скачает файл.