Інші матеріали у категорії Linux. Кешируючий прозорий анонімний проксі сервер Squid

У цій статті наводиться приклад швидкого налаштуваннякешируючого проксі сервера Squid в Linux Debian 6. Результатом налаштування стане можливість виходу в Інтернет через даний серверза протоколами: http, https та ftp.

Відразу зазначу, що отриманий сервер не є мережевим фільтромі потенційно вразливий для мережевих атак.
Налаштування сервера здійснюється на базі ОС Linux Debian 6. Всі команди, що наводяться нижче, повинні виконуватися з правами суперкористувача (root).

Відразу важливе попередження: авторизація та прозорий проксі несумісні! Доведеться вибирати щось одне. Друге попередження: авторизація через проксі дозволить обмежити доступ до Інтернету лише за протоколом HTTP. Інші протоколи: FTP, SMTP, POP3 та інші спокійно продовжуватимуть працювати через NAT. Хоча в невеликих організаціяхце не настільки критично, що найбільш вживаним (і зловживаним) є саме протокол HTTP, і одним із завдань адміністратора є обмеження доступу співробітників до інтернету саме через браузер.

Якщо Ви користуєтеся програмою Apteture із завантаженням пакетів із мережі, рекомендую перед інсталяцією оновити списки актуальних пакетів:

# apt-get update

Запускаємо установку Squid:

# apt-get install squid3

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

cp /etc/squid/squid.conf /etc/squid/squid.conf.original

і вичавимо з оригінальної конфігурації все, не закоментоване:

cat /etc/squid/squid.conf.original | grep -v "^\(#\|$\)" > /etc/squid/squid.conf

У результаті отримаємо дефолтний конфігчик без нічого нішнього. Але все ж таки дуже раджу кинути погляд в оригінальний конфіг і почитати його на дозвіллі - там дуже багато цікавого!

Ну, нарешті, приступимо до редагування:

nano /etc/squid/squid.conf

Після встановлення, потрібно невелике налаштування. Відкриваємо в редакторі конфігураційний файл Squid, який повинен розміщуватись у /etc/squid/squid.conf. У цьому файлі знаходимо рядки:

Acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16

Ці рядки потрібно закоментувати. І додати свій рядок із параметрами власної локальної мережі. Повинно вийти так:

# acl localnet src 10.0.0.0/8
# acl localnet src 172.16.0.0/12
# acl localnet src 192.168.0.0/16
acl localnet src 192.168.1.0/24 # Власна локальна мережа

В останньому рядку замість 192.168.1.0/24 потрібно встановити параметри Вашої мережі.

Трохи нижче коментарів # TAG: http_access необхідно знайти рядок:

Http_access allow localhost
або
http_access allow manager localhost

Відразу після цього рядка додаємо рядок:

Http_access allow localnet
cache_dir ufs /var/cache/squid 2048 16 256
mkdir -p /var/cache/squid
chmod 755 -R /var/cache/squid

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

# /etc/init.d/squid restart

Якщо після рестарту squid у вас вилізе помилка (WARNING cache_mem is larger than total disk cache space!) просто зменшіть значення параметра cache_mem 8 MB я поставив 32

Якщо Ви з конфігураційного файлу внесли зміни з помилок, то Squid має успішно перезавантажитись. При виникненні помилки можна дізнатися, через що вона сталася в Log-файлі: /var/log/squid/cache.log
Налаштування браузера на роботу через Proxy-сервер

У даному варіантіНалаштування наш сервер не може автоматично маршрутизувати запити мережі на порт проксі сервера. Тому браузерам потрібно вказувати явно адресу нашого сервера.

Важливо, щоб проксі-сервер у локальній мережі мав фіксована IP-адреса. Припустимо, що це 192.168.1.1. Наприклад, для налаштування Internet Explorerпотрібно відкрити Сервіс-Властивості браузера-Підключення-Налаштування мережі. У вікні поставити галочку в полі Використовувати проксі-сервер для локальних підключень. Поставити галочку на Не використовувати проксі-сервер для локальних адрес. У полі Адреса введіть IP-адресу нашого проксі сервера: 192.168.1.1. У полі Порт ввести порт Squid за замовчуванням: 3128.

Після цих налаштувань Ваш браузер виходитиме в мережу через наш новий проксі-сервер. В інших оглядачах налаштування аналогічне наведеному вище для Microsoft Internet Explorer.

Порт проксі-сервера можна змінити на свій розсуд у файлі /etc/squid/squid.conf. Він заданий у рядку:

http_port 3128 transparent

Висновок
Встановлення та налаштування кешируючого проксі сервера на базі Squid це лише перший етап у створенні продуктивного шлюзу в Інтернет. Трохи пізніше я розповім, як налаштувати «Прозорий проксі сервер», Firewall і як можна вести статистику відвідувань користувачами сайтів користувачами локальної мережі.

Дуже важливо правильно налаштувати iptables. Другий варіант трохи нижче, мені він більше до вподоби

На цьому кроці я пропоную Вам створити скрипт налаштування, оскільки він стане у нагоді як універсальний засіб.1 # vim ./setiptables.sh

#!/bin/bash
LAN=$1
WAN=$2
IP=$3
GW=$4
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j DNAT --to $IP:3128
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i $WAN -o $LAN -s $GW/24 -p tcp -m multiport --dport 443,21,22 -j ACCEPT
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1

Ми окреслили змінні (для зручності), 3 правила для таблиці NAT та 1 для FORWARD.
Порти 443,21,22 пускаємо в обхід проксі сервера.
Крім налаштувань iptablesУ цьому скрипті ми включаємо форвардинг пакетів.
Запускаємо так:1

# sh ./setiptables.sh eth0 eth1 192.168.100.1 192.168.100.0

6) Налаштуємо автозавантаження натсроек iptables.
Збережіть налаштування iptables.

# mkdir -p /usr/local/iptables && iptables-save > /usr/local/iptables/session.ipt

Додаємо команду автозапуску /etc/rc.local (мені подобається Perl але тут кому як).

# perl -i -pe "print "iptables-restore< /usr/local/iptables/session.ipt\n" if $. == 2" /etc/rc.local

Також не забуваємо про форвардинг пакетів

# perl -i -pe "print "sysctl -w net.ipv4.ip_forward=1\n" if $. == 3" /etc/rc.local

Другий варіант налаштування firewall iptables

Включимо у системі форвардинг. У файлі /etc/sysctl.conf розкоментуємо рядок

