Squid conf приклади з поясненнями російською. Встановлення та налаштування Squid на CentOS. Практична корисність Squid

Вступ

Багато адміністратори стикаються з проблемою розумного використання часу та каналу для виходу в мережу Інтернет, замислюються про можливість економії часу та грошей, про обмеження швидкості для окремих видів файлів або особистостей, зрештою про економію всього, що пов'язано з тими чи іншими аспектами виходу в Інтернет глобальну мережу.

Я, за допомогою цієї статті, спробую наочно і зрозуміло пояснити про налаштування найпоширенішого проксі сервера - Squid.

Початкові установки Squid для доступу користувачів

Ми не вдаватимемося в процес установки проксі сервера Squid, а перейдемо відразу до його настроювання.

Найпростіше, що нам після установки слід зробити, так це дозволити доступ користувачам нашої локальної мережі. І тому служать параметри http_port, http_access. Крім того, ми заведемо acl (список контролю доступу) для нашої локальної мережі.

І так, http_port нам потрібен остільки, оскільки наш проксі сервер Squid повинен обслуговувати тільки комп'ютери нашої локальної мережі та бути невидимим для зовнішнього світу, щоб унеможливити "поганим людям" зовнішньої мережі скористатися нашим каналом або трафіком, а у разі, якщо будуть виявлені " діри" в коді проксі сервера Squid, скористатися ними.

Параметр http_access використовується для дозволу або заборони доступу до певних ресурсів, певних адрес або з певних адрес, до певних сайтів, за певними протоколами, портами і всьому тому, що безпосередньо вказано за допомогою Acl (списків контролю доступу).

Таблиця N 1. Деякі підмережі.

Діапазон адрес

Повна форма

Коротка форма

192.168.0.1-192.168.0.254

192.168.0.0/255.255.255.0

192.168.0.0/24

192.168.20.1-192.168.20.254

192.168.20.0/255.255.255.0

192.168.20.0/24

192.168.0.1-192.168.254.254

192.168.20.0/255.255.0.0

192.168.20.0/16

10.0.0.1-10.254.254.254

10.0.0.0/255.0.0.0

10.0.0.0/8


Припустимо, що у Вас мережа з адресами від 192.168.0.1 до 192.168.0.254, тоді додамо новий Acl (див. таблицю N1):

Acl LocalNet src 192.168.0.0/24

Припустимо, що у Вас проксі-сервер Squid розташований за адресою 192.168.0.200 на порту 3128, тоді пишемо у файлі конфігурації:

Http_port 192.168.0.200:3128

Наступною нашою дією буде заборона використання нашого проксі сервера, крім користувачів нашої локальної мережі:

Http_access allow LocalNet
http_access deny all

В даному випадку слово allow є роздільною здатністю, а слово deny забороною, тобто ми дозволяємо доступ до проксі серверу Squid з адрес нашої локальної мережі і забороняємо доступ всім іншим.

Будьте уважні, вказуючи http_access, тому що Squid використовує їх у порядку вказівки Вами.

Вивчаємо ACL (Списки контролю доступу)

Система управління доступом у проксі сервері Squid є дуже гнучкою та великою. Вона складається з елементів зі значеннями та списків доступу із зазначенням allow (дозвіл) або deny (заборона).

Формат Acl наступний:

Acl ім'я елемент список

Формат списку доступу:

Http_access вказівка ​​имя_acl

Ми розглянемо деякі елементи, які дозволяє використовувати проксі-сервер Squid, звичайно ж з прикладами:

* acl ім'я src список

За допомогою цього елемента (src) ми вказуємо IP-адресу джерела, тобто клієнта від якого надійшов запит до нашого проксі-сервера.

У наступному прикладі ми дозволимо Васі Пупкіну (Pupkin) та відділу програмування (Progs) доступ до нашого проксі-сервера, а всім іншим заборонимо:

Acl Progs src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
http_access allow Progs
http_access allow Pupkin
http_access deny all

* acl ім'я dst список

Цей елемент (dst) вказує IP-адресу призначення, тобто IP-адресу того сервера, доступ якого хоче отримати клієнт проксі сервера.

У наступному прикладі ми заборонимо Васі доступ до підмережі 194.67.0.0/16 (наприклад, в ній знаходиться той самий aport.ru):

Acl Net194 dst 194.67.0.0/16
http_access deny Pupkin Net194

* acl ім'я dstdomain список

За допомогою цього елемента (dstdomain) ми вказуємо домен, доступ якого хоче отримати клієнт проксі сервера.

