Прокси сервера бывают разные, красивые и безобразные ; ))) Цитата меня самого. Стандартом де-факто в Интернете стал SQUID, но имеются на просторах бывшей великой и могучей вещи не хуже. А может в чем-то даже лучше.
В свое время, когда стал вопрос использования прокси-сервера для доступа в Интернет мне пришлось перелистать много литературы по настройке сквида. Не имею к нему особых претензий, но практически любой начинающий скажет – сложный. И будет в чем-то прав. К моему счастью попалась мне на глаза заметка про OOPS в разделе новостей на
www.opennet.ru . Это же в свою очередь повлекло за собой поиск по древу портов – он там присутствовал.
И так это было лирическое вступление, теперь приступаем.
Первое, что нам необходимо, это решить как мы будем его ставить – из портов, пакаджей или исходников. Последняя версия OOPS-a доступна
www.oops-cache.org. В принципе подойдет любой вариант, для базовой установки. Еще нам потребуется апач, точнее одна его утилита, для обеспечения аутентификации пользователей.
freebsd# cd /usr/ports/www/oops
freebsd# make && make install && make clean && rehash
- установка из портов
freebsd# pkg_add –v oops-1.5.22.20021204.tgz
- устанавливаем из пакаджа
freebsd# tar xvfz oops-1.5.22.20021204.tar.gz
freebsd# ./configure
freebsd# make install && make clean && rehash
По умолчанию он будет установлен в каталог /usr/local/oops. Что нам не обходимо так это его конфигурационный файл. Находится он вместе с остальными в /usr/local/etc/oops
Следующее наше действие:
freebsd# cp /usr/local/etc/oops/oops.conf.sample /usr/local/etc/oops/oops.conf
Этим мы создали основной наш конфигурационный файл и сохранили, так сказать, резервную копию старого файла.
Теперь приступим непосредственно к конфигурированию. Открываем созданный нами oops.conf. Первое что мы увидим – это достаточно простой конфиг с кучей пояснений, понятных на интуитивном уровне. И первое наше действие – указатьь ДНС сервера, которые будет использовать наш проксисервер, здесь ничего сложного нет – синтаксис как в resolv.conf
nameserver 193.193.193.193
nameserver 193.193.193.194
Идем дальше. Необходимо указать прослушивании каких портов будет осуществлять прокси-сервер
http_port 3128
icp_port 3130
При установке прокси-сервера, пользователю задается вопрос, а хочет ли он создать отдельного пользователя oops. Желательно создать его, ведь от его имени ибудет стартовать данный сервис, если же вы хотите запустить от имени другого пользователя, то пишем в конфиге не
userid oops
А тот который нам необходим. Следующее,необходимо указать, где у нас будут храниться файл лога, файл доступа к прокси-серверу (тот самый по которому мы сможем считать статистику), pid-файл запущенного процесса и файл статистики.
logfile /usr/local/oops/logs/oops.log { 3 1m } unbuffered
accesslog /usr/local/oops/logs/access.log
pidfile /var/run/oops.pid
statistics /var/run/oops_statfile
Так же необходимо указать, сколько оперативной памяти будет подминать под себя наша прокся
mem_max 32m
lo_mark 16m
Для поддержки HTTP/1.1 и проверки на «свежесть» за кешированых объектов
force_http11
always_check_freshness
Продолжаем закачивать, при обрыве пользователем загрузки страницы/файла, если закачка достигла энного процента
force_completion 75
Максимальный размер кешируемого объекта
maxresident 1m
Следующим идет список ACL, мы вставим необходимые нам
acl BADNETWORKS src_ip 192.168.20/24
acl LOCAL_NETWORK src_ip 192.168.10.0/24
Тут понятно – первая означает не хорошую сетку, которая не должна ходить в инет, а вторая наоборот, ну нашенскую, которую пускаем ; ))). Жесткой привязки к имени нет и можно их обзывать как угодно.
Поддерживаемы е типы
Можем указать кодировки для пользователей, привязать определенные домены, порты и многое другое:
acl RUS dstdom ru su
acl UKR dstdom ua
acl BADPORTS port [1:19],[22:79],110,138,139,513,[6000:6010
acl BADDOMAIN dstdom baddomain1.com baddomain2.com
acl MANAGER src_ip 192.168.10.2
acl SKIF src_ip 192.168.10.1
В принципе достаточнооставить все как есть и лишь добавить свои, необходимые ACL. В рассмотренном выше примере, нам потребуются две SKIF, MANAGER, которым мы сделаем широкий канал доступа в Интернет.
Следующим параметром который нам придется изменить – список локальных сетей
local-networks 192.168.10.0/24
Ну вот, а теперь настало время икс – мы решаем, кто куда пойдет и как при этом будет себя чувствовать. Сначала рассмотрим основную массу пользователей. Предположим ситуация такая: у вас есть двух мегабитный канал в вожделенную паутину (прям как у меня), ну можно поменьше, пусть 128k. Первое что нам нужно решить – режем мы людям скорость или нет. Ответ почти всегда –ДА, и бо мы тоже (админы) люди и хотим быстро по оному лазить Условимся, что на конкретного машину выделяем 4k (мона и меньше, но я сделал стока, мне канал позволяет). Теперь как проверяем пользователя – логин: пароль берем из файла, самый простой случай. Обеспечиваем доступ только в определенное время или всегда?
group paco {
networks 192.168.10/24 127/8;
networks_acl LOCAL_NETWORKS! BAD_NETWORKS;
badports [0:79],110,138,139,513,[6000:6010] ;
miss allow;
#############
auth_mods passwd_file;
per_ip_bw 4k;
bandwidth 4k;
# CONNECT;
##############
#denytime Sat,Sun 0642:1000
#denytime Mon,Thu:Fri,Sun 0900:2100
# icp acl ...
icp {
allow dstdomain * ;
}
#
# http acl
http {
allow dstdomain *;
}
}
Если мы решили пускать народ в определенное время – пожалуйста откоментировали изменили ; ))). Захотели ограничить доступ к определенным доменам - указали. Просто, правда? ; )))
Но у нас же есть два пользователя которые не хотят иметь никаких ограничений, что ж, поможем и им ; ))) Создадим такую же группу, но поместим ее впереди вот этой, основной – принцип как у ipfw – читаем правила в порядке возрастания, то что идет раньше игнорирует следующее.
group adminuser {
networks 192.168.10.1/32 192.168.10.2/32;
networks_acl MANAGER SKIF;
badports [1:19],[22:79],110,138,139,513,[6000:6010] ;
miss allow;
auth_mods passwd_file;
icp {
allow dstdomain *;
}
http {
allow dstdomain *;
}
}
И так, что значит это самое 192.168.10.1/32 – да ничего, просто это маска вида 255.255.255.255, тобишь указываем конкретные хосты, Можно, в принципе использовать одни ACL-ки, но так нагляднее, плюс ACL проверяются медленнее и позже непосредственно указанных сетей.
В обоих случаях присутствует строчка
auth_mods passwd_file;
Что она значит – да ничего особого… ; ))) Просто мы указываем, что авторизацию будем проходить при помощи файла с паролями.
Двигаемся дальше. Нам необходимо указать размер нашего Кеша и где он будет располагаться, нет ничего проще:
storage {
path /usr/local/oops/storages/oops_storage ;
size 2000m ;
}
Ага, а вот этот самый модуль и указывает, где расположен файлик с паролями, тип проверки аутентификации, и что вывешивать если мы ошиблись с паролем ; ))) в окошке браузера
module passwd_file {
realm oops
scheme Basic
file /usr/local/etc/oops/passwd
template /usr/local/etc/oops/auth_template.html
}
Все, в принципе мы закончили конфигурирование нашего прокси-сервера. Можно готовить пиво ; ))).
Теперь необходимо создать сам файлик с паролями где ему положено быть –тоже нет ничего сложного, правда для этого потребуется немного апача ; ))) точнее одна его встроенная утилита – htpasswd:
freebsd# htpasswd –c /usr/local/etc/oops/passwd pupkin
Все, мы создали и файл с паролем и пользователя в придачу. Но следующего пользователя нужно уже создавать без ключа –c, иначе файл перезапишется и прежний юзверь исчезнет.
freebsd# htpasswd /usr/local/etc/oops/passwd nepupkin
Ну вот мы создали и это, но еще не все! Надо создать наше хранилище Кеша. Создается оно при первом запуске с ключом –z
freebsd# oops –z
Иногда приходиться писать полностью:
freebsd# /usr/local/sbin/oops –z
Все, теперь у нас создан и отформатирован раздел Кеша и запущен OOPS – проверяем, а работает ли он, убедившись в том, что ни фига не работает отставляем пиво и читаем дальше ; ))).
Теперь нужно сделать следующее – повернуть весь трафик на нашу проксю, как? Опять таки – просто ; ))) Берем ipfw и пишем следующее:
01150 fwd 127.0.0.1,3128 tcp from 192.168.10.0/24 to any 80,3128,8080,8101,443
Все, теперь запросы поступающие из нашей сети по портам 80,3128,8080,8101,443 пойдут на прокси, вот тут всем и вспомниться, что админ не последний человек в конторе ; ))).
Так, а теперяче надо же сделать так, что бы при загрузке фри, он сам стартовал. Тоже все достаточно просто – в папке /usr/local/etc/rc.d есть файлик, точнее скрипт под именем oops.sh.sample переименовываем его, али копируем под новым именем
freebsd# cp /usr/local/etc/rc.d/oops.sh.sample /usr/local/etc/rc.d/oops.sh
Все, сделали, достали пиво, откупорили, перед этим проверив, что настройки брэндмауера (фаервола и пр. ; ))) ) позволяют уходить пакетам с нашего тазика ; ))) И пьем его смело.
Если вам захотелось посмотреть, а куда ж наш злобный народ лазит в рабочее время и что он там творит – ну снова пивка захотелось, надо же народ раскрутить? – используем чудесный анализатор логов от сквида – SARG. Все, что от нас потребуется – это его чуток подправить и указать путь к файлику access.log OOPS-а. Все и можем наслаждаться радостью бытия ; ))) Пиво есть, народ лазит, за нас статистику считают, мы можем пойти к начальству и предъявить на любое тело дело – когда, где, сколько и с кем ; )))