net.ipv4.ip_forward=1

Отже, на поточний моментми маємо повністю скинуті налаштування файрвола (iptables).

Скидаємо ланцюжки:

$ sudo iptables -F
$ sudo iptables -F -t nat
Забороняємо всі вхідні та дозволяємо всі вихідні та форвардинг:
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
Дозволяємо приймати відповідь на ВЖЕ встановлену сполуку:
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Дозволяємо loopback-трафік:
sudo iptables -A INPUT -i lo -j ACCEPT
Дозволяємо весь трафік з нашої внутрішньої мережі(Візьмемо підмережу 222):
sudo iptables -A INPUT -s 192.168.222.0/24 -i eth1 -j ACCEPT
І, запорука прозорості! Перенаправляємо весь вихідний http-трафік (на порт 80) на порт Сквіда 3128:
iptables -t nat -A PREROUTING -s 192.168.222.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.222.0/24 -o eth0 -j SNAT --to-source 192.168.56.39

Перевіряємо на клієнта інтернет. Нагадаю, якщо проксі вказувати не обов'язково, шлюз виставити необхідно!
Однак, після першого ж перезавантаження, ми зрозуміємо, що всі наші старання пішли даремно.
Навчимо ж їх виживанню!
Отже, збережемо все те, чим ми тут займалися:

iptables-save > /etc/firewall.conf

У мене з судно цей фінт не вийшов (хоча теоретично начебто повинен…), тому можна зробити влогінившись в рута повністю (su) і запустивши команду, але без sudo.
А тепер створимо скрипт, що змушує ifupdown воскрешати наш файрвол:

nano /etc/network/if-up.d/00-iptables

Впишемо в нього таке:

#!/bin/sh
iptables-restore< /etc/firewall.conf

Виставимо права на виконання:

chmod +x /etc/network/if-up.d/00-iptables

Загалом налаштування прозорого проксі сервера закінчено, але щоб логи читалися, нам необхідно відключити підтримку ipv6 (через те, що ipv6 у нас не налаштований на адаптері буде багато warnings).

Відключаємо IPv6 якщо хтось не використовує

Пропоную знову ж таки зробити скрипт щоб не заплутатися.
nano ./ipv6disable.sh

#!/bin/bash
perl -i -pe "print "alias net-pf-10 ipv6 off\n" if $. == 17" /etc/modprobe.d/aliases.conf
perl -i -pe "print "alias net-pf-10 off\n" if $. == 18" /etc/modprobe.d/aliases.conf
perl -i -pe "print "alias ipv6 off\n" if $. == 19" /etc/modprobe.d/aliases.conf
echo 1 | tee /proc/sys/net/ipv6/conf/all/disable_ipv6
echo "blacklist ipv6" | tee -a /etc/modprobe.d/blacklist.conf
STR=$(cat /boot/grub/grub.cfg | sed -n "67p")
STR=$(STR)" ipv6.disable=1"
sed "67d" /boot/grub/grub.cfg > /boot/grub/grub.cfg.backup
cp /boot/grub/grub.cfg.backup /boot/grub/grub.cfg
sed -i 67i "$STR" /boot/grub/grub.cfg

У загальних рисахщо у цьому скриптику відбувається:
Спершу відключаємо пожжержку ipv6 у модулях ядра.
Далі вказуємо маркер /proc на не використання ipv6.
І в 67 рядку /boot/grub/grub.cfg дописуємо параметр ipv6.disable=1.
Така канитель з tee і sed потрібна для того, щоб зберегти налаштування /boot/grub/grub.cfg, тому що там пристрої позначаються не /dev/sd* і UUID.
Хоча все можна дописати ручками.
Тепер нам треба прикрутити squidguard
Отже, половина роботи вже зроблена, тепер залишилося встановити пакет SquidGuard та налаштувати його. Для встановлення пишемо в терміналі з під користувача root (права rootу Debian GNU/Linux можна отримати командою su, в Ubuntu перед командами пишемо sudo):

apt-get install squidguard

Після встановлення скачаємо чорні списки blacklists комадної wget з терміналу (увага, розмір файлу 24 Мб!):
wget -c my_blacklists.tar.gz

І розпакуємо його в каталог, де повинні розміщуватися бази SquidGuard (необхідні права адміністратора):

tar zxvf my_blacklists.tar.gz -C /var/lib/squidguard/db

В результаті розпакування з'явиться каталог /var/lib/squidguard/db/my, що містить безліч підкаталогів різних категорій зі списками доменів та адрес небажаних сайтів. Цей список був складений нами на основі трьох чорних списків, завантажених з сайтів http://www.squidguard.org, http://www.shallalist.de та http://www.urlblacklist.com. В результаті наш список містить понад 3 мільйони сайтів.

Тепер необхідно налаштувати зв'язку Squid та SquidGuard та підключити до них чорні списки. Для цього до файлу squid.conf дописуємо наступні рядки, відкривши файл у редакторі nano з правами адміністратора:

nano /etc/squid/squid.conf

Додаємо рядки до кінця файлу:

Redirector_bypass on
redirect_program /usr/bin/squidGuard
redirect_children 1

mv /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf_original

Завантажуємо файл конфігурації squidGuard.conf з нашого сайту командою wget у терміналі:
wget -c squidGuard.conf

Копіюємо його на місце старого файлу (з правами адміністратора):

cp squidGuard.conf /etc/squid/squidGuard.conf

Після копіювання файлу конфігурації ініціюємо конвертування текстових чорних списків, які ви завантажили та розпакували, у формат баз даних Berkeley DB (команда буде виконуватись деякий час – потрібно дочекатися повного закінчення), виконавши команду від адміністратора:

squidGuard -d -C all

Якщо все зроблено правильно, то після команди в терміналі буде видаватися безліч повідомлень про створення нових файлів баз, і наприкінці їхньої черги ви побачите щось подібне:

2012-03-16 12:51:53 squidGuard 1.4 started (1331887787.768)
2012-03-16 12:51:53 db update done
2012-03-16 12:51:53 squidGuard stopped (1331887913.657)

Що скаже про успішне завершення створення баз чорних списків. Далі задаємо права сервера Squid на файли баз, виконавши команду з правами адміністратора:

chown -R proxy:proxy /var/lib/squidguard/db/

І рестартуємо сервер Squid, виконавши в Debian від root:

/etc/init.d/squid3 restart

