Главная > Операционные системы > UNIX > Linux
Прокси сервер SquidКраткий обзор.Прокси сервера, с их способностью к экономии полосы пропускания, улучшения безопасности, улучшения скорости веб-серфинга, становятся все более и более популярными. В настоящее время на рынке есть только несколько программных прокси-серверов. Они имеют два основных недостатка: они коммерческие и не поддерживают ICP (ICP используется для обмена информации о наличии URL в соседнем кэше). Squid - это лучший выбор для кэширующего прокси-сервера, так как он надежный, бесплатный и поддерживает ICP. Производный от "кэширующего" программного обеспечения ARPA-funded Harvest research project, разработанного в National Laboratory for Applied Network Research and funded by the National Science Foundation, Squid предлагает высокопроизводительное кэширование для веб клиентов, он также поддерживает FTP, Gopher и HTTP объекты данных. Squid хранит часто используемые объекты в RAM, поддерживает надежную базу данных объектов на диске, имеет комплексных механизм контроля доступа и поддерживает SSL протокол для посредничества в безопасных соединениях. В дополнение к этому, он поддерживает иерархические связи с другими прокси-серверами, базирующимися на Squid. В нашем случае мы настроим Squid на запуск, как httpd-акселератора для лучшей производительности нашего веб-сервера. В режиме акселератора, Squid выступает как обратный кэширующий прокси: он принимает запросы клиентов, если это возможно, то удовлетворяет их из кэша, а если не возможно, то организует запросы к оригинальному серверу для которого выступает как обратный прокси. Также, мы покажем конфигурацию Squid, как кэширующего прокси-сервера, которая позволит всем пользователям вашей корпоративной сети использовать Squid для доступа в Интернет. Эти инструкции предполагают. Пакеты. Тарболы. После инсталляции: Для получения списка установленных файлов: Раскройте тарбол: Настройка и оптимизация.Шаг 1Прокси-сервер Squid не должен запускаться из под пользователя root, и по этой причине мы создаем специального пользователя, не имеющего оболочки, для запуска Squid. [root@deep /]# useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1[root@deep /]# mkdir /cache/ [root@deep /]# chown -R squid.squid /cache/ Первое, мы добавляем пользователя "squid". Затем создаем каталог "/cache", если этот каталог не существует. В заключении, мы изменяем владельца каталога "cache" на "squid". ЗАМЕЧАНИЕ. Обычно мы не нуждаемся в выполнении команды (mkdir /cache/), потому что мы уже создали этот каталог, когда разбивали наш жесткий диск при инсталляции Linux. Если этот раздел не существует, мы должны выполнить эту команду для создания каталога. Шаг 2 Переместитесь в новый каталог Squid и выполните следующие команды на вашем терминале: Редактируйте файл Makefile.in (vi +18 icons/Makefile.in) и измените следующие строки: DEFAULT_ICON_DIR = $(sysconfdir)/icons Мы изменили переменную (sysconfdir) на (libexecdir). Благодаря этому, каталог "icons" будет размещаться в "/usr/lib/squid". Редактируйте файл Makefile.in (vi +34 src/Makefile.in) и измените следующие строки: DEFAULT_CACHE_LOG = $(localstatedir)/logs/cache.log DEFAULT_ACCESS_LOG = $(localstatedir)/logs/access.log DEFAULT_STORE_LOG = $(localstatedir)/logs/store.log DEFAULT_PID_FILE = $(localstatedir)/logs/squid.pid DEFAULT_SWAP_DIR = $(localstatedir)/cache DEFAULT_ICON_DIR = $(sysconfdir)/icons Мы изменили месторасположение принятое по умолчанию для файлов "cache.log", "access.log" и "store.log" на каталог "/var/log/squid". Затем, мы разместили pid файл для Squid в каталоге "/var/run", и в заключении, разместили каталог "icons" в "/usr/lib/squid/icons". Использование библиотеки GNU malloc для улучшения производительности SquidЕсли вы страдаете от ограничения памяти на вашей системе, то производительность кэша Squid будет пониженной. Для решения этой проблемы, вы можете связать Squid с внешней библиотекой malloc, такой как GNU malloc. Чтобы Squid использовал GNU malloc как внешнюю библиотеку выполните следующие шаги: Пакеты [root@deep /]# cd /var/tmp [root@deep tmp]# tar xzpf malloc.tar.gz Шаг 1 Компилируйте и инсталлируйте GNU malloc на вашей системе выполнив следующие команды: [root@deep tmp]# cd malloc[root@deep malloc]# export CC=egcs [root@deep malloc]# make Шаг 2 Копируйте файл "libmalloc.a" в каталог с вашими системными библиотеками под именем "libgnumalloc.a". [root@deep malloc]# cp libmalloc.a /usr/lib/libgnumalloc.aШаг 3 Копируйте файл "malloc.h" в каталог с системными заголовочными файлами под именем gnumalloc.h". [root@deep malloc]# cp malloc.h /usr/include/gnumalloc.hSquid автоматически определит файлы "libgnumalloc.a" и "gnumalloc.h" и будет использовать их для улучшения производительности кэша. Компиляция и оптимизацияШаг 1Перейдите в каталог с исходными кодами Squid и введите следующие команды на вашем терминале: CC="egcs" \CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \ ./configure \ --prefix=/usr \ --exec-prefix=/usr \ --bindir=/usr/sbin \ --libexecdir=/usr/lib/squid \ --localstatedir=/var \ --sysconfdir=/etc/squid \ --enable-delay-pools \ --enable-cache-digests \ --enable-poll \ --disable-ident-lookups \ --enable-truncate \ --enable-heap-replacement Эти опции говорят Squid:
Сейчас, мы должны скомпилировать и инсталлировать Squid на сервере: [root@deep squid-2.3.STABLE2]# make -f makefile[root@deep squid-2.3.STABLE2]# make install [root@deep squid-2.3.STABLE2]# mkdir -p /var/log/squid [root@deep squid-2.3.STABLE2]# rm -rf /var/logs/ [root@deep squid-2.3.STABLE2]# chown squid.squid /var/log/squid/ [root@deep squid-2.3.STABLE2]# chmod 750 /var/log/squid/ [root@deep squid-2.3.STABLE2]# chmod 750 /cache/ [root@deep squid-2.3.STABLE2]# rm -f /usr/sbin/RunCache [root@deep squid-2.3.STABLE2]# rm -f /usr/sbin/RunAccel [root@deep squid-2.3.STABLE2]# strip /usr/sbin/squid [root@deep squid-2.3.STABLE2]# strip /usr/sbin/client [root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/dnsserver [root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/unlinkd [root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/cachemgr.cgi Команда "make -f" будет компилировать все исходные файлы в исполняемые двоичные, "make install" будет инсталлировать все исполняемые и сопутствующие им файлы в необходимые места. Команда "mkdir" создаст новый каталог "squid" под каталогом "/var/log". Команда "rm -rf" удалит каталог "/var/logs", так как этот каталог был создан для храннеия файлов регистрации, связанных со Squid, которые были перемещены в каталог "/var/log/squid". Команда "chown" изменит владельца "/var/log/squid" на пользователя squid, и "chmod" изменит права доступа к каталогам "squid" и "cache" (0750/drwxr-x---) из соображений безопасности. Заметим, что мы удаляем небольшие скрипты "RunCache" и "RunAccel", которые запускают Squid в режиме кэширования или акселератора, так как мы используем лучший скрипт "squid" расположенный в каталоге "/etc/rc.d/init.d/". Команда "strip" уменьшит размер двоичных файлов для оптимизации их производительности. Очистка после работы[root@deep /]# cd /var/tmp [root@deep tmp]# rm -rf squid-version/ squid-version.STABLEz-src.tar.gz [root@deep tmp]# rm -rf malloc/ malloc.tar.gz (если вы используете внешнюю библиотеку GNU malloc) Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Squid и GNU malloc. Также будут удалены сжатые архивы Squid и GNU malloc из каталога "/var/tmp". Конфигурации.Все программное обеспечение, описанное в книге, имеет определенный каталог
и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы
для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную
воспроизводить файлы из книги, чтобы создать свои файлы конфигурации.
Скопируйте файлы связанные с Squid из архива, измените их под свои
требования и поместите в нужное место так, как это описано ниже. Файл с
конфигурациями вы можете скачать с адреса: Для запуска Squid в режиме httpd-акселератора следующие файлы должны быть созданы или скопированы на ваш сервер. Копируйте squid.conf в каталог "/etc/squid/". Для запуска Squid в режиме кэширующего прокси-сервера следующие файлы должны быть созданы или скопированы на ваш сервер. Копируйте squid.conf в каталог "/etc/squid/". Вы можете взять эти файлы из нашего архива floppy.tgz. Конфигурация файла "/etc/squid/squid.conf" для режима httpd-акселератораФайл "squid.conf" используется для установки и конфигурирования всех опций для вашего прокси-сервера Squid. В конфигурационном файле приведенном ниже, мы будем настраивать Squid на работу в режиме httpd- акселератора. В этом режиме, если Веб сервер запущен на том же сервере где Squid, то вы должны настроить демон на порт 81. В случае с веб сервером Apache, вы можете сделать это назначив вместо 80 порта 81 в файле "httpd.conf". Если Веб-сервер запущен на других серверах вашей сети, вы можете оставить тот же номер порта (80) для Apache, так как Squid подключен на другом IP адресе, где порт (80) не используется. ![]() Редактируйте файл squid.conf (vi /etc/squid/squid.conf) и добавьте/измените следующие опции: http_port 80 icp_port 0 acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 16 MB cache_dir ufs /cache 200 16 256 emulate_httpd_log on redirect_rewrites_host_header off replacement_policy GDSF acl all src 0.0.0.0/0.0.0.0 http_access allow all cache_mgr admin@openna.com cache_effective_user squid cache_effective_group squid httpd_accel_host 208.164.186.3 httpd_accel_port 80 log_icp_queries off cachemgr_passwd my-secret-pass all buffered_logs on Эти опции обозначают следующее: http_port 80 icp_port 0 acl QUERY urlpath_regex cgi-bin \? и no_cache deny QUERY cache_mem 16 MB cache_dir ufs /cache 200 16 256 emulate_httpd_log on redirect_rewrites_host_header off replacement_policy GDSF acl all src 0.0.0.0/0.0.0.0 and http_access allow all cache_mgr admin cache_effective_user squid и cache_effective_group squid httpd_accel_host 208.164.186.3 и httpd_accel_port 80 log_icp_queries off cachemgr_passwd my-secret-pass all buffered_logs on Конфигурация файла "/etc/squid/squid.conf" для режима кэширующего проксиВнеся небольшие изменения в файл "squid.conf", используемый для запуска Squid как http-акселератор, мы запустим его как кэширующий прокси сервер. Если Squid запущен как кэширующий прокси сервер, все пользователи вашей корпоративной сети смогут использовать его для доступа в интернет. В этой конфигурации, мы будем иметь полный контроль над проходящим трафиком и сможем определять политику просмотра, доступа и выкачивания. Вы также сможете контролировать использование полосы пропускания, времени соединения и т.д. Кэширующий прокси сервер может быть настроен на запуск как автономный сервер вашей корпорации или использование разделяемой иерархии кэшей с другими серверами в Интернет. В первом примере, приведенном ниже, мы покажем как настроить Squid как автономный сервер, а затем немного поговорим о конфигурации иерархических кэшей, где два или более серверов кооперируются для предоставления документов друг другу. ![]() Редактируйте файл squid.conf (vi /etc/squid/squid.conf) и добавьте/измените следующие опции для запуска кэширующего прокси сервера, как автономного сервера: http_port 8080 icp_port 0 acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 16 MB cache_dir ufs /cache 200 16 256 redirect_rewrites_host_header off replacement_policy GDSF acl localnet src 192.168.1.0/255.255.255.0 acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 443 210 119 70 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0 http_access allow localnet http_access allow localhost http_access deny !Safe_ports http_access deny CONNECT http_access deny all cache_mgr admin@openna.com cache_effective_user squid cache_effective_group squid log_icp_queries off cachemgr_passwd my-secret-pass all buffered_logs on Большие отличия от конфигурации для режима httpd-акселератора вносит использование списков контроля доступа (ACL). Эта возможность позволяет ограничивать доступ базируясь на исходном IP адресе (src), IP адресе получателя (dst), исходном домене, домене назначения, времени и т.д. Много типов контроля существует благодаря этой возможности и вы должны посмотреть оригинальный файл "Squid.conf" для получения полного списка. Ниже приведены четыре основных типа: acl имя тип данные | | | | acl some-name src a.b.c.d/e.f.g.h # ACL на основе IP адреса отправителя acl some-name dst a.b.c.d/e.f.g.h # ACL на основе IP адреса получателя acl some-name srcdomain foo.com # ACL на основе имени домена отправителя acl some-name dstdomain foo.com # ACL на основе имени домена назначения Как пример, ограничим доступ к вашему прокси серверу только вашими внутренними клиентами и определим диапазон портов к которым можно обращаться: acl localnet src 192.168.1.0/255.255.255.0acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 443 210 119 70 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0 http_access allow localnet http_access allow localhost http_access deny !Safe_ports http_access deny CONNECT http_access deny all Эти acl будут разрешать доступ всем внутренним клиентам из диапазона приватных адресов класса C 192.168.1.0; также разрешается доступ с IP адреса localhost (специальный IP адрес используемый для доступа к самому себе). Затем мы выбираем диапазон портов (80=http, 443=https, 210=wais, 119=nntp, 70=gopher и 21=ftp), к которым внутренние клиенты могут обращаться, мы запрещаем метод CONNECT для предотвращения попыток подключения внешних пользователей к прокси серверу, и в заключении мы запрещаем доступ со всех IP адресов. Многоуровневое Веб кэшированиеВторой метод работы кэширующего прокси это так называемый "Multi-level Web Caching", при котором вы сотрудничаете с большим числом других кэшей в Интрнет. В этом случае ваша организация использует кэши других прокси серверов и другие сервера используют ваш кэш. Следует заметить, что в этой ситуации, кэширующие прокси играют две различные роли в иерархии. Они могут быть настроены, как кэши, имеющие одного "родителя" (sibling) и иметь возможность выдавать документы, которые уже имеют, или настроены как родительские сервера и иметь возможность брать документы из других кэшей или непосредственно с серверов. ![]() ЗАМЕЧАНИЕ. Хорошей стратегией для предотвращения большого сетевого трафика при отсутствии веб кэширования будет настройка несколько sibling кэшей и только небольшого числа родительских кэшей. Настройка скрипта "/etc/rc.d/init.d/squid" для всех типов конфигурацийНастроим ваш скрипт "/etc/rc.d/init.d/squid" для запуска и остановки кэширующего прокси сервера Squid. Это скрипт изменит установки кэша подкачки на "/cache" вместо "/var/spool/squid". Создайте скрипт squid (touch /etc/rc.d/init.d/squid) и добавьте в него:
#!/bin/bash
# squid Этот скрипт отвечает за запуск и остановку
# Squid Internet Object Cache
#
# chkconfig: - 90 25
# описание: Squid - Internet Object Cache. Internet object caching - это путь
# для хранения запрошенных объектов из Интернет (например, данные
# доступные через протоколы HTTP, FTP и gopher) на системах находящихся
# ближе к требуемым серверам, чем организатор запроса. Веб броузеры могут
# затем использовать локальный кэш как прокси HTTP сервер, сокращая
# время доступа и сохраняя полосу пропускания.
# pid файл: /var/run/squid.pid
# конфигурационный файл: /etc/squid/squid.conf
PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Проверка, что сеть работает.
[ ${NETWORKING} = "no" ] && exit 0
# проверка наличия конфигурационного файла squid
[ -f /etc/squid/squid.conf ] || exit 0
# определения имени двоичного файла squid
[ -f /usr/sbin/squid ] && SQUID=squid
[ -z "$SQUID" ] && exit 0
# определения cache_swap каталога
CACHE_SWAP=`sed -e 's/#.*//g' /etc/squid/squid.conf | \
grep cache_dir | sed -e 's/cache_dir//' | \
cut -d ' ' -f 2`
[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/cache
# опции squid по умолчанию
# -D отключение проверки dns при инициализации. Если вы скорее всего
# не будете иметь соединения с Интернет во время старта squid,
# раскомментируйте это
#SQUID_OPTS="-D"
RETVAL=0
case "$1" in
start)
echo -n "Starting $SQUID: "
for adir in $CACHE_SWAP; do
if [ ! -d $adir/00 ]; then
echo -n "init_cache_dir $adir... "
$SQUID -z -F 2>/dev/null
fi
done
$SQUID $SQUID_OPTS &
RETVAL=$?
echo $SQUID
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
;;
stop)
echo -n "Stopping $SQUID: "
$SQUID -k shutdown &
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/$SQUID
while : ; do
[ -f /var/run/squid.pid ] || break
sleep 2 && echo -n "."
done
echo "done"
else
echo
fi
;;
reload)
$SQUID $SQUID_OPTS -k reconfigure
exit $?
;;
restart)
$0 stop
$0 start
;;
status)
status $SQUID
$SQUID -k check
exit $?
;;
probe)
exit 0;
;;
*)
echo "Usage: $0 {start|stop|status|reload|restart}"
exit 1
esac
exit $RETVAL
Сейчас, сделайте этот скрипт исполняемым и измените права доступа: [root@deep /]# chmod 700 /etc/rc.d/init.d/squidСоздайте символическую rc.d ссылку для Squid следующей командой: [root@deep /]# chkconfig --add squidПо умолчанию скрипт squid не будет автоматически запускать прокси сервер на Red Hat Linux, когда перезагружаете сервер. Вы можете изменить это следующей командой: [root@deep /]# chkconfig --level 345 squid onЗапустите ваш новый прокси сервер Squid вручную: [root@deep /]# /etc/rc.d/init.d/squid startStarting squid: init_cache_dir ufs... squid Конфигурация файла "/etc/logrotate.d/squid"Настроим ваш файл "/etc/logrotate.d/squid" для автоматической ротации файлов регистраций каждую неделю. Создайте файл squid (touch /etc/logrotate.d/squid) и добавьте в него: /var/log/squid/access.log {
weekly
rotate 5
copytruncate
compress
notifempty
missingok
}
/var/log/squid/cache.log {
weekly
rotate 5
copytruncate
compress
notifempty
missingok
}
/var/log/squid/store.log {
weekly
rotate 5
copytruncate
compress
notifempty
missingok
# This script asks squid to rotate its logs on its own.
# Restarting squid is a long process and it is not worth
# doing it just to rotate logs
postrotate
/usr/sbin/squid -k rotate
endscript
}
Главная > Операционные системы > UNIX > Linux |