У наступному прикладі ми заборонимо Васі доступ до веб-сайтів nnm.ru і kpnemo.ru:

Acl SitesWarez dstdomain .nnm.ru .kpnemo.ru
http_access deny Pupkin SitesWarez

Якщо необхідно вказати домен джерела, використовуйте srcdomain.

* acl ім'я [-i] srcdom_regex список
* acl ім'я [-i] dstdom_regex список

Дані елементи відрізняються від srcdomain і dstdomain лише тим, що в них використовуються регулярні вирази, які в даній статті ми не розглядаємо, але приклад наведемо:

Acl SitesRegexSex dstdom_regex sex
Acl SitesRegexComNet dstdom_regex .com$ .net$
http_access deny Pupkin SitesRegexSex
http_access deny Pupkin SitesRegexComNet

У цьому прикладі ми заборонили доступ Пупкіну Василю на всі домени, що містять слово sex і всі домени в зонах.com і.net.

Ключ -i покликаний ігнорувати регістр символів у регулярних виразах.

* acl ім'я [-i] url_regex список

За допомогою цього елемента (url_regex) ми вказуємо шаблон для URL.

Приклад вказівки файлів з розширенням avi, що починаються слово sex:

Acl NoAviFromSex url_regex -i sex.*.avi$

У випадку, якщо Ви бажаєте вказати шаблон тільки для шляху URL, тобто виключаючи протокол та ім'я хоста (домена), використовуйте urlpath_regex.

Приклад для вказівки музичних файлів:

* acl имя_acl port список

Вказує номер порту призначення, тобто порт, до якого бажає підключитися клієнт нашого проксі сервера.

Як приклад, заборонимо всім використання програми Mirc через наш проксі-сервер:

Acl Mirc port 6667-6669 7770-7776
http_access deny all Mirc

* acl имя_acl proto список

Вказує протокол передачі.

Як приклад, заборонимо вищезгаданому Васі використання протоколу FTP через наш проксі-сервер:

Acl ftpproto proto ftp
http_access deny Pupkin ftpproto

* acl имя_acl method список

Вказівка ​​методу http запиту клієнтом (GET, POST).

Візьмемо ситуацію, коли слід заборонити Васі Пупкіну переглядати його пошту на сайті mail.ru, але при цьому дозволити прогулюватися сайтом без заборон, тобто заборонити Васі можливість увійти до своєї поштової скриньки через форму входу на сайті:

Acl SiteMailRu dstdomain .mail.ru
acl methodpost method POST
http_access deny Pupkin methodpost SiteMailRu

Обмеження користувачів

Досить часто в нашій країні виникає ситуація, що каналу доступу до глобальної мережі Інтернет на всіх користувачів не вистачає і виникає бажання дати кожному по максимуму, але при цьому не дати каналу "загнутися" через любителів завантажувати файли.

Засоби проксі-сервера Squid дозволяють цього досягти кількома шляхами:

    перший шлях – це оптимізація кешування об'єктів;

    другий - це обмеження за часом певних користувачів, що зовсім коректно;

    Третій шлях полягає в обмеженні швидкості для певних типів файлів, користувачів та всього того, що визначено нами через Acl.

Обмеження за часом

Обмежити користувачів за часом можна так:

Acl ім'я часу чч:мм-ЧЧ:ММ

Де день: M – Понеділок, T – Вівторок, W – Середа, H – Четвер, F – П'ятниця, A – Субота, S – Неділя.

При цьому чч:мм має бути меншим за ЧЧ:ММ, тобто можна вказати з 00:00-23:59, але не можна вказати 20:00-09:00.

Давайте заборонимо все тому ж Вам мати доступ в мережу Інтернет з 10 до 15 годин кожен день:

Acl TimePupkin time 10:00-15:00
http_access deny Pupkin TimePupkin

Якщо хочеться дозволити Васі користуватися програмою Mirc з 13 до 14 години, то пишемо:

Acl TimePupkin time 13:00-14:00
http_access allow Pupkin TimePupkin Mirc
http_access deny Pupkin Mirc

А що робити, якщо необхідно заборонити чи дозволити у певні дні тижня? Squid також дозволяє це зробити, наприклад з 13 до 14 у понеділок та в неділю:

Acl TimePupkin time MS 13:00-14:00

Як бачите, нічого складного у цьому немає.

Обмеження за швидкістю

Регулювання швидкості в проксі-сервері Squid здійснюється за допомогою пулів. Пул - це свого роду барило з пивом, в яке пиво постійно заливають до країв, а клієнти наливають у свої склянки або інші ємності для подальшого внутрішнього споживання при необхідності через свої персональні крани.