Після рестарту в результаті спільної праці Squid і SquidGuard буде працювати перенаправлення з небажаних сайтів на сайт. Замість неї ви можете поставити будь-яку іншу сторінку, змінивши адресу останнього рядкафайл конфігурації /etc/squid/squidGuard.conf.

Зміна записів у списках доменів та URL
приклад. Поруч із файлом domains.db у папці /var/lib/squiguard/db/напрямок створюємо файл domains.diff. До нього заносимо рядок або кілька рядків, по одному на кожний запис:

Сайт (що означає викреслити цей домен із бази)
або +sysadmin -komi.ru (що означає додати цей домен до бази)

Даємо команди:

(оновити бази db з файлів diff. У логах squidguard"а можна подивитися скільки додалося/зменшилося.)

$ squid3 -k reconfigure

(перечитати налаштування без перезапуску.)
Файл domains.diff видаляти або прати з нього записи не треба. При глобальному оновленні баз цей файл стане в нагоді. І при багаторазовому оновленні не відбувається дублювання записів у БД.

Ви можете створювати свої правила редагування, додаючи або виключаючи категорії небажаних сайтів. На жаль, стовідсоткового захисту неможливо одержати, т.к. нові сайти з небажаним змістом з'являються постійно. Навіть якщо постійно оновлювати списки blacklists. Якщо вам потрібен сильний захист, то SquidGuard можна налаштувати на роботу з білим списком дозволених сайтів, заборонивши все інше – але тоді буде обмежений набір сайтів.

І лишився один момент! Поставимо статистику хто що куди і чому, на ім'я sarg

apt-get install sarg

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

Підганяємо конфігурацію (/etc/squid/sarg.conf) під себе. Ось головні рядки, куди слід звернути увагу:

Access_log /var/log/squid/access.log
...
output_dir /var/www/squid-reports
...
charset UTF-8

Створюємо останній каталог, якщо його немає.
Запускаємо сарж (непогано було б його запуск штовхнути в крон, тут я не описуватиму... поки що)

Ура! Заходимо зсередини мережі на наш сервер, милуємось звітами за адресою http://IP_SERVER/squid-reports/
Усі хлопці готові. Запитуватимуть питання, допоможу чим зможу.

Доброго часу, шановні читачіта гості! З цієї статті я почну опис роботи кешируючого проксі-сервера SQUID. Ця стаття здебільшого буде вступна теоретична.

Що таке проксі-сервер і що таке squid

Почну з основ. squidє кешуючим проксі серверомдля HTTP, FTP та ін. протоколів. Проксі-сервер для HTTP- це програма, що виконує HTTP-запити від імені клієнтської програми (будь то браузер або інший софт). Proxy може бути кешируючимабо не кешуючим. Кешируючий,відповідно, зберігає всі запити в якесь сховище для більш швидкої віддачі клієнтам, а не кешуючий- Просто транслює HTTP, ftp або інші запити. Раніше, кешування трафіку дозволяло досягти досить значної економії трафіку, але в час, що налаштовує, зі зростанням швидкостей інтернету це трохи втратило актуальність. Проксі сервера можна вибудовувати в ієрархіїдля обробки запитів При цьому, проксі сервера взаємодіють між собою по протоколу ICP.

Squidрозроблений і може працювати на більшості операційних систем(як unix, і windows). Ліцензується під ліцензією GNU GPL. Здатний обробляти та кешувати HTTP, FTP, gopher, SSL і WAIS (прибрано в 2.6) запити, а також DNS. Найбільш часті запитизберігає в оперативної пам'яті. На даний момент існують 2 стабільні версії squid: 2.7 і 3.1 . З відзнаками можна ознайомитись у посиланнях наприкінці статті. Усі залежності при встановленні з пакетів у них однакові. Конфігураційний файлверсії 2 сумісний з версією 3, але до 3 версії додані нові параметри. У статті я розглядатиму версію squid3. Варто також помітити, що якщо встановлювати squid3, то він свої конфігураційні файли буде тримати в /etc/squid3, а також логі за замовчуванням в squid3 лежать у каталозі /var/log/squid3/, а не /var/log/squid/, як "люблять рахувати" багато аналізаторів логів.

Купу раз згадано слово " кешуванняА що ж це, власне, таке - кешування? Це спосіб зберігання об'єктів з Інтернетуна сервері, що знаходиться ближче до комп'ютера, що запитує, ніж вихідний. Інтернет-об'єкт - це файл, документ або відповідь на звернення до будь-якого сервісу, що надається в Інтернет (наприклад, FTP, HTTP, або gopher). Клієнт запитує інтернет-об'єкт із кешу проксі-сервера; якщо об'єкт ще не кешований, проксі-сервер отримує об'єкт (або від вузла мережі вказаного за запитаним адресою URL, або від батьківського або сусіднього кеша) та доставляє його клієнту.

Режими роботи проксі-сервера Squid

Проксі-сервер Squid може працювати в наступних трьох основних режимах:

Прозорий режим

У цьому режимі HTTP з'єднанняздійснюване клієнтами перенаправляється на проксі-сервер без їхнього відома чи явної конфігурації. У цьому режимі не потрібне налаштування клієнтів. Недоліки даного способу : потрібна конфігурація NAT та перенаправлення трафіку, автентифікація клієнтів не працює, не перенаправляються FTP та HTTPS запити.

Аутентифікуючий режим

Для роботи в цьому режимі клієнти мають бути налаштовані для роботи з проксі-сервером (у налаштуваннях з'єднання має бути прописана адреса проксі-сервера). Може виконуватися автентифікація та авторизація клієнтів через Kerberos, Ldap, NTLM, IP та Radius. Можлива побудова взаємодії з серверами Microsoft Active Directoryшляхом аутентифікації клієнтів – членів домену, використовуючи протокол Kerberos, та подальшої авторизації членів груп домену, використовуючи LDAP у прозорому режимі (користувач вводить свій пароль лише при реєстрації в домені). Для авторизованих груп можливе застосування різних налаштуваньконтролю доступу та QoS (delay pools).

Зворотний проксі-сервер

Проксі-сервер кешує вихідні дані. Зворотний проксі-сервер Squid отримує дані від сервера HTTP від ​​імені клієнта і передає їх назад клієнту (наприклад, в Інтернет). Цей режим дозволяє здійснити:

  • Використання кешування, яке знижує навантаження на сервер HTTP;
  • Розподіл навантаження між серверами HTTP;
  • Маскування HTTP серверівта їх характеристик;
  • Запобігання web атак на сервері.

Схеми режимів роботи SQUID

transparent режим

зворотний режим

режим аутентифікації

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

Установка SQUID

Перед установкою та налаштуванням squid необхідно і переконатися, що машина, на якій буде працювати squid має доступ у зовнішню мережута клієнти, які будуть використовувати цей проксі мають доступ до даної машини. Установка проксі-сервера squid як і іншого програмного забезпечення в Linux можлива у різний спосіб, описаними у статті . Я торкнуся способу встановлення з репозиторію в Debian. Отже, для установки squid необхідно встановити пакет squid3, для цього виконати таку команду:

Gw ~ # aptitude install squid3 Наступні НОВІ пакети будуть встановлені: libltdl7(a) squid-langpack(a) squid3 squid3-common(a) 0 пакетів оновлено, 4 встановлено нових, 0 пакетів відмічено для видалення та 0 пакетів не оновлено. Необхідно отримати 2157 kB архівів. Після розпакування 10,3 МБ буде зайнято. Бажаєте продовжити? y Отримати:1 http://ftp.ru.debian.org/debian/ squeeze/main libltdl7 i386 2.2.6b-2 Отримати:2 http://ftp.ru.debian.org/debian/ squeeze/main squid- langpack all 20100628-1 Отримати:3 http://ftp.ru.debian.org/debian/ squeeze/main squid3-common all 3.1.6-1.2+squeeze2 Отримати:4 http://ftp.ru.debian.org /debian/ squeeze/main squid3 i386 3.1.6-1.2+squeeze2 Отримано 2 157 kБ за 9с (238 kБ/с) Вибір раніше не вибраного пакету libltdl7. (Читання бази даних... наНаразі

встановлено 41133 файлу та каталогу.) Розпаковується пакет libltdl7 (з файлу.../libltdl7_2.2.6b-2_i386.deb)... Вибір раніше не вибраного пакета squid-langpack. Розпаковується пакет squid-langpack (з файлу.../squid-langpack_20100628-1_all.deb)... Вибір раніше не вибраного пакета squid3-common. Розпаковується пакет squid3-common (з файлу.../squid3-common_3.1.6-1.2+squeeze2_all.deb)... Вибір раніше не вибраного пакета squid3. Розпаковується пакет squid3 (з файлу.../squid3_3.1.6-1.2+squeeze2_i386.deb)... Обробляються тригери для man-db ... Налаштовується пакет libltdl7 (2.2.6b-2) ... Налаштовується пакет squid-langpack (20100628-1) ... Налаштовується пакет squid3-common (3.1.6-1.2+squeeze2) ... Налаштовується пакет squid3 (3.1.6-1.2+squeeze2) ... Creating Squid HTTP proxy 3.x spool directory structure 2012/02/15 21:29:41 | Creating Swap Directories Restarting Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x cache structure... (warning). 2012/02/15 21:29:43 | Creating Swap Directories. Як видно, при встановленні пакета була спроба створеннякаталогу кешу squid, Але т.к. він не налаштований, то випало попередження. Так само, додано в автозавантаження, запущено та приймає підключенняна всіх інтерфейсах . Але т.к. він не налаштований, доступ до інтернет-сторінок через сервер обмежений.Конфіг Сквіда розташований в/etc/squid3/squid.conf

Gw ~ # grep -v ^# /etc/squid3/squid.conf | grep -v ^$ acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports port 443 acl Safe_ports port # 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 # gm afe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT метод 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 deny all http_port 31 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_ 0 20% 4320

Як видно, у конфігурації за промовчанням проксі-сервер працює і дозволяє звернення тільки з адрес 127.0.0.0/8. Слід уважно переглянути весь список і закоментувати рядки з портами сервісів, що не потрібні або не використовуються. Більше розуміння цього конфігу буде після прочитання наступних розділів. Т.о. якщо ми запустимо консольний браузер lunx із зазначенням нашого проксі, то зможемо побачити задану сторінку:

Gw~## запускаємо бреузер із зазначенням сторінки ya.ru: gw~# http://proxy=http://127.0.0.1:3128 lynx ya.ru : gw ~ # cat /var/log/squid3/access.log 1329527823.407 110 127.0.0.1 TCP_MISS/200 9125 GET http://ya.ru/ - DIRECT/93.158.134.203 text/html

Деякі параметри в конфігураційному файлі squid можуть використовуватися кілька разів (наприклад acl). Деякі параметри, що особливо мають одне значення, можуть використовуватися лише один раз. При цьому при використанні такого параметра 2 і більше разів - буде використано останнє значення. Наприклад:

Logfile_rotate 10 # Кілька значень - кінець буде дорівнює 5 logfile_rotate 5

Управління squid

Параметри, з якими було зібрано squid Вашого дистрибутива, можна подивитися командою squid3 -v. Наприклад, у Debian squeezу squid зібрано з параметрами, наведеними нижче:

Prefix=/usr - префікс для інших ключів: --mandir=$(prefix)/share/man - каталог зберігання man-сторінок --libexecdir=$(prefix)/lib/squid3 - каталог з модулями, що виконуються (в тому числі і хелпери) --sysconfdir=/etc/squid3 - каталог зберігання конфігурації --with-logdir=/var/log/squid3 - каталог зберігання журналів та багато інших. ін...

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

Опис налаштувань squid3почну з основних налаштувань, які бажано зробити при налаштуванні будь-якої конфігурації проксі-сервера. Конфіг сквіда розташований в /etc/squid3/squid.conf, це основний файл конфігурації, в якому містяться всі налаштування. (В дистрибутиви Debianта RedHat також при запуску проглядаються параметри зі стартових файлів налаштувань /etc/default/squid3і /etc/sysconfig/squid3відповідно). Так само, я згадував, що там понад 5 тисяч рядків і що одразу рватися налаштовувати щось не розібравшись – не варто. Синтаксис конфіга squid3класичний: рядки з # - це коментарі, параметри є рядками " параметр значенняКонфігураційний файл розбитий на розділи для зручності, але важливо пам'ятати, що розбір параметрів проводиться "згори вниз" в порядку черговості. Також, за допомогою параметра includeможна підключати зовнішні конфігураційні файли.

За промовчанням дозвіл імені вузла, на якому працює Squid, відбувається за допомогою gethostname(),залежно від установок DNS, він іноді не може однозначно визначити ім'я, яке фігуруватиме в журналах та висновках про помилки “ Generated … by server.com (squid/3.0.STABLE2)”. Для коректного запису імені хоста необхідно це ім'я (FQDN??) занести до параметра:

Visible_hostname myproxy

За замовчуванням squid приймає підключення на всіх інтерфейсах. Якщо у нас сервер одним із мережевих інтерфейсівдивиться в зовнішній світбажано обмежити підключення тільки на інтерфейсі локальної мережі (припустимо, 10.0.0.10/24). За це відповідає параметр http_port:

Http_port 10.0.0.10:3128

Як працюють дані параметри можна побачити у наступному лістингу:

Gw~## перевіряємо роботу демона до налаштування: gw~#netstat-antp | grep squ tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 25816/(squid) gw ~ # # внесені зміни: gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.2. # # перечитуємо змінений конфіг gw ~ # /etc/init.d/squid3 reload Reloading Squid HTTP Proxy 3.x configuration files. done. gw~## перевіряємо роботу із зміненим конфігом: gw~#netstat -antp | grep squ tcp 0 0 10.0.0.10:3128 0.0.0.0:* LISTEN 25816/(squid)

Як видно, тепер демон працює лише на інтерфейсі заданої мережі. Варто також відзначити, що нові версії squid (<3.1) поддерживают задание нескольких параметров http_port. При этом, у разных параметров могут быть указанны дополнительные ключи такие как intercept, tproxy, accel и др., например:

Gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 http_port 10.0.0.10:3129 tproxy

Дані параметри задають режим роботи проксі-сервера. Наприклад tproxy (старий синтаксис - transparent) задає режим . Дані режими гідні окремих статей і в майбутньому, можливо, буде розглянуто.

Тепер необхідно налаштувати клієнтський комп'ютер та користуватися інтернетом. Але за замовчуванням доступ доступний лише з локалхосту і при спробі доступу до веб користувач отримає помилку "Доступ заборонено". У лозі /var/log/squid3/access.log буде приблизно таке повідомлення:

1329649479.831 0 10.0.1.55 TCP_DENIED/403 3923 GET http://ya.ru/ - NONE/- text/html

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

Налаштування доступу squid

Фактично налаштування доступуполягає в опис об'єктадоступу через параметр acl, а потім дозволіабо заборону роботиописаному об'єкту acl за допомогою параметра "http_access". Найпростіший формат даних налаштувань має такий вигляд:

Acl имя_списка тип_відбору характеристики_типу_відбору

де acl- Параметр описує список контролю доступу, ім'я якого задається значенням ім'я_списку. Ім'я чутливе до регістру літер. тип_відборузадає тип, якому відповідатиме задана далі характеристика_типу_відбору. Ця характеристика може набувати таких часто використовуваних значень, як src(Від source) - джерело запиту, dst- адреса призначення, arp- МАС-адреса, srcdomainі dstdomain- доменне ім'я джерела та призначення відповідно, port- порт, proto- Протокол, time- час та багато інших. Відповідно, значення характеристики_типу_відборуформуватимуться в залежності від типу_відбору.

Можна вказувати кілька рядків acl з однаковими іменами та типами_відбору, у такому разі дані acl будуть об'єднані в один список з логічною операцією АБО. Наприклад:

Acl site dstdomain site.com acl site dstdomain site.org # аналогічний запису: acl site dstdomain site.com site.org

Словами це звучить так: до списку доступу з ім'ям site належать усі запити, надіслані на сайт site.com АБО site.org. Крім того, імена_спаска чутливі до регістру, тобто acl site і acl Site це два різних списки доступу.

Коли списки доступу сформовані, за допомогою параметра http_accessдозволяємо або забороняємо доступ вказаному ACL. Загальний формат виклику такий:

Http_access allow|deny [!]ім'я_списку

де, http_access- Параметр задає наступне правило дозволу ( allow) або заборони ( deny) доступ, вказаному далі імені_списку. При цьому, необов'язковий знак оклику інвертує значення імені списку. Тобто при знаку оклику значення імені_спискузвучатиме як всі, крім тих, хто належить даному списку. Крім того, можна задавати кілька списків через пропуск, тоді доступ буде дозволено за умови належності до всіх заданих списків. При цьому всі дозволяючі правила необхідно вказувати до всіх правил, що забороняють:

Http_access deny all

Може виникнути резонне запитання: навіщо задавати це правило, якщо ми, наприклад, дозволимо доступ до Сквід тільки обраним acl? Адже решта, хто не потрапляє в цей acl, отже "проходить повз"... Все просто. За замовчуванням, squid використовує дозвіл/забороняюче правило протилежне останньому. Наприклад:

# у нас є єдине дозвільне правило для деякого acl user: http_access allow user # якщо при доступі до squid клієнт не потрапив у цей acl, то до нього буде застосовано дію deny. # А якщо ми маємо два правила http_access allow user http_access deny user2 # і клієнт не входить ні в acl user, ні в acl user2, то до нього застосовується allow. # Тобто дія протилежна останньому http_access deny user2

Це, як кажуть - основи основ. Давайте розглянемо найпростіший приклад. Припустимо, у нас є 2 мережі 10.0.1.0/24 та 10.0.0.0/24, а також хост 10.0.4.1, яким необхідно дозволити доступ до інтернету. Для дозволу доступу необхідно створити опис нового списку доступу в розділі "ACCESS CONTROL" файлу squid.conf:

Acl lan src 10.0.1.0/24 10.0.0.0/24 acl lan src 10.0.4.1

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

Gw ~ # # створимо окремий каталог для зберігання списків доступу gw ~ # mkdir /etc/squid3/acls/ gw ~ # # занесемо наші підмережі та хости в окремий файл gw ~ # vim /etc/squid3/acls/lan.acl gw ~ # cat /etc/squid3/acls/lan.acl 10.0.1.0/24 10.0.0.0/24 10.0.4.1 gw ~ # # опишемо створений файл у конфізі (шлях необхідно укласти в лапки) gw ~ # grep lan.acl /etc /squid3/squid.conf acl lan src "/etc/squid3/acls/lan.acl"

Дозволимо створеному списку доступу lan доступ в інтернет і скажемо сквіду перечитати конфігураційний файл:

Gw ~ # grep lan /etc/squid3/squid.conf | grep acce http_access allow lan gw ~ # service squid3 reload Reloading Squid HTTP Proxy 3.x configuration files. done.

Підводячи невеликий підсумок цього розділу, двома словами можна сказати, що acl ідентифікує Web запит, а http_access дозволяє або забороняє ідентифікований запит. Тепер наші локальні клієнти з радістю користуються інтернетом, попередньо налаштувавши браузер!

Налаштування параметрів кешу squid

Важливим моментом налаштування squid є налаштування параметрів кешування в squid. Місце розміщення кешу задається параметром cache_dirу squid.conf. Формат параметр наступний:

Cache_dir тип шлях розмір L1 L2

де, тип- це алгоритм формування кешу, можливо: ufs (unix file system), aufs (async ufs), diskd(Зовнішні процеси для уникнення блокування squid на дисковому вводі/виводі). Рекомендується використовувати ufsхоча деякі хвалять aufs. Шлях- Задає місце розміщення кеша у файловій системі (має існувати і мати права доступу на запис для користувача, під яким працює squid - зазвичай proxy). Розмір- Вказує максимальний розмір, після якого кеш почне очищатися. У мережі існує безліч холіварів за цим параметром. Ідеальний розмір кешу – від 2 до 10 ГБ залежно від кількості клієнтів. Приблизно 1 ГБ кешу на кожні 100 тисяч запитів/день. Я дотримуюсь значення 5 Гб. У Squid кожен об'єкт, що кешується, розташовується в окремому файлі, самі файли не звалюються в одне місце, а використовується дворівнева ієрархія каталогів. Кількість каталогів 1 та 2 рівнів та визначають параметри L1 та L2. Ці значення можна залишити за замовчуванням. Але для орієнтування у ситуації наведу цитату з bog.pp.ru:

Експеримент показав, що при кеші 700 МБ використовується тільки 2 директорії першого рівня. Тобто при стандартній структурі директорій кеша в нього "з комфортом" влазить мільйон об'єктів (9 GB), якщо їх більше, то треба збільшити кількість директорій верхнього рівня

Можна використовувати декілька cache_dir. Це позитивно позначається на продуктивності, особливо якщо розмістити кеш на різних дисках. Ще більше прискорити роботу кешу можна, розмістивши кеш у tmpfs. Для кожного параметра cache_dirможна в розділі optionsвизначити параметр read-only (тільки читання) та max-size (максимальний розмір об'єкта).

Максимальний розмір об'єкта в кеші визначається параметром maximum_object_size, значення за промовчанням - 4 Мб. Я це значення збільшив до 60 Мб, т.к. співробітникам у локальній мережі часто доводиться завантажувати однотипні файли до вказаного розміру:

Maximum_object_size 61440 KB

Аналогічно? є та параметр minimum_object_sizeвідповідальний за мінімальний розмір об'єкта, за умовчанням його значення "0", тобто вимкнено. Я рекомендую значення цього параметра збільшити до 2-3 Кб, що зменшить навантаження на диск під час пошуку маленьких об'єктів.

Обсяг ОЗУ, що використовується сквідом задається в параметрі cache_mem, значення за промовчанням 256 Мб (у версії 3.1). Це значення я залишив за замовчуванням. Змінювати це значення варто лише у тому випадку, якщо сквід вас про це попросить у логах. Після цих змін необхідно перезапустити сквід, при цьому буде створено структуру каталогів:

Gw ~ # service squid3 start Starting Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x cache structure ... (warning). 2012/02/19 22:58:21 | Creating Swap Directories 2012/02/19 22:58:21 | /var/spool/squid3 exists 19/02/2012 22:58:21| Making directories in /var/spool/squid3/00 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/01 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/02 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/03 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/04 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/05 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/06 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/07 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/08 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/09 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/0A 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/0B 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/0C 19/02/2012 22:58:21| Making directories in /var/spool/squid3/0D 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/0E 2012/02/19 22:58:21 | Making directories in /var/spool/squid3/0F .

Багато цікавих питань та відповідей на них щодо використання кешу та пам'яті squid"ом описано. На цьому, можна вважати типове рішення з налаштування проксі-сервера закінченим.

Приклад налаштування прозорого проксі squid

Що є прозорий проксі? Це режим роботи проксі-сервера, коли клієнт не налаштовуєтьсяна роботу через проксі і посилає запити до мережі за протоколом HTTP, якби клієнт браузер працював безпосередньо з веб-сервером. При цьому силами (в linux - ) вихідні запити на HTTP направляються на порт, на якому запущено проксі. Проксі-сервер, у свою чергу, перетворює HTTP запити на запити протоколу проксі-сервера і посилає відповіді клієнту, як веб-сервер. Т.о. для клієнта прозоро відбувається взаємодія із проксі-сервером.

Важливо розуміти та знати!Цей метод підтримує тільки HTTP протокол, і не підтримує gopher, FTP або інше проксіювання. Також Squid не вміє одночасно працювати в прозорому режимі і в режимі аутентифікації.

Для налаштування прозорого режиму необхідно:

1. Встановити прозорий режиму налаштуваннях проксі. Це робиться в параметрі http_port, наприклад:

Http_port ip:port transparent

2. Загорнути користувачіввідповідним правилом на потрібний порт силами iptables:

Iptables -t nat -A PREROUTING -i ім'я_вхідного_інтерфейсу -s підмережа_локльної_мережі -p tcp --dport 80 -j REDIRECT --to-port порт_squid, приклад: iptables -t nat -A PREROUTING -i eth1 -s 10.0.0. p tcp --dport 80 -j REDIRECT --to-port 3128

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

Траблешуттинг

В першу чергу, діагностика роботи squidполягає в перегляді журналів, розташованих в /var/log/squid3. Більшість проблем вирішується цим способом. Якщо це не допомогло вирішити проблему, то переключивши демона на дебаг режим командою squid3 -k debugпроблему знайти простіше. Власне, що собою являє ліг сквіда? Файли логів містять різну інформацію про завантаження та продуктивність Squid. У log пишуться окрім інформації про доступ, /переще і системні помилки та інформація про споживання ресурсів, таких, як пам'ять або дисковий простір.

Формат log файлів Squidявляє собою рядок із значень, розділених одним або декількома пробілами:

time_ms_time_time ip_src Squid_req_status/HTTP_status byte_snd метод URL user squid_her_status/ip_dst MIME

  • час- час у форматі unix (Кількість секунд від 00:00 1970.01.01)
  • мс- мілісекунди з точністю до 3-х знаків
  • час відгуку- час відгуку, мілісекунд
  • ip_src- IP адреса джерела
  • Squid_req_status- статус запиту у squid (наприклад, TCP_HIT для раніше об'єктів, що кешуються, TCP_MISS якщо запитуваний об'єкт взятий не з локального кешу, UDP_HIT і UDP_MISS те ж для братських запитів)
  • HTTP_status- статус http протоколу (200 для вдалих, 000 для UDP запитів, 403 для перенаправлень, 500 для помилок)
  • byte_snd- передано, байт у відповідь включаючи HTTP заголовок
  • метод- метод запиту GET чи POST
  • URL- Запитана URL-адреса
  • user- Ім'я авторизованого користувача
  • squid_her_status- статус ієрархії squid - Результат запитів до братських/батьківських кеш
  • ip_dst- IP адреса запитуваного вузла
  • MIME- mime-type

Розглянемо з прикладу:

1329732295.053 374 10.0.1.55 TCP_MISS/200 1475 GET http://www.youtube.com/live_comments? - DIRECT/173.194.69.91 text/xml

Як видно, запит зроблено в 1329732295.053, відповідь віддаленого сервера склала 374 мс, хост, що запитав сторінку має IP 10.0.1.55, запитаний об'єкт був переданий не з локального кеша (TCP_MISS), код відповіді сервера - 200, клієнту передано 14 було запрошено URL http://www.youtube.com/live_comments?, ім'я користувача не визначено, об'єкт було отримано безпосередньо від сервера з IP 173.194.69.91, було передано текст, т.к. mime - text/xml. Ось.

Деякі останні моменти про squid3

У статті я розглянув основні принципи роботи проксі сервера, а також базові налаштування, що дозволяють реалізувати найпростіший сервер, що кешує, а також організувати роботу squid в прозорому (transparent) режимі. Squid підтримує кілька варіантів авторизації (IP, через LDAP, MySQL, NTLM та ін.), можливості обмеження пропускної спроможності каналу і контролю доступу до ресурсів інтернет. Роботу Сквіда з методами різної авторизації та приклади контролю трафіку я розгляну в наступних статтях.

Для початку уявімо, що у нас є звичайна мережа, що виходить в інтернет через один шлюз (проксі-сервер Squid встановлений тут же). Припустимо, IP-адреса шлюзу 192.168.1.1. Всі інші комп'ютери в мережі отримують налаштування IP DHCP. Комп'ютери в мережі різні, Windows XP / 7, Ubuntu, та ще мало які. За всіма не вбачиш. Але ми повинні вважати трафік, прискорюючи при цьому доступ в інтернет, повинні контролювати (хоча б від "дурня") доступ в інтернет та ін. Squid має широкі можливості з логування, обмеження доступу тощо. Тому нам потрібно, щоб усі комп'ютери в мережі не могли уникнути нашого проксі-сервера Squid. Тому нам треба у будь-якому випадку направити (загорнути, прокинути) запит клієнтських комп'ютерів лише через проксі-сервер Squid.

Налаштування переадресації портів

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

Переадресація портів у FreeBSD

Якщо на нашому шлюзі встановлена ​​FreeBSD і брандмауер за замовчуванням - IPFW, то для виконання цього завдання ми повинні на шлюзі встановити переадресацію портів:

# Redirect to local proxy
/sbin/ipfw add 0170 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any 80

  • 0170 – номер правила (у вашому випадку може бути будь-який).
  • fwd 127.0.0.1,3128 - куди направлятимемо пакети, - у нашому випадку нашому улюбленому Squid, запущеному на порту 3128 на шлюзі, - ...
  • from 192.168.1.0/24 - ... надіслані комп'ютерами локальної мережі...
  • to any 80 - ... на будь-який сайт в інтернеті

Тепер увага! Це правило потрібно додати ДО того, як правила NAT(Network Address Translation) отримають цей запит. Поясню дещо неакадемічно: що робить NAT? У нашому випадку NAT змінює адресу джерела (замінює локальний IP клієнта на зовнішній IP шлюза та запам'ятовує, від якого внутрішнього клієнта був запит. Для того, щоб Squid обробив запит від клієнта, йому не потрібно нічого перетворювати – він і сам із цим впорається. Тому Squid повинен отримати пакет у первозданному вигляді і сам вирішити, що робити далі.

До того ж NAT і Squid - все-таки різні речі, і пакет, адресований, скажімо до 2.3.4.5:80, не містить інформації, як потрапити до Squid (на порт 3128 шлюзу). І пакет оброблятиметься лише засобами NAT. Squid-пакет так і не побачить. Тому наше завдання - просто віддати Squid той пакет, який відправив броузер користувача. Поясню з прикладу частини конфігу ipfw:

Cmd="ipfw -q add" $skip="skipto 5000" pif="xl1" #зовнішній інтерфейс... # Redirect to local proxy $cmd 0170 fwd 127.0.0.1,3128 # NAT $cmd 0200 divert natd ip from any to any in via $pif # Allow keep-state statement. $cmd 0201 check-state # POP3/POP3S $cmd 0325 $skip tcp from any to any 110 out via $pif setup keep-state $cmd 0326 $skip tcp from any to any 995 out via $pif setup keep-state # (HTTP/HTTPS/..) $cmd 0350 $skip tcp from any to any 80 out via $pif setup keep-state $cmd 0352 $skip tcp from any to any 443 out via $pif setup keep-state # This is skipto location for outbound stateful rules $cmd 5000 divert natd ip from any to any out via $pif ...

У конфізі вище запит відкрити сайт спочатку обробляється правилом 0170, яке загортає запит Squid. Squid (як і будь-яка інша програма) також виконує вимоги брандмауера – тільки для нього правило 0170 не діє, а ось правило 0350 дозволяє Squid відправити запит до інтернету. Для того щоб виходити в інтернет без Squid, необхідно закоментувати правило 0170. В цьому випадку Squid не отримає нічого, а всі запити броузерів з локальної мережі будуть оброблятися правилом 0350.

Переадресація портів у Linux

Якщо на нашому шлюзі встановлена ​​Linux і , то вищезгадана команда буде виглядати так:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

де eth0 – внутрішній інтерфейс.

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

Із цим розібралися. Тепер треба дати вказівку Squid про те, що він повинен обробляти пакети, спочатку не спрямовані на нього. Переходимо до увімкнення режиму прозорості Squid.

Прозорий Squid у squid.conf

Тепер справа залишилася за малим – налаштувати Squid у режим невидимки, тобто. приймати автоматично перенаправлені пакети та обробляти їх. У різних версіях Squid відповідали різні команди. Налаштування Squid версії 2.6.* виглядає так:

http_port 127.0.0.1:3128 transparent # Squid працює в прозорому режимі

Уважно перегляньте конфігураційний файл squid.conf на предмет дублікатів директив - я витратив дві години часу, звернувся на форум за допомогою з "нестандартною проблемою", в той час як просто не звернув увагу на те, що першим рядком у мене вмикався звичайний режим роботи Squid :

http_port 3128 # Squid працює у звичайному режимі

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

Плюси і мінуси

З плюсів можна відзначити абсолютну впевненість, що всі запити на 80 порт (стандартний для Інтернету) будуть оброблені Squid-ом. Відповідно, будуть логи, статистика для шефа та відсутність необхідності бігати та руками все налаштовувати.

З мінусів можна відзначити:

  • неможливість (принаймні простим способом) авторизувати користувачів для доступу до інтернету;
  • якщо раптом "впаде" Squid, то доступ до сайтів припиниться. Тому адміну потрібно або бути впевненим, що все буде ОК, або мати можливість віддалено змінити конфіг брандмауера, або написати скрипт, що автоматично перевіряє, чи висить Squid на порту 3128, і якщо ні, то запускає його.

Налаштування Squid у прозорому режимі завершено. Ось тепер – все.

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

1. Для початку встановлюємо squid (для Debian 6)

Apt-get install squid3

2. Файл з налаштування squid.conf лежить у /etc/squid3/. Містить він близько 5,5 тисячі рядків. Але не все так страшно, основна маса цього файлу – це докладні коментарі до налаштувань. Як зручніше внести зміни до файлу вибирати Вам. Можна позбутися всього зайвого у файлі таким способом

# переходимо до папки squid cd /etc/squid3 # робимо резервну копію файлу з налаштуваннями cp squid.conf squid.conf_backup # отримуємо з squid.conf_backup чистий файл з налаштуваннями без коментарів у squid.conf cat squid.conf_backup | egrep -v "^#|^$" > squid.conf

і отримати «голий» файл з налаштування, наступного проведення

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe 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 maker acl Safe_ports port 777 # multiling http acl CONNECT метод 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 deny all http_port 3128 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_ 0 20% 4320

Залишиться внести лише необхідні зміни у рядках. Другий варіант – це редагувати весь файл без його чищення. Що теж досить просто, якщо вміти користуватися пошуком у редакторі vi. У цьому випадку у Вас на допомогу залишаться багато корисних коментарів до налаштувань.

Для пошуку тексту в редакторі vi натискаємо клавішу "/". Якщо Ви перебуваєте в режимі редагування, потрібно вийти з нього для передачі команд редактору натисканням Esc. Отримуємо таку послідовність дій: "/" > "вводимо пошукове слово" > "Enter".

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

Vi /etc/squid3/squid.conf # Дозволяємо доступ до проксі тільки з знайшов мережі acl localnet src 172.16.0.0/24 http_access allow localnet http_access allow localhost # За замовчуванням порт роботи проксі 3128 # Так як у нас проксі буде прозорим - вказуємо це # а також адреса інтерфейсу з портом на якому буде працювати проксі # на цей же порт будуть перенаправлятися запити в iptables http_port 172.16.0.1:3128 transparent

3. Забезпечуємо кешування запитів

# Установка директорії кешу та його налаштування # ufs - спосіб кешування файлів на диску # /var/spool/squid3 - папка кеша # 5000 - розмір кеша в мегабайтах # 16 - кількість папок 1 рівня в кеші # 256 - кількість папок 2 рівня в кеші cache_dir ufs /var/spool/squid3 5000 16 256 # обмежимо мінімальний розмір кешованого файлу, щоб полегшити роботу жорсткого диска # або можна втратити весь сенс кеша, якщо він буде повільно працювати minimum_object_size 2 KB # обмежуємо і максимальний розмір

4. Squid, налаштований за умовчанням, додає до http-запиту кілька своїх заголовків. При цьому, у перших двох заголовках передається клієнтський IP (або навіть декілька IP, у разі ланцюжка проксі). Якщо нам це ні до чого, ну, наприклад, не хочемо світити внутрішні ip своєї локалки, то зробити squid анонімним дуже просто

Via off forwarded_for delete

Після завершення всіх налаштувань, варто перевірити анонімність запитів на сторінці http://checker.samair.ru. Якщо все зроблено правильно, то результатом буде напис "Resume: You are using high-anonymous (elite) proxy".

На цьому внесення змін до файлу закінчено. Зрештою squid.conf має виглядати так

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl localnet src 172.16.0.0/24 # RFC1918 possible internal 4 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 # unregiste afe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT метод CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_ 2.16.0.1: 3128 transparent hierarchy_stoplist cgi-bin ? cache_dir ufs /var/spool/squid3 5000 16 256 minimum_object_size 2 KB maximum_object_size 61440 KB coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10 0 refresh_pattern -i (/cgi-bin/| \?) 0 0% 0 refresh_pattern . 0 20% 4320 via off forwarded_for delete

Для застосування налаштувань зупиняємо squid

Service squid3 stop

Готуємо директорію кешу squid

Squid3-z

Запускаємо проксі

Service squid3 start

Якщо Ви не робили зміни налаштувань пов'язаних з кешем проксі, можна виконати одну єдину команду. Налаштування буде прийнято автоматично без перезапуску squid.

Squid3 -k reconfigure

5. Залишається лише налаштувати прозорість проксі. Це забезпечує непомітну користувачам локальної мережі роботу через проксі, тобто. немає потреби настроювати користувачам програми для роботи з проксі. Прозорість забезпечується простим перенаправленням http запитів з 80 порту на порт проксі сервера за допомогою фаєрволу iptables та включенням режиму прозорого проксі в самому squid. Зміни у налаштуваннях squid ми зробили вище. Додаємо до правил iptables ще один рядок:

Iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Обов'язково в параметрі вказуйте потрібний інтерфейс, на якому працюватиме проксі: -i eth0. Це позбавить Вас від проблем з доступом до web-сервера з інтернету за наявності більше одного активного інтерфейсу, якщо такий буде в майбутньому на цьому сервері. А також заради безпеки проксі.