÷ього разу ¤ зак≥нчу розпов≥дь про те, ¤к змусити п≥нгв≥н≥в швидше б≥гати по ≤нтернету. ћи будемо встановлювати кешуючий прокс≥-сервер Squid, ¤кий буде збер≥гати ус≥ в≥дв≥дан≥ вами стор≥нки, ≥ при наступному зверненн≥ до них д≥ставатиме њх з кешу, а не т¤гнутиме з ≤нтернету.
Squid - один з найпопул¤рн≥ших кешуючих прокс≥-сервер≥в. …ого поул¤рн≥сть по¤снюЇтьс¤ гнучк≥стю та великою к≥льк≥стю опц≥й налаштуванн¤, що дозвол¤Ї налаштувати сервер дуже тонко п≥д будь-¤к≥ умови. ѕрокс≥ кешуЇ HTTP, FTP, SSL та де¤к≥ ≥нш≥ запити, дозвол¤Ї обмежувати швидк≥сть з'Їднань, п≥дтримуЇ ≥Їрарх≥ю сервер≥в... «важаючи на купу можливостей, цей матер≥ал не претендуЇ на вичерпн≥сть, а носить б≥льш огл¤довий характер. ’оча (при на¤вност≥ бажаючих ;) ), ¤к≥сь аспекти можна буде розгл¤нути б≥льш детально. ѕерша верс≥¤ squid з'¤вилас¤ у 1996 роц≥, тому спод≥ватись на нефункц≥ональн≥сть або купу страшних глюк≥в не варто. ѕри цьому проект на диво дос≥ не маЇ оф≥ц≥йноњ документац≥њ у завершеному стан≥ (окр≥ man-стор≥нок ≥ FAQ). Ќа момент написанн¤ матер≥алу останньою стаб≥льною верс≥Їю прокс≥ був squid-2.5.STABLE7, ¤кий можна закачати з оф≥ц≥йного сайту squid: http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE7.tar.bz2. –озпаковуЇмо арх≥в командою tar -xzf ./squid-2.5.STABLE7.tar.bz2 до поточного каталогу. “епер треба створити користувача, в≥д ¤кого буде запускатись сервер: useradd -r squid. ’оча у мене в≥н з ¤когось дива був присутн≥й у систем≥, не зважаючи на те, що пакунку з≥ скв≥дом не було.
—крипт конф≥гурац≥њ маЇ досить багато ц≥кавих ключ≥в, про ¤к≥ можна д≥знатись, набравши ./configure --help.я вкажу т≥льки на найб≥льш важлив≥ з мого погл¤ду: --enable-default-err-language=Russian-koi8-r ¤кщо виникають проблеми з англ≥йськими пов≥домленн¤ми про помилки серверу; украњнських, нажаль нема :( --enable-delay-pools ¤кщо потр≥бно обмежувати траф≥к дл¤ р≥зних з'Їднань; --enable-icmp вим≥рюЇ шл¤х до сус≥д≥в; --enable-cache-digests застосовувати Cache Digests дл¤ оптим≥зац≥њ вибору сус≥д≥в.
ќстанн≥ дв≥ опц≥њ потр≥бн≥ при побудов≥ мереж≥ прокс≥-сервер≥в, ¤к≥ взаЇмод≥ють м≥ж собою.ќтож, сконф≥гурувавши пакунок, кажемо make ≥ п≥д root'ом make install. —кв≥д встановитьс¤ в директор≥ю /usr/local/squid разом з логами ≥ файлами конф≥гурац≥њ. ƒл¤ зручност≥ на останн≥ два каталоги можна зробити с≥мл≥нки у /etc та /var/log в≥дпов≥дно, або скористатись групою параметр≥в скрипта ./configure --prefix, щоб розкласти ус≥ компоненти найб≥льш зручно дл¤ вас.
“епер переходимо до конф≥гурац≥њ сервера. ќб'Їм файла etc/squid.conf п≥дказуЇ, що робити це можна не одну годину, ¤кщо п≥д≥йти до справи серйозно ≥ знати, чого хочеш :). “ому ми т≥льки налаштуЇмо скв≥д так, щоб в≥н працював в куп≥ з privoxy (див ћ #48), а на ≥нш≥ опц≥њ ¤ просто вкажу, щоб при потреб≥ знати, де шукати.
- http_port 3128 - порт, ¤кий слухатиме скв≥д;
- icp_port 0 - ¤кщо немаЇ сус≥д≥в, ¤к≥ будуть стукати у двер≥, нав≥що двер≥ ;) ;
- cache_peer - налаштуванн¤ сус≥д≥в.
- cahe_mem 8 MB - к≥льк≥сть оперативноњ пам'¤т≥, ¤ку може використовувати
скв≥д;
- cache_swap_high 95 - процент заповненн¤ кешу, при ¤кому почнетьс¤ видаленн¤
об'Їкт≥в з нього;
- cache_swap_low 90 - процент заповненн¤ кешу, при ¤кому зупинитьс¤ видаленн¤
об'Їкт≥в з нього;
- maximum_object_size 4096 KB - максимальний розм≥р об'Їкта, ¤кий буде
збережено в кеш≥;
- cache_dir ufs /usr/local/squid/var/cache 100 16 256 - опис каталогу п≥д кеш;
пол¤:
ufs - тип збер≥ганн¤ об'Їкт≥в;
/usr/local/squid/var/cachе - м≥сце розташуванн¤ кешу;
100 - об'Їм кешу в ћб;
16 - к≥льк≥сть каталог≥в першого р≥вн¤;
256 - к≥льк≥сть каталог≥в другого р≥вн¤;
- client_netmask 255.255.255.255 - маска, на ¤ку множатьс¤ IP користувач≥в
squid; потр≥бна дл¤ збереженн¤ таЇмниц≥ особистого житт¤ кл≥Їнта, наприклад при
встановленн≥ маски в 255.255.255.0, останн≥й байт IPшник≥в в логах прокс≥ буде
зам≥нено нулем;
- ftp_user <е-мило> - потр≥бно дл¤ доступу на анон≥мн≥ фтп, де¤к≥ свар¤тьс¤ на
замовчувальний вар≥ант ≥ не пускають ;)
- ftp_list_width 64 - ширина листинга фтп, замовчувальних 32 ¤вно недостатньо;
- quick_abort_pct 95 - ¤кщо кл≥Їнт об≥рвав запит, а вже завантажено б≥льше 95
в≥дсотк≥в, зак≥нчити завантаженн¤; поруч Ї опц≥њ дл¤ max/min обмеженн¤ розм≥ру
закачаного об'Їкта;
- cache_mgr
“епер найц≥кав≥ше - списки доступу (ACL). « њх допомогою можна розписати коли,
кому, що ≥ ¤к можна ,чи не можна. ћають наступний вигл¤д:
acl ≥м'¤ тип строка ... - в строц≥ може бути дек≥лька параметр≥в, вони
об'Їднуютьс¤ лог≥чним јЅќ;
acl ≥м'¤ тип "назва файлу" - один файл в строку, ¤кий м≥стить параметри.
ѕараметр≥в Ї велика купа, найб≥льш уживаними Ї наступн≥:
- src addr - кл≥Їнтськ≥ IP адреси, можуть мати наступний вигл¤д:
192.168.4.0/24, або 192.168.4.2-192.168.4.46;
- dst addr - IP адреса сервера, до ¤кого прийшов запит;
- srcdomain, dstdomain - те саме, т≥льки дл¤ доменних ≥мен;
- time [day] [год1:хв1-год2:хв2] - день (одна з букв SMTWHFA) та пер≥од часу,
коли прийшов запит;
- proto [HTTP | FTP | ...] - протокол запиту;
- proxy_auth користувач ... - дл¤ проходженн¤ аутентиф≥кац≥њ користувачем при
доступ≥ до скв≥да, можна використати REQUIRED дл¤ будь-¤кого ≥мен≥ користувача;
ѕодивимось, що можна зробити за допомогою цих списк≥в доступу:
- http_access allow|deny [!]aclname ... - дозв≥л/заборона доступу до прокс≥ по
HTTP, acl об'Їднуютьс¤ лог≥чним ≤:
- always_direct allow|deny [!]aclname ... - запити, що задовольн¤ють даним acl
завжди направл¤ти до першоджерела, оминаючи ≥нш≥ кеш≥;
- never_direct allow|deny [!]aclname ... - повн≥стю протилежна повед≥нка ;) ;
ѕри застосуванн≥ зв'¤зки squid-privoxy, автори останнього рад¤ть
використовувати таку схему: browser->squid->privoxy. ƒл¤ цього треба зробити
так≥ зм≥ни в конф≥гурац≥њ squid.conf:
- вказати privoxy ¤к головний прокс≥, до ¤кого будуть надсилатись запити:
cache_peer localhost parent 8118 7 no-query ; пол¤:
localhost - доменне ≥м'¤ машини, де висить прокс≥;
parent - тип прокс≥ (головний);
8118 - порт, ¤кий слухаЇ прокс≥:
7 - порт дл¤ ICP запит≥в; так ¤к сус≥д не squid, ≥ не зможе в≥дпов≥сти на
запит, то направл¤Їмо можлив≥ запити на ехо-порт;
no-query - не надсилати ICP запити;
- змусити скв≥д завжди направл¤ти запити по ftp напр¤му, так ¤к privoxy не
п≥дтримуЇ цей протокол, а ус≥ ≥нш≥ завжди пускати через налаштован≥ кеш≥
(тобто privoxy). ƒл¤ цього треба розкоментувати чотири стоки у
конф≥гурац≥йному файл≥:
acl FTP proto FTP
always_direct allow FTP
acl all src 0.0.0.0/0.0.0.0
never_direct allow all
р≥м цього, в броузер≥ треба встановити прокс≥ дл¤ FTP, HTTP, SSL,
вказавши localhost, порт 3128 (див. ћ #48).
“епер залишилось створити директор≥њ п≥д кеш, ≥ скв≥д буде готовий до запуску.
ƒл¤ цього зм≥нимо власника каталогу, де буде лежати кеш та логи: chown squid
/usr/local/squid/var/, ≥, власне, створимо кеш: /usr/local/squid/sbin/squid -z.
«апускаЇтьс¤ прокс≥ просто командою /usr/local/squid/sbin/squid, а ¤кщо старт
в≥дбуваЇтьс¤ в оффлайн≥, то з ключом -D, щоб в≥н не перев≥р¤в, чи налаштована
мережа.
ќт ми ≥ встановили кешуючий проккс≥-сервер. “епер в броузер≥ можна в≥дключити
налаштунки кешу, ¤кщо ви не маЇте звички копирсатись у ньому ;).
ўодо автоматичного старту п≥дчас запуску системи. ¬ пакет≥ скрипта дл¤
init немаЇ, здаЇтьс¤ в FAQ були т≥льки поради про те, ¤кими командами запускати
та зупин¤ти скв≥д. “ому ¤ вз¤в цей скрипт в ≥нш≥й програм≥ (pdnsd ;) ) ≥
переробив його п≥д squid. —под≥ваюсь, коли вийде матер≥ал, скрипт можна буде
вз¤ти на http://mathway.narod.ru. “аи буде bash-скрипт, ¤кий розкладе усе по
м≥сц¤х.
ќсь ≥ завершилась розпов≥дь про те, ¤к можна навчити п≥нгв≥н≥в б≥гати швидше по
мереж≥ ≤нтернет. «вичайно, наведен≥ програми дадуть б≥льший ефект, коли
сто¤тимуть на шлюз≥ в локальн≥й мереж≥: статистика показуЇ, що траф≥к
зменшуЇтьс¤ ор≥Їнтовно на 40%. јле на локальн≥й машин≥ њх прац¤ теж не
залишаЇтьс¤ непом≥ченою :). Ќе можна сказати, що це все, що можна зробити, Ї ще
багато параметр≥в ¤дра системи, ¤к≥ впливають на њњ повед≥нку в мереж≥, але це
вже зовс≥м ≥нша ≥стор≥¤...
P.S. ≤нформац≥¤, наведена в данному цикл≥ статей отримана мною з джерел, ¤к≥ ¤
вважаю над≥йними. Ќе зважаючи на це, ¤ не можу гарантувати абсолютну точн≥сть
наведених в≥домостей, ≥ не несу в≥дпов≥дальн≥сть за можливу шкоду, викликану
використанн¤м матер≥ал≥в.
(c) 2005 ћатв≥йчук ќлег aka Matvey