Open Way | Systems | Distro | Shell | Desktop | Applications
Network | Development | Download | OfftopicКарта сайта
FreeNotesФорум POSIX.ru
На главную страницу

FreeBSD: Настройка полноценного доступа к ftp через squid

sten
2005.11.24

Вот, собственно и настал момент, когда чукче надоело быть просто читателем и он решил стать ещё и писателем. писателем чукча пытался стать давно, но этому мешала природная лень. "Виновниками" перебарывания чукчей лени являются г-н Федорчук лично и несколько коллег, которые в текущий момент столкнулись с аналогичной проблемой.

После того, как я променял работу в одной известной в Москве корпорацией, которую работавшие там люди, иначе, кроме как матом не поминают, на относительно "тихую заводь" издательского дома "Собака", передо мной встал ряд проблем, преимущественного технического характера. Основной задачей стало безболезненно и не прерывая работы людей вывести из работы сервера, под честно украденной операционной системой производства компании Microsoft и "передать сервера под управление" нашему дорогому и избирательному в друзьях Beastie. Далее описываются мои "мучения", связанные с тем, чтобы обеспечить полноценную работу с FTP через прокси-сервер, поднятый на этой-же машине и ждущий пакеты на своём стандартном 3128-м порту.

Собственно, амбула.

Мы имеем:

  1. машину под FreeBSD 5.4-RELEASE, выступающую в роли прокси.
  2. две подсети 192.168.0.0/24 (PC) и 10.0.0.0/24 (Mac).
  3. журналистов, которым почему-то мало http.

Машина, выступающая в роли прокси-сервера имеет адреса в обеих подсетях. Спонсор адреса в подсети 10.0.0.0/24 - алиас в /etc/rc.conf ;)

	 $ ifconfig_xl0="inet 192.168.0.239  netmask 255.255.255.0"
	 $ ifconfig_xl0_alias0="inet 10.0.0.239 netmask 255.0.0.0"

После непродолжительного сопоставления поисков в гугле и дереве портов, я решил использовать в своём случае frox, о возможностях которого в pkg-deskr довольно скромно написано "a transparent ftp proxy by James Hollingshead". После cvsup и стандартных процедур вида

	 $ cd /usr/ports/ftp/frox && make && make install 

обнаружился файл /usr/local/etc/frox.conf.sample, с которым я привычно сотворил

	 $ cp frox.conf.sample frox.conf 

и приступил к редактированию свежесозданного frox.conf

Первым делом пишем адрес, который слушает frox:

	 Listen 192.168.0.239

(я честно пробовал следовать рекоммендациям и закомментировать этот ключ, чтобы frox принимал пакеты на всех адресах, и он это честно пытался сделать, но при любой попытке соединиться с внешним ftp-сервером результат был один - добавление в лог записей об ошибках.)

Порт, на котором frox принимает входящие соединения:

	 Port 2121

От имени какого пользователя запускаться frox'у:

	 User nobody
	 Group nogroup

(есть возможность запускать frox от имени суперпользователя, но по умолчанию стоит nobody)

Указываем рабочую директорию frox'а. Директорию создаём сами и не забываем сменить владельца и группу директории на nobody.

	 WorkingDir /tmp/frox

Тут, думаю, всё понятно

	 LogFile /var/log/frox.log
	 PidFile /var/run/frox.pid

Ввиду того, что люди работают не только с текстовыми файлами, раскомментируем ключ

	 AllowNonASCII yes

"Знакомим" frox с прокси-сервером и заставляем прокси кэшировать файлы, размер которых превышает 5Kb

	 CacheModule http
	 HTTPProxy 127.0.0.1:3128
	 MinCacheSize 5

Ограничиваем максимальное количество соединений вообще и максимальное количество соединений с одного хоста.

	 MaxForks 10
	 MaxForksPerHost 4

(Тут меня всё устроило, так что цифры дефолтные)

Далее в конфиге следует хорошо отдокумментированный раздел ACL, но я исходил из того, что снаружи я закрыт NAT'ом и IPWF, поэтому всем разрешил всё:

	 ACL Allow * - *

На этом настройка самого frox'а закончилась и начались действия по оправданию слова "transparent" в описании. Всё решилось добавлением двух правил для ipfw:

	 add 11500 fwd 192.168.0.239,2121 tcp from 192.168.0.0/24 to any 21
	 add 11510 fwd 192.168.0.239,2121 tcp from 10.0.0.0/24 to any 21

После этого осталось вписать frox_enable="YES" в /etc/rc.conf, запустить скрипт /usr/local.etc/rc.d/frox.sh, скачать пробы ради небольшой текстовый файл и насладиться вожделенной надписью в логе:

Sun Nov 20 16:49:51 2005 frox[4973] Listening on 192.168.0.239:2121
Sun Nov 20 16:49:51 2005 frox[4973] Dropped privileges
Sun Nov 20 16:50:03 2005 frox[5680] 192.168.0.13 DOWNLOADED ftp://anonymous@ftp01.apple.com/developer/!_About_Dev_Connection_ftp.txt
Sun Nov 20 16:50:15 2005 frox[5680] Client closed connection
Sun Nov 20 16:50:23 2005 frox[5680] Closing session

Однако не всё оказалось так гладко, как казалось изначально. Машины из подсети 10.0.0.0 наотрез отказывались работать со свеженастроенным frox'ом, который на попытки соединения писал в лог:

ERROR: "bind: Address already in use" at line 56 of misc.c

Не буду описывать полуторачасовой процесс гугления и поисков ошибок в конфиге, сразу скажу, что всё решилось правкой двух ключей во frox.conf:

	 DoNTP yes
	 NTPAddress 192.168.0.239:2121

после чего макинтошам указали в качестве ftp-proxy 192.168.0.239:2121 и на этом мои мучения закончились.

А вообще, вся приятность заворачивания всего ftp-трафика через http-proxy - в возможности с помощью обычных ACL, которые использует squid, запретить скачивание *.mp3, *.avi и прочей, совершенно не нужной для работы, гадости. ;)

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

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


Mul-T-Lock сервис дверных замков: mul-t-lock. Двери Mul-t-lock. . стоимость вступления в сро