Пули регулюються за допомогою трьох параметрів: delay_class, delay_parameters, delay_access. Кількість пулів зазначається за допомогою параметра delay_pools.

Пули можуть бути трьох класів:

    Весь потік пива обмежений одним краном (на всю мережу).

    Весь потік пива обмежений одним краном, але при цьому кран поділяється на підкранчики (кожний IP).

    Весь потік пива обмежений одним краном, але кран ділиться на підкранчики (підмережі), які також діляться на міні кранчики (на кожен IP).

Формати:

Delay_pools кількість_оголошених_пулів
delay_access номер_пула дія ім'я_acl

Дія може бути allow (дозволити) і deny (заборонити). При цьому даний пул діє на тих, кому він дозволений і не діє на тих, кому він заборонений. У випадку, якщо зазначено allow all, а потім deny Pupkin, то на Пупкіна даний клас все одно подіє, т.к. IP-адреса Пупкіна оголошена в acl Pupkin, входить до списку адрес acl all. Майте це на увазі.

Delay_class номер_пулу клас_пулу
delay_parameters номер_пулу параметри

Параметри відрізняються залежно від класу пулу:

для першого класу:

Delay_parameters 1 байт_на_всю_мережу

для другого класу:

Delay_parameters 1 на всю мережу на клієнта

для третього класу:

Delay_parameters 1 на_всю_мережу на_підмережу на_клієнта

Наприклад, у нас канал на 128 Кбіт (в середньому 15 Кбайт в секунду) і ми бажаємо Васе (Pupkin) дати всього 4 Кбайта/сек (на все про один маленький бокальчик), відділу програмування (Prog) дати всього 10 Кбайт/ сек і на кожного всього по 5 Кб/сек (всього два бокальчики), решту обмежити в 2 Кбайта/сек на кожного і 10 Кб/сек на всіх, а файли mp3 (media) обмежити в 3 Кбайта в секунду на всіх (на всю бочку пива такий маленький кран). Тоді пишемо:

Acl Prog src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
acl LocalNet src 192.168.0.0/255.255.255.0
acl media urlpath_regex -i .mp3$ .asf$ .wma$

Delay_pools 4
# спочатку обмежимо mp3
delay_class 1 1
delay_parameters 1 3000/3000
delay_access 1 allow media
delay_access 1 deny all
# обмежимо бідного Васю
delay_class 2 1
delay_parameters 2 4000/4000
delay_access 2 allow Pupkin
delay_access 2 deny all
# обмежимо відділ програмування
delay_class 3 2
delay_parameters 3 10000/10000 5000/5000
delay_access 3 allow Prog
delay_access 3 deny all
а тепер обмежимо інших (другий клас пулу)
delay_class 4 2
delay_parameters 4 10000/10000 2000/2000
delay_access 4 deny media
delay_access 4 deny Pupkin
delay_access 4 deny Prog
delay_access 4 allow LocalNet
delay_access 4 deny all

Часто виникає питання, а як краще використовувати такий малий канал, щоб він автоматично ділився між усіма тими, хто в даний момент що-небудь завантажує? На це питання є однозначна відповідь - засобами проксі сервера Squid цього зробити неможливо, але все-таки зробити можна:

Delay_class 1 2
delay_parameters 1 -1/-1 5000/15000
delay_access 1 allow LocalNet
delay_access 1 deny all

Таким чином ми виділяємо на всю нашу мережу і на підмережі максимальний канал (-1 означає необмеженість), а кожному користувачеві даємо швидкість максимум 5 Кб/сек після того, як він скачає на максимальній швидкості перші 15 Кбайт документа.

Таким чином, клієнт не з'їсть весь канал, але досить швидко отримає перші 15 Кбайт.

Оптимізуємо кешування об'єктів у Squid

Існує безліч типів файлів, які оновлюються мало часто, щоб дозволити проксі серверу реагувати на заголовки від вебсерверів про те, що даний об'єкт не підлягає кешування або він був напрочуд щойно змінений. Це досить часто ситуація.

Для вирішення таких ситуацій покликаний параметр refresh_pattern у файлі налаштувань проксі-сервера Squid, але повністю з формулами тощо. ми його не розглядатимемо.

Refresh_pattern [-i] рядок МІНВ відсоток МАКСВ параметри

Цей параметр використовується для того, щоб визначити вік об'єкта (вважайте файлу) у кеші, чи потрібно його оновлювати чи ні.

МІНВ (мінімальний час) - час у хвилинах, коли об'єкт, що є в кеші, вважається свіжим.

