Встановлення та налаштування локального кешуючого проксі сервера SQUID
В даній статті я опишу процес встановлення та налаштування локального кешуючого проксі-сервера. Налаштування доступу по MAC-адресах, та обмеження швидкості внутрішніми засобами проксі-сервера. Дана стаття буде наочним посібником, який можна буде використати на практиці, а також і допоможе мені згадати, як я це все робив років з 5 назад.
Всі дії будуть виконуватись на базовій системі Slackware 13.37. Я чомусь подружився з цією системою, напевно, за її класичність, а також за простоту. Тому встановлення всіх необхідних компонентів і програм я буду проводити з початкових кодів, які можна отримати з офіційних сайтів, в нашому випадку з www.squid-cache.org. Для тих хто працює з дистрибутивами rpm або deb сумісними встановлення усіх програм потрібно проводити з офіційного репозиторію, бо такі дистрибутиви, наскільки мені відомо, дуже болісно переносять встановлення програм з початкових кодів.
Отже, завантажуємо систему на якій будемо проводити усі налаштування, логінимся в обліковий запис не превілейованого користувача. Так як це в нас має бути сервер, то графічної оболонки на ньому не повинно бути. Далі нам потрібно отримати початкові коди squid'а.
Я користуюся зараз версією squid-3.0.STABLE26 тому, що в актуальній версії є проблеми із опцією cache_mem. В версіі 3.1, яка зараз актуальна, дана опція не працює, це я вияснив на офіційному сайті. Ця опція обмежує розмір оперативної пам'яті, яку може займати процес squid'а. Я пробував squid версії 3.1, встановив розмір пам'яті на позначці 700 Мб, але через декілька днів процес squid'а почав займати 1200 Мб RAM. Тому я користуюсь версією 3.0, яка коректно працює з цією опцією.
Для отримання початкових кодів самої програми виконуємо таку команду:
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE26.tar.gz
Даний архів буде збережено в тому каталозі з якого запущено дану команду. Після цього розпаковуємо архів:
tar -xzf squid-3.0.STABLE26.tar.gz
Заходимо в каталог squid-3.0.STABLE26
cd squid-3.0.STABLE26
Для того, щоб відкомпілювати потрібно спочатку сконфігурувати програму за допомогою команди configure, яку запускаємо в каталозі з початковими кодами . Щоб squid підтримував додаткові можливості, наприклад організацію доступів по МАС адресах, нам потрібно вказати додаткові параметри компіляції. Усі параметри компіляції можна побачити, виконавши команду configure -- help. Я компілюю сквід для своїх потреб з такими опціями:
configure --prefix=/usr/local/squid --enable-delay-pools --enable-icap-client --disable-wccp --disable-wccpv2 --enable-arp-acl --enable-ssl --enable-default-err-language=ukrainian
--prefix=/usr/local/squid - опція, яка задає шлях до каталогу в якому буде розміщено всі файли програми;
--enable-delay-pools - опція, яка вмикає функцію обмеження швидкості скачування для користувачів проксі сервера;
--enable-icap-client - дана опція вмикає механізм підтримки антивірусної перевірки трафіку (хоча для цього потрібно провести додаткові налаштування);
--disable-wccp --disable-wccpv2 - точно не скажу просто пам'ятаю, що десь читав, що потрібно збирати squid без підтримки даних протоколів;
--enable-arp-acl - дана опція вмикає механізм підтримки МАС адрес в правилах доступу до сервера;
--enable-ssl - підтримка захищеного з'єднання, яке не кешується, а лише перенаправляється на цільові сервери;
--enable-default-err-language=ukrainian - мова сторінок помилок, які будуть відображатися по замовчуванню.
Після того, як відпрацює команда configure можна виконати компіляцію і інсталяцію програми в каталог, який заданий опцією конфігурування --prefix. Для цього виконуємо :
make
Щоб проінсталювати програму потрібно виконати команду make, але перд цим потрібно отримати права превілейованого користувача root. В Slackware я користуюсь утилітою su, також можна скористатися sudo. Після отримання прав суперкористувача виконуємо інсталяцію:
make install
Коли відпрацюють дані команди можна приступати до налаштування нашого проксі серверу. Даний спосіб інсталяції програми за своєю суттю не є правильним, навіть для такого дистрибутиву як Slackware. Завжди потрібно користуватися пакетними менеджерами і ставити програми з репозиторіїв пакетів. Для Slackware також існують готові пакети squid'а, але вони можуть містити відмінні версії програми, тому я ставлю кальмара (Чому кальмар? Тому що в перекладі з англійської мови squid це кальмар. Тому далі по тексту я буду використовувати і такий вислів) таким чином з початкових кодів. Як створити пакет для Slackware я спробую колись описати. Усі файли програми у нас знаходяться в каталозі /usr/local/squid. Перше, що нам потрібно це відредагувати файл конфігурації squid'а squid.conf.default. Для цього виконуємо:
cp squid.conf.default squid.conf
Відповідним чином правим файл конфігурації. Ось мій робочий конфіг
#################################################################################
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/16
include /usr/local/squid/etc/mac1.txt
acl SSL_ports port 443 22
acl safe_ports port 22
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl FTP proto FTP
acl HTTPS proto HTTPS
acl icq_addr dst 64.12.0.0/16 205.188.0.0/16
acl icq_port port 5190 443
acl icq_domain dstdomain icq.com login.icq.com
http_access allow localnet CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet icq_addr icq_port HTTPS CONNECT
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 #опція яка задає порт з якого кальмар буде приймати запити. Я позамовчуванню використовую порт 3128;
hierarchy_stoplist cgi-bin ?
cache_mem 512 MB
cache_dir ufs /var/run/squid/cache 1024 16 256 #шлях до локального кешу, а також тут потрібно вказати розмір кешу в Мб (перша цифра), а також розмір першого і другого рівнів кешу (друга і третя цифри в прикладі);
access_log /var/run/squid/var/log/access.log squid #шлях до файлу логу кальмара де буде зберігатися статистика веб-запитів;
cache_log /var/run/squid/var/log/cache.log #шлях до файлу логу роботи самого кальмара;
cache_store_log none #не використовавати лог-файл кешованих об'єктів. При великих навантаженнях на сервер обробка цього файлу вимагає великих ресурсів під час старту сервера;
pid_filename /var/run/squid/var/log/squid.pid #шлях до PID файлу;
url_rewrite_program /usr/local/squidGuard/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
url_rewrite_children 50
url_rewrite_bypass on
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_effective_user nobody
cache_effective_group nobody
visible_hostname rm-proxy
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.rar$ .\zip$ .\avi$ .\flv$
acl class src 127.0.0.1 192.168.0.21-192.168.0.50 192.168.0.75-192.168.0.98 192.168.0.101-192.168.0.112 192.168.0.114-192.168.0.129 192.168.0.161-192.168.0.200 192.168.0.204-192.168.0.255
acl admin_class src 192.168.0.100 192.168.0.99 192.168.0.113 192.168.0.160
acl admin53 src 192.168.0.113
delay_pools 2
delay_class 1 2
delay_parameters 1 2000000/2000000 400000/400000
delay_access 1 allow class
delay_access 1 deny localnet
delay_access 1 deny all
delay_class 2 1
delay_parameters 2 700000/700000
delay_access 2 allow admin_class
delay_access 2 allow localnet
delay_access 2 deny all
snmp_port 0
icp_port 0
htcp_port 0
nonhierarchical_direct on
always_direct allow FTP
always_direct allow HTTPS
always_direct allow nocach
always_direct allow icq_domain icq_port CONNECT
always_direct allow icq_addr icq_port CONNECT
dns_nameservers 127.0.0.1
coredump_dir /var/run/squid/cache
##################################################################################
Далі необхідно створити відповідні каталоги де будуть розміщуватись кеш, логи і т.д.
Отже, завантажуємо систему на якій будемо проводити усі налаштування, логінимся в обліковий запис не превілейованого користувача. Так як це в нас має бути сервер, то графічної оболонки на ньому не повинно бути. Далі нам потрібно отримати початкові коди squid'а.
Я користуюся зараз версією squid-3.0.STABLE26 тому, що в актуальній версії є проблеми із опцією cache_mem. В версіі 3.1, яка зараз актуальна, дана опція не працює, це я вияснив на офіційному сайті. Ця опція обмежує розмір оперативної пам'яті, яку може займати процес squid'а. Я пробував squid версії 3.1, встановив розмір пам'яті на позначці 700 Мб, але через декілька днів процес squid'а почав займати 1200 Мб RAM. Тому я користуюсь версією 3.0, яка коректно працює з цією опцією.
Для отримання початкових кодів самої програми виконуємо таку команду:
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE26.tar.gz
Даний архів буде збережено в тому каталозі з якого запущено дану команду. Після цього розпаковуємо архів:
tar -xzf squid-3.0.STABLE26.tar.gz
Заходимо в каталог squid-3.0.STABLE26
cd squid-3.0.STABLE26
Для того, щоб відкомпілювати потрібно спочатку сконфігурувати програму за допомогою команди configure, яку запускаємо в каталозі з початковими кодами . Щоб squid підтримував додаткові можливості, наприклад організацію доступів по МАС адресах, нам потрібно вказати додаткові параметри компіляції. Усі параметри компіляції можна побачити, виконавши команду configure -- help. Я компілюю сквід для своїх потреб з такими опціями:
configure --prefix=/usr/local/squid --enable-delay-pools --enable-icap-client --disable-wccp --disable-wccpv2 --enable-arp-acl --enable-ssl --enable-default-err-language=ukrainian
--prefix=/usr/local/squid - опція, яка задає шлях до каталогу в якому буде розміщено всі файли програми;
--enable-delay-pools - опція, яка вмикає функцію обмеження швидкості скачування для користувачів проксі сервера;
--enable-icap-client - дана опція вмикає механізм підтримки антивірусної перевірки трафіку (хоча для цього потрібно провести додаткові налаштування);
--disable-wccp --disable-wccpv2 - точно не скажу просто пам'ятаю, що десь читав, що потрібно збирати squid без підтримки даних протоколів;
--enable-arp-acl - дана опція вмикає механізм підтримки МАС адрес в правилах доступу до сервера;
--enable-ssl - підтримка захищеного з'єднання, яке не кешується, а лише перенаправляється на цільові сервери;
--enable-default-err-language=ukrainian - мова сторінок помилок, які будуть відображатися по замовчуванню.
Після того, як відпрацює команда configure можна виконати компіляцію і інсталяцію програми в каталог, який заданий опцією конфігурування --prefix. Для цього виконуємо :
make
Щоб проінсталювати програму потрібно виконати команду make, але перд цим потрібно отримати права превілейованого користувача root. В Slackware я користуюсь утилітою su, також можна скористатися sudo. Після отримання прав суперкористувача виконуємо інсталяцію:
make install
Коли відпрацюють дані команди можна приступати до налаштування нашого проксі серверу. Даний спосіб інсталяції програми за своєю суттю не є правильним, навіть для такого дистрибутиву як Slackware. Завжди потрібно користуватися пакетними менеджерами і ставити програми з репозиторіїв пакетів. Для Slackware також існують готові пакети squid'а, але вони можуть містити відмінні версії програми, тому я ставлю кальмара (Чому кальмар? Тому що в перекладі з англійської мови squid це кальмар. Тому далі по тексту я буду використовувати і такий вислів) таким чином з початкових кодів. Як створити пакет для Slackware я спробую колись описати. Усі файли програми у нас знаходяться в каталозі /usr/local/squid. Перше, що нам потрібно це відредагувати файл конфігурації squid'а squid.conf.default. Для цього виконуємо:
cp squid.conf.default squid.conf
Відповідним чином правим файл конфігурації. Ось мій робочий конфіг
#################################################################################
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/16
include /usr/local/squid/etc/mac1.txt
acl SSL_ports port 443 22
acl safe_ports port 22
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl FTP proto FTP
acl HTTPS proto HTTPS
acl icq_addr dst 64.12.0.0/16 205.188.0.0/16
acl icq_port port 5190 443
acl icq_domain dstdomain icq.com login.icq.com
http_access allow localnet CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet icq_addr icq_port HTTPS CONNECT
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 #опція яка задає порт з якого кальмар буде приймати запити. Я позамовчуванню використовую порт 3128;
hierarchy_stoplist cgi-bin ?
cache_mem 512 MB
cache_dir ufs /var/run/squid/cache 1024 16 256 #шлях до локального кешу, а також тут потрібно вказати розмір кешу в Мб (перша цифра), а також розмір першого і другого рівнів кешу (друга і третя цифри в прикладі);
access_log /var/run/squid/var/log/access.log squid #шлях до файлу логу кальмара де буде зберігатися статистика веб-запитів;
cache_log /var/run/squid/var/log/cache.log #шлях до файлу логу роботи самого кальмара;
cache_store_log none #не використовавати лог-файл кешованих об'єктів. При великих навантаженнях на сервер обробка цього файлу вимагає великих ресурсів під час старту сервера;
pid_filename /var/run/squid/var/log/squid.pid #шлях до PID файлу;
url_rewrite_program /usr/local/squidGuard/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
url_rewrite_children 50
url_rewrite_bypass on
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_effective_user nobody
cache_effective_group nobody
visible_hostname rm-proxy
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.rar$ .\zip$ .\avi$ .\flv$
acl class src 127.0.0.1 192.168.0.21-192.168.0.50 192.168.0.75-192.168.0.98 192.168.0.101-192.168.0.112 192.168.0.114-192.168.0.129 192.168.0.161-192.168.0.200 192.168.0.204-192.168.0.255
acl admin_class src 192.168.0.100 192.168.0.99 192.168.0.113 192.168.0.160
acl admin53 src 192.168.0.113
delay_pools 2
delay_class 1 2
delay_parameters 1 2000000/2000000 400000/400000
delay_access 1 allow class
delay_access 1 deny localnet
delay_access 1 deny all
delay_class 2 1
delay_parameters 2 700000/700000
delay_access 2 allow admin_class
delay_access 2 allow localnet
delay_access 2 deny all
snmp_port 0
icp_port 0
htcp_port 0
nonhierarchical_direct on
always_direct allow FTP
always_direct allow HTTPS
always_direct allow nocach
always_direct allow icq_domain icq_port CONNECT
always_direct allow icq_addr icq_port CONNECT
dns_nameservers 127.0.0.1
coredump_dir /var/run/squid/cache
##################################################################################
Далі необхідно створити відповідні каталоги де будуть розміщуватись кеш, логи і т.д.
Comments
Post a Comment