From: Дмитрий Новиков <dmn@nnz.ru>
Newsgroups: http://www.artmagic.ru/labs/
Date: Mon, 4 Dec 2002 13:01:37 +0000 (UTC)
Subject: Принудительное FTP-проксирование в FreeBSD и Linux
Принудительное 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/)
- Компилируем и инсталируем пакет
./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 и т.п.).
Например, вот как можно ограничить закзачку подобных файлов и
разрешить закачку всех остальных.
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.col
umbus.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 кеширует только анонимные заходы. С чем это связано нам
неизвестно.