МАКСВ (максимальний час) – максимальний час у хвилинах, коли об'єкт вважається свіжим.

Параметри - це один або кілька таких параметрів:

    override-expire - ігнорувати інформацію про закінчення свіжості об'єкта та використовувати МІНВ.

    override-lastmod - ігнорувати інформацію про дату зміни файлу використовувати МІНВ.

    reload-into-ims - замість запиту клієнтського запиту "не кешувати документи" (no-cache) посилати запит "Якщо змінено з" (If-Modified-Since)

    ignore-reload – ігнорувати запити клієнтів "не кешувати документи" (no-cache) або "перезавантажити документ" (reload).


І так ми підійшли до найголовнішого. Ну, так які ж типи файлів найрідше оновлюються? Як правило, це різноманітні музичні файли та картинки.

Встановимо свіжість об'єктів, для цього для картинок і музичних файлів вкажемо, скажімо так для прикладу, цілих 30 днів (43200 хвилин):

Refresh_pattern -i .gif$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .png$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .jpg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .jpeg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .pdf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .zip$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .tar$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .gz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .tgz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .exe$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .prz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .ppt$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .inf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .swf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .mid$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .wav$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i .mp3$ 43200 100% 43200 override-lastmod override-expire

Показані вище настройки лише приклад, для того, щоб була зрозуміла суть.

Тепер можете перевірити ефективність свого проксі сервера, вона точно зросте.

Висновок

Проксі сервер Squid не є лише поширеним проксі сервером, є й інші. Але як показує статистика, більшість використовують саме цей проксі-сервер, але при цьому все одно у багатьох початківців виникають проблеми з налаштуванням.

Опис параметрів конфігураційного файлу Squid.conf

Squid.confце файл конфігурації проксі-сервера Squid.
Стаття дає опис параметрів squid.confне пов'язуючи їх між собою.
Приклад робочого файлу конфігурації наведено у статті про Squid.

Опис параметрів файлу

