ARTMagic Group

Интернет-студия
Принудительное FTP-проксирование в FreeBSD и Linux

 

Администраторы очень часто пользуются технологией принудительного проксирования - когда весь HTTP-трафик "разворачивается" на ПРОКСИ-сервер. Как это делается можно прочитать здесь. Использование ПРОКСИ-сервера повышает уровень управляемости трафиком и позволяет разгружать канал за счет кеширования данных. Например с помощью ПРОКСИ-сервера можно запретить скачивать 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/)

- Компилируем и инсталируем пакет

./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

2. Настраиваем конфигурационный файл пакета

Конфигурационный файл пакета frox.conf по умолчанию располагается в каталоге (/usr/local/etc/). Он достаточно прост и содержит всего несколько ключевых параметров, а также снабжен подробными комментариями.

Listen 10.128.1.1 - указываем IP интерфейс, на котором будет работать frox (как правило, интерфейс локальной сети).

Port 2121 - номер порта, на котором frox принимает соединения

#BindToDevice eth0 - только для Linux можно указать интерфейс, на котором будет работать frox

# FromInetd yes - frox можно запускать из демона inetd

В этом случае нужно добавить в /etc/inetd.conf:

frox stream tcp nowait nobody /usr/local/sbin/frox frox

и в /etc/services

frox 2121/tcp

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

User nobody

Group nogroup

WorkingDir /tmp/frox - указываем рабочий каталог программы. Важно дать права пользователю nobody на полный доступ к каталогу.

(mkdir /tmp/frox; chown nobody /tmp/frox; chmod 700 /tmp/frox

LogLevel 20 - лучше указать 20 - для максимальной информативности

LogFile /var/log/frox.log - лог-файл

MaxForks 10 - максимальное число процессов frox (число одновременных FTP-соединений через frox).

MaxForksPerHost 4 - максимальное количество соединений с одного IP. Другими словами, максимальное число одновременных сессий от одного пользователя. Действенный метод борьбы с разного рода "качалками" (типа reget), которые качают в кучу потомков (до 8) и "забивают" канал.

CacheModule http - активизируем модуль, работающий через http ПРОКСИ-сервер

HTTPProxy 10.128.7.11:3128 - указываем адрес ПРОКСИ-сервера и порт

MinCacheSize 5 - указываем минимальый размер файла, который будет запрашиваться через ПРОКСИ-сервер (здесь поставлен размер 5кб, чтобы практически все файлы шли через ПРОКСИ

Указываем сети, которым можно пользоваться сервисом.

ACL Allow 10.128.0.0/16 - *

ACL Allow 10.5.0.0/16 - *

Другие параметры и подробные комментарии можно изучить из документации и из комментариев в самом конфигурационном файле.

3. Настраиваем форвардинг FTP-пакетов на порт frox

- Для Linux (эту команду можно записать в /etc/rc.d/rc.local):

iptables -A FORWARD -p tcp --dport 21 -j REDIRECT --to-port 2121

- Для FreeBSD (эту команду можно записать в /etc/rc.local):

/sbin/ipfw add 100 fwd 10.128.1.1,2121 tcp from 10.128.0.0/16 to any 21 - важно не перепутать и не указать адрес 127.0.0.1,2121 - рабоатть не будет, потому что frox слушает другой адрес (10.128.1.1).

4. Настраиваем SQUID.

Нужно дать права в ПРОКСИ-сервере на доступ frox. Самое замечательное, что тут же можно и ограничить доступ (например файлы mp3 и т.п.).

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

squid.conf

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

5. Запускаем правила файрволла, frox (/usr/local/sbin/frox или из inetd), squid.

С небольшой долей вероятности все запустится и будет работать.

Первое что нужно посмотреть - регистрирует ли frox FTP-сессии.

>tail -f /var/log/frox.log

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)

Если таких записей нет, то форвардинг на порт 2121 не работает.

Нужно также посмотреть в лог-файл ПРОКСИ-сервера, скачивает ли он по запросу frox файлы:

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 не связывается с SQUID

В противном случае - все работает. Остается насладиться кешированными запросами к ФТП-серверам и запретами на скачивание музыки и фильмов.

Примечания:

Frox кеширует только анонимные заходы. С чем это связано нам неизвестно.

Полезные ссылки:

- Домашняя страница frox: http://www.hollo.org/frox/

 

 

Все статьи

Последние новости

Путешествие во времени: Падение форинта

Пятница, 18 Мая 2012

News image

Венгерская валюта в нынешнем году побила рекорды среди мировых валют по части падения - форинт переживает не лучшие времена. На нем отразился финансовый кризис, в котором находится Венгрия. Тамошние власти были вынуждены обратиться в Мировой Валютный фонд с просьбой о выдаче кредита, окончательно опозорив форинт в глазах мирового ...

Подробнее

Литература

Архив публикаций