# /etc/squid/squid.conf: файл конфігурації проксі-сервера Squid http_port 192.168.0.1:3128 - де знаходиться проксі hierarchy_stoplist cgi-bin? | acl QUERY urlpath_regex cgi-bin \? | no_cache deny QUERY |-> заборона кешування файлів, що знаходяться в каталозі cgi-bin cache_mem 64 MB - обсяг пам'яті під кешування (наприклад 1/3 ОЗУ) maximum_object_size 10240 KB - максимальний розмір кешованого об'єкта cache_dir ufs /var2 місцезнаходження та структура кеша squid cache_access_log /var/log/squid/access.log - місцезнаходження файлу конфігурації cache_mgr [email protected] сайт - e-mail адміністратора cache_store_log none - заборона створення файлу реєструючий видалення та переміщення об'єктів в кеш # cache_store_log /var/log/squid/store.log реєстрації доменних імен замість ip (знижує продуктивність) emulate_httpd_log on - дозвіл створення файлів реєстрації squid у форматі apache cache_effective_user proxy cache_effective_group proxy тільки через squidGuard ##url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf # дозвіл використання squidGuard redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf - дозвіл використання squidGuard redirect_chi кількість одночасно працюючих користувачів з редиректором auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours 0 20% 4320 # блок визначення імена списків acl all src 0.0.0.0/0.0.0.0 # визначення методу елемента acl для методу PURGE (очищення кешу) #ident_lookup on #acl allowed_users myuser root #acl aclname ident myuser root #ac root acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl localnet src 192.168.0.0/255.255.255.0 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 70 210 1025-65535 280 488 591 777 # відкриті порти, опис див. нижче acl CONNECT method CONNECT # визначення методу елемента acl для методу CONNECT acl our_networks src 192.168.0.0/24 acl limited src 192.168.5.5.5.5.5.5.5.5.5. .255.255 acl god src 192.168.0.2/255.255.255.255 acl poor_urls url_regex -i "/etc/squid/poor/urls" #acl poor_path urlpath_regex -i "/etc/s etc/squid/good/urls" acl good_path urlpath_regex -i "/etc/squid/good/path" acl squidGuard src 192.168.0.31/255.255.255.255 #redirector_access allow squidGuard # блок налаштування правил доступу http_access allow manager localhost - дозвіл доступу групі manager за протоколом з localhost # правило 2: налаштовуємо порти і метод підключення # правило 3: група full http_access deny! Safe_ports - заборона звернення до небезпечних портів http_access deny CONNECT !SSL_ports - заборона звернення до портів, що не використовуються SSL, за допомогою методу CONNECT #http_access deny CONNECT # заборона методу CONNECT http_access deny manager #http_access deny to_localhost # http локальної машини # http_access allow localnet - дозвіл доступу до squid з усієї локальної мережі http_access allow god all - групі god дозволено все http_access allow full all !poor_urls - групі full дозволяємо вихід скрізь крім поганих сайтів http_access allow limited good_urls скрізь крім дозволених сайтів http_access deny all - заборона доступу для всіх хостів http_reply_access allow all icp_access allow all visible_hostname gw - ім'я шлюзу для звітів refresh_pattern [-i] regex min percent max- встановлення правил вилучення об'єкта з кешу у зв'язку з його старінням у кеші де regexреєстрозалежна маска об'єкта у вигляді регулярного вираження [-i]вказівка ​​ігнорування регістру для regex minмінімальний час (у хвилинах) для об'єктів, яким воно не встановлено явно, протягом якого вони (об'єкти) вважаються "свіжими". Рекомендоване значення 0. Збільшення цього значення може спричинити помилки - видачі об'єкта з кеша, тоді як клієнту він потрібен актуальний у цей конкретний час. percentвідсоток від віку об'єкта (час минулий з останньої зміни) протягом якого об'єкт вважається " свіжим " . maxмаксимальний час (у хвилинах) для об'єктів, яким воно не встановлено явно, протягом якого вони (об'єкти) вважаються "свіжими". додаткові параметри правила override-expireвикористовувати встановлений мінімальний час "свіжості" об'єктів, якщо сервер надсилає заголовок Expires, тобто. що об'єкт застарів. Використання цієї опції ПОРУШУЄ стандарт HTTP. Включно з цією опцією, ви берете на себе відповідальність за можливі проблеми. override-lastmodвикористовувати встановлений мінімальний час "свіжості" об'єктів, які були змінені нещодавно. reload-into-imsзмінює клієнтські запити "no-cache" або "reload" на "If-Modified-Since". Використання цієї опції ПОРУШУЄ стандарт HTTP. Включно з цією опцією, ви берете на себе відповідальність за можливі проблеми. ignore-reloadігнорування заголовків клієнтів "no-cache" або "reload". Використання цієї опції ПОРУШУЄ стандарт HTTP. Включно з цією опцією, ви берете на себе відповідальність за можливі проблеми. ignore-no-cacheігнорувати заголовки "Pragma: no-cache" та "Cache-control: no-cache" прийняті від сервера. HTTP RFC ніколи не дозволяло використовувати Pragma заголовки серверами. Це дозволяється лише клієнтам, але сервери все одно надсилають ці заголовки. ignore-privateігнорувати заголовки "Cache-control: private", прийняті від сервера. Використання цієї опції ПОРУШУЄ стандарт HTTP. Включно з цією опцією, ви берете на себе відповідальність за можливі проблеми. ignore-authкешувати відповіді на запити авторизації, якщо зовнішній (оригінальний) сервер надіслав заголовок "Cache-control: public" у відповіді. Використання цієї опції ПОРУШУЄ стандарт HTTP. Включно з цією опцією, ви берете на себе відповідальність за можливі проблеми. Правила refresh_pattern проходять по порядку зверху донизу. Перший збіг і буде використовується. Якщо збігів не знайдено, будуть використовуватися параметри за замовчуванням.

Оновлюємо систему:

Додаємо правило до firewalld:

firewall-cmd --permanent --add-port=3128/tcp

* де 3128 — порт, на якому буде налаштовано наш проксі-сервер.

і перезапускаємо firewalld:

firewall-cmd --reload

Встановлення та налаштування Squid

Встановлюємо проксі-сервер наступною командою:

yum install squid

І відкриваємо на редагування конфігураційний файл:

vi /etc/squid/squid.conf

Якщо мережа клієнтських комп'ютерів відрізняється від стандартної (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необхідно додати її до acl, наприклад:

acl localnet src 217.66.157.0/24

або через файл:

acl localnet src "/etc/squid/acl_localnet"

* лапки обов'язкові
** після необхідно створити файл /etc/squid/acl_localnetі з кожного рядка перерахувати дозволені IP-адреси.

Щоб дозволити весь трафік, додаємо наступний рядок:

http_access allow all

* Важливо, щоб вона була вище забороняючої http_access deny all

Налаштовуємо директорію для кешу:

cache_dir ufs /var/spool/squid 4096 32 256

* де ufs- файлова система (ufs для SQUID є найбільш підходящою); /var/spool/squid- Директорія зберігання кешу; 4096 - Обсяг простору в мегабайтах, який буде виділено під кеш; 32 — кількість каталогів першого рівня, яка буде створена для розміщення кешу; 256 — кількість каталогів другого рівня, яка буде створена для розміщення кешу.

Тепер створюємо структуру папок під кеш наступною командою:

І вже можна запускати squid:

systemctl start squid

Не забуваймо дозволити його автозапуск:

systemctl enable squid

Перевірка

Заходимо в налаштування браузера та настроюємо використання проксі-сервера. Наприклад, у Mozilla Firefox налаштування потрібно виставити такими:

* де 192.168.163.166 - IP-адреса мого проксі-сервера.

Тепер відкриваємо сайт 2ip.ru. Після його завантаження ми побачимо зовнішню IP-адресу - вона повинна відповідати тій мережі, від якої працює налаштована SQUID.

Прозорий проксі

Прозорий проксі дозволяє автоматично використовувати проксі-сервер, не настроюючи при цьому браузер комп'ютера. Користувачі можуть навіть не знати, що трафік проходить через squid.

vi /etc/squid/squid.conf

Знаходимо рядок:

І наводимо її до такого вигляду:

http_port 3128 transparent

І перезавантажуємо squid:

systemctl restart squid

Squid + HTTPS

Спеціально налаштовувати https для squid у CentOS 7 мені не довелося – все запрацювало за замовчуванням.

Авторизація за логіном та паролем

Відкриваємо конфігураційний файл:

vi /etc/squid/squid.conf

Вставляємо наступне:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/auth_users
auth_param basic children 25
auth_param basic realm SQUID PROXY
auth_param basic credentialsttl 3 години
acl auth_users proxy_auth REQUIRED

* де /usr/lib64/squid/basic_ncsa_auth- розташування ncsa_auth (залежно від системи може бути в іншому каталозі); /etc/squid/auth_users- файл з логінами та паролями; children 25дозволяє 25 одночасних підключень; SQUID PROXY- Довільна фраза для вітання; credentialsttl 3 годинибуде тримати сесію 3 години, після буде потрібно повторне введення логіна та пароля.

http_access deny !Safe_ports

Додаємо:

http_access allow auth_users

Створюємо файл з користувачами та створюємо першу пару логіну та паролю:

htpasswd -c /etc/squid/auth_users user1

* якщо система поверне помилку « bash: htpasswd: command not found» встановимо htpasswd командою yum install httpd-tools

Створюємо другого користувача:

htpasswd /etc/squid/auth_users user2

І перезавантажуємо squid:

systemctl restart squid

Вихідний мережний інтерфейс

На нашому сервері може бути кілька зовнішніх IP-адрес. За промовчанням всі вихідні запити будуть працювати через інтерфейс зі шлюзом за промовчанням. Щоб мати можливість роботи зі squid через різні інтерфейси в налаштування вносимо.

Squid - це повнофункціональна програма кешируючого проксі сервера, яка надає сервіси кешування та проксі для HTTP, FTP та інших популярних мережевих протоколів. Squid може здійснювати кешування та проксіювання SSL запитів та кешування результатів DNS пошуку, а також виконувати прозоре кешування. Squid також підтримує широкий набір кешуючих протоколів, таких як ICP (кешуючий протокол), HTCP (гіпертекстовий кешуючий протокол), CARP (протокол кешування маршрутизації) і WCCP (кешуючий протокол перенаправлення контенту).

Проксі сервер Squid - це чудове рішення широких вимог до кешируючого і проксі сервера, яке масштабується для мереж від рівня регіонального офісу до корпорації, коли забезпечується розширюваний механізм контролю доступу і відстеження критичних параметрів через протокол SNMP. Коли вибираєте комп'ютерну систему для використання в якості Squid проксі або сервера кеші, переконайтеся, що ваша система оснащена великою кількістю оперативної пам'яті, оскільки Squid підтримує кеш в пам'яті для збільшення продуктивності.

Встановлення

У терміналі введіть наступну команду для встановлення сервера Squid:

Sudo apt-get install squid

Налаштування

Squid налаштовується редагуванням директив, які містяться в конфігураційному файлі /etc/squid/squid.conf. Наступні приклади ілюструють деякі директиви, які можуть бути змінені на вплив на поведінку сервера Squid. Для більш глибокого налаштування Squid дивіться розділ .

Перш ніж редагувати конфігураційний файл, вам варто зробити копію оригінального файлу та захистити її від перезапису, щоб у вас завжди залишалися оригінальні налаштування як довідник та для повторного використання при необхідності.

Скопіюйте файл /etc/squid/squid.conf і захистіть його від запису наступними командами в терміналі:

Sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original sudo chmod a-w /etc/squid/squid.conf.original

1. Для налаштування вашого сервера Squid на прослуховування порту 8888 замість стандартного 3128 змініть директиву http_portяк показано тут:

Http_port 8888

2. Змініть директиву visible_hostnameдля того, щоб надати серверу Squid певне ім'я хоста (hostname). Це ім'я необов'язково має бути ім'ям хоста комп'ютера. У прикладі воно визначено як weezie:

Visible_hostname weezie

3. Використовуючи контроль доступу Squid, можна настроїти, щоб використання інтернет сервісу проксі було доступне тільки користувачам з певних IP адрес. Наприклад, ми проілюструємо доступ користувачів лише з підмережі 192.168.42.0/24:

ACL

Acl fortytwo_network src 192.168.42.0/24

http_accessвашого файлу /etc/squid/squid.conf:

Http_access allow fortytwo_network

4. Використовуючи чудові можливості контролю доступу Squid, ви можете налаштувати можливість використання інтернет-сервісу проксі лише у звичайні робочі години. Наприклад, ми покажемо як налаштувати доступ співробітників, які працюють з 9:00 до 17:00 з понеділка по п'ятницю з підмережі 10.1.42.0/24:

Додайте наступне до кінця секції ACLвашого файлу /etc/squid/squid.conf:

Acl biz_network src 10.1.42.0/24 acl biz_hours time M T W T F 9:00-17:00

Потім додайте наступне на початок секції http_accessвашого файлу /etc/squid/squid.conf:

Http_access allow biz_network biz_hours

Після внесення змін до файлу /etc/squid/squid.conf збережіть його і перевантажте програму сервера squid, щоб зміни набрали чинності наступною командою в терміналі: sudo /etc/init.d/squid restart

Налаштування проксі-сервера Squid

Дуже часто нам потрібний проксі. Наприклад, у вас сірий IP або ви щасливий користувач супутникового інтернету. Завантажити щось із сайтів подібних до Rapidshare нереально. Тут нас і врятує squid.

Для встановлення proxy необхідний сервер віртуалізації KVM. На інших віртуалізаціях розміщення proxy-серверів заборонено.

Більш розширений варіант моєї статті можна знайти на сайті Курського LUG, де я також розглянув можливість використання squid домашніми користувачами, а також інтеграцію системи стиснення трафіку Globax або Toonel каскадом в squid.

Установка squid

cd /usr/ports/www/squid && make BATCH=yes install

Налаштування squid

Трохи про acl та правила

Серцем конфігурування squid є acl(access control list) та правила.
Спочатку треба засвоїти принципи роботи acl. ACL мають такий формат:

Acl<имя> <тип> <содержание>

Наприклад цей acl описує дві машини з айпишниками (тип src) 192.168.0.1 і 192.168.0.2

Acl comps src 192.168.0.1/32 192.168.0.2/32

Тепер розглянемо правила.
Правила мають наступний формат:

<тип_правила> <действие>

На цьому етапі треба засвоїти те, що правила одноготипу перевіряються до першогоправила, що виконується. Дія цього правила буде виконано, і перевірку подальших правил цього буде зупинено. Приклад:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access allow vasya http_access deny all

Правила типу http_accessце правила, що дозволяють або забороняють доступ по http. Розглянь дію вищезгаданого уривка. acl all вказує нам на всі IP-адреси. А acl vasya вказує на один ip 192.168.1.12
Перевірка проходитиме так:
1) http_access allow vasya Якщо через проксі сидить користувач з цього IP-адреси то дозволимо йому доступ. Перевірку буде зупинено, четвертий рядок навіть не буде перевірено.
2) якщо проксі використовує користувач не з цього айпі, то правило на рядку 3 не виконається і ми перейдемо до правила на рядку 4. Оскільки під acl all підходить будь-який айпі, це правило виконається і ми заблокуємо доступ. подальші правила перевірятися не будуть. Таким чином ми заборонили користуватися проксі всім крім Васі.

Розглянемо часту помилку на основі минулого прикладу:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access deny all http_access allow vasya

У цьому випадку навіть Вася не зможе скористатися проксі. Оскільки правилом на рядку 3 ми заблокували доступ всім, воно виконалося, і правило на рядку 4 навіть не перевірятиметься. Уважно слідкуйте за порядком правил одного типу.

Створюємо конфіг squid

Приступимо до написання конфіга. Розберу з прикладу свого конфіга.

Для початку у папці /etc/squid створимо папку acls. У ній я створив 3 файли: banners, nobanners, 1banners
У файлі banners зберігаються регулярні вирази реклам та банерів які будуть вирізані. У nobanners зберігаються винятки, тобто ті сторінки та картинки які будуть вантажитися навіть якщо в banners є правило, під яке вони потрапляють. У файлі 1banners зберігаються регулярні вирази, що описують ті банери, які будуть вирізатися в першу чергу. Зміст своїх файлів фільтрації реклами наведу в кінці статті.

З root правами створимо файл /etc/squid/squid.conf і починаємо додавати до нього рядки:

Вкажемо порт на якому буде працювати проксі: (УВАГА!! Ніколи не ставте стандартні порти на кшталт 8080 80 або 3128 якщо не хочете, щоб ваш проксі легко можна було виявити)

Http_port 1234

Вкажемо ім'я нода на якому стоїть squid. Дізнатися своє ім'я можна виконавши uname -n

Visible_hostname dimon4eg

Відключимо icp

Icp_port 0

Через acl з регулярними виразами вкажемо сторінки, які не будуть кешуватися

Acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache

Створимо папку /var/spool/squid та зробимо chmod 777 /var/spool/squid
Опишемо об'єм "швидкого" кешу та кешу на жорсткому диску. Об'єм швидкого кешу рекомендується ставити не більше 32 метрів для збереження оперативної пам'яті.

Cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256

Аналогічно створимо папки /var/log/squid і вкажемо, де зберігати логи

Cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log

Таблиця mime та pid процесу

Mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid

Налаштування фтп через проксі

Ftp_user [email protected] ftp_list_width 32 ftp_passive on ftp_sanitycheck on

Службові acl

Acl all src 0/0 acl SMTP port 25

Список айпі, з яких дозволено проксі. Обов'язково вказати 127.0.0.1 та адресу сервера в локалці. Далі вкажемо всіх користувачів, хто має доступ. (УВАГА, обов'язково відключіть доступ всім будь-кому.)

Acl doallow src 192.128.0.2/32 127.0.0.1/32

Задамо порти які дозволені

Acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443563 5190 5552 acl Safe_ports port 777

Розташування файлів із правилами вирізування реклами. Ключ -i означає зробити правила не чутливими до регістру

Acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"

Тепер опишемо правила

Http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all

Заборонимо доступ icp

Icp_access deny all

Програми

Повний текст мого squid.conf

http_port 1234 visible_hostname dimon4eg icp_port 0 acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache
cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log
mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid
ftp_user [email protected] ftp_list_width 32 ftp_passive on ftp_sanitycheck on
acl server src 192.168.0.2/32
acl all src 0/0 acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 563 acl SMTP port 25
acl doallow src 192.128.0.2/32 127.0.0.1/32
acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443563 acl Safe_ports port 777 acl CONNECT method CONNECT
acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"
http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all
icp_access deny all
never_direct allow all

Мої правила для нарізки реклами

/etc/squid/acls/banners

.?(count(\d|er|\.rbc)|hitbox|advertising|linkexchange|click\d|\dcount|adriver) .*(/ad(s|v)|\.adnet\.ru|banview| banner|adriver|\dcount|bnr|bans\.|/sale|/pagead) .*exaccess\.ru/asp/. .*(spylog|warlog\.info|ipz.ru/cgi-bin/cm\.cgi\?|c\.mystat-in\.net|c\.bigmir\.net|online\.mirabilis|top\ .winrate\.net|vipelita\.ru|cnews\.ru.*/informres).* .*(brs\.trilan\.ru/images|google-analytics\.com|/informer|bantex\.ru| 100-100\.ru).*.?(hotlog|tours|sharereactor|&rand=|livejournal\.com/userpic).* ^(www\.)?ad\d?\..*. rambler\.ru/upl.* .*s1\.adward\.ru/\?r.* .*(bhanvad)\.com.* .*(dosugonline|blogonline|all-web|otvali|loveplanet|ziza| body\.imho|meganame)\.ru.* .?(clx|gold-music)\.ru/.* .*(nnm.ru|rambler|realcoding|kpnemo\.ru/advimg).*\.swf .*/ad?.* .?re(k|c)lama.* .^(www\.)?(1001tur|jmp\.net|kmindex.ru/.*/\?|kreis\.trl\. ru|rot\.goup\.ru/\?|au-au\.ru).* .?r\.mail\.ru/b.*\.swf .?bs\.yandex\.ru/show. * .?br\.gcl\.ru/cgi-bin/br.* .?m1.nedstatbasic.net/basic.js .*\.doubleclick\.net .*an.yandex.ru/* .*/adserver /*