- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF76:Hardcore Linux1
Материал из Linuxformat.
(Новая: == Squid Настройка прокси-сервера == '''''Пол Хадсон''' (Paul Hudson) затевает новую серию статей для продвинутых п...) |
м (викификация) |
||
Строка 9: | Строка 9: | ||
сложных. Зато интересных! | сложных. Зато интересных! | ||
- | === Squid | + | === Squid — это круто === |
- | Вы угадали: Squid | + | Вы угадали: Squid — это прокси-сервер. Но почему крутой? |
Скоро узнаете. У нас, в LinuxFormat, все начинают бесноваться, если какой-нибудь web-сайт открывается дольше наносекунды, переводя наше драгоценное время. При этом мы | Скоро узнаете. У нас, в LinuxFormat, все начинают бесноваться, если какой-нибудь web-сайт открывается дольше наносекунды, переводя наше драгоценное время. При этом мы | ||
постоянно скачиваем новые дистрибутивы, так что пробки в | постоянно скачиваем новые дистрибутивы, так что пробки в | ||
канале нас тоже волнуют. Однако ситуация поправима: есть | канале нас тоже волнуют. Однако ситуация поправима: есть | ||
- | способ сэкономить | + | способ сэкономить — сразу! — и время, и полосу пропускания. Имя ему — правильно, Squid. Этот свободный скоростной |
прокси-сервер кэширует сайты и контролирует права доступа | прокси-сервер кэширует сайты и контролирует права доступа | ||
к сетевым ресурсам, а если его хорошенько попросить, то и | к сетевым ресурсам, а если его хорошенько попросить, то и | ||
- | порядок у вас наведет.В процессе урока вы узнаете, как: | + | порядок у вас наведет. В процессе урока вы узнаете, как: |
* базовая установка Squid оптимизирует Интернет-соединение | * базовая установка Squid оптимизирует Интернет-соединение | ||
* продвинутый Squid защищает детей от гадких сайтов | * продвинутый Squid защищает детей от гадких сайтов | ||
Строка 37: | Строка 37: | ||
делать вручную. Для запуска Squid в Fedora, выполните от | делать вручную. Для запуска Squid в Fedora, выполните от | ||
лица суперпользователя команду service squid start, а для | лица суперпользователя команду service squid start, а для | ||
- | подключения при загрузке | + | подключения при загрузке — chkconfig -level 345 squid on. |
В SUSE, откройте YaST, выберите настройку системных сервисов (System Services) в разделе System (Система), отыщите | В SUSE, откройте YaST, выберите настройку системных сервисов (System Services) в разделе System (Система), отыщите | ||
в списке Squid, и активируйте его, щелкнув по кнопке Enable. | в списке Squid, и активируйте его, щелкнув по кнопке Enable. | ||
Строка 50: | Строка 50: | ||
(Настройки) в меню Edit (Правка), щелкните на кнопке | (Настройки) в меню Edit (Правка), щелкните на кнопке | ||
Connection Settings (Настройки соединения) и выберите Manual | Connection Settings (Настройки соединения) и выберите Manual | ||
- | Proxy Configuration (Ручная конфигурация прокси). Укажите в качестве прокси 127.0.0.1, а в качестве порта | + | Proxy Configuration (Ручная конфигурация прокси). Укажите в качестве прокси 127.0.0.1, а в качестве порта — 3128. Поставьте |
«галочку» напротив Use this proxy server for all protocols | «галочку» напротив Use this proxy server for all protocols | ||
(Использовать этот прокси для всех протоколов). | (Использовать этот прокси для всех протоколов). | ||
Строка 83: | Строка 83: | ||
Пока вы не побежали звонить своим друзьям/коллегам | Пока вы не побежали звонить своим друзьям/коллегам | ||
и приглашать их срочно опробовать ваш замечательный | и приглашать их срочно опробовать ваш замечательный | ||
- | прокси-сервер, спешу сказать | + | прокси-сервер, спешу сказать — обождите. По умолчанию |
Squid блокирует запросы со всех машин, кроме вашей, так | Squid блокирует запросы со всех машин, кроме вашей, так | ||
что друзья-коллеги получат одни сообщения об ошибках. Чтобы пресечь это, а заодно и дурацкую манеру Squid | что друзья-коллеги получат одни сообщения об ошибках. Чтобы пресечь это, а заодно и дурацкую манеру Squid | ||
использовать порт 3128, нужно отредактировать /etc/squid/squid.conf, небольшой конфигурационный файлик на пару | использовать порт 3128, нужно отредактировать /etc/squid/squid.conf, небольшой конфигурационный файлик на пару | ||
- | тысяч строк кода. Отставить валерьянку! Объясняю: большинство из них | + | тысяч строк кода. Отставить валерьянку! Объясняю: большинство из них — комментарии. Мы обойдемся десятью-пятнадцатью строками (только никому не рассказывайте). |
- | Начнем с HTTP-порта. 3128 | + | Начнем с HTTP-порта. 3128 — не очень удачное число, сложновато для запоминания. Да и как только выйдет |
эксплойт для Squid, хакеры именно с этого порта и начнут. | эксплойт для Squid, хакеры именно с этого порта и начнут. | ||
Большинство обладателей Squid меняют порт на 80, 1080, | Большинство обладателей Squid меняют порт на 80, 1080, | ||
Строка 95: | Строка 95: | ||
Скорее всего, первым вхождением будет «TAG: http_port», | Скорее всего, первым вхождением будет «TAG: http_port», | ||
начало директивы установки порта http_port. Спустившись | начало директивы установки порта http_port. Спустившись | ||
- | ниже, вы обнаружите строку | + | ниже, вы обнаружите строку «# http_port 3128». # в начале строки обозначает комментарий, то есть данная строка |
Squid’ом игнорируется (3128-й порт явно устанавливать не | Squid’ом игнорируется (3128-й порт явно устанавливать не | ||
нужно, он назначен по умолчанию). Удалите # и вместо 3128 | нужно, он назначен по умолчанию). Удалите # и вместо 3128 | ||
Строка 108: | Строка 108: | ||
Уладив проблемы с портом, приступим к открытию | Уладив проблемы с портом, приступим к открытию | ||
доступа к прокси-серверу другим пользователям. Вернитесь | доступа к прокси-серверу другим пользователям. Вернитесь | ||
- | в файл squid.conf и поищите в нем строку «acl all». ACL | + | в файл squid.conf и поищите в нем строку «acl all». ACL - |
аббревиатура от «Access Control List»: списки контроля доступа. Доступ, естественно, надо ограничить, чтобы до вас не | аббревиатура от «Access Control List»: списки контроля доступа. Доступ, естественно, надо ограничить, чтобы до вас не | ||
- | добрались злые хакеры. По строке | + | добрались злые хакеры. По строке «acl all» вы найдете блок |
- | из 16-и строк | + | из 16-и строк — «рекомендуемая минимальная конфигурация» |
(оставьте его в покое), потом кое-какие комментарии и, наконец, строки http_access allow localhost (разрешен доступ к прокси-серверу с локальной машины) и http_access deny all (блокировать всех). | (оставьте его в покое), потом кое-какие комментарии и, наконец, строки http_access allow localhost (разрешен доступ к прокси-серверу с локальной машины) и http_access deny all (блокировать всех). | ||
Строка 124: | Строка 124: | ||
deny all. Вы, наверное, удивитесь: чему тут не работать? Дело | deny all. Вы, наверное, удивитесь: чему тут не работать? Дело | ||
в том, что мы будем устанавливать гораздо более сложные | в том, что мы будем устанавливать гораздо более сложные | ||
- | ACL, и предварительно следует убедиться, что ваш прокси-сервер не блокирован собственным брандмауэром и проблемы могут возникать только у Squid. Кстати, если при | + | ACL, и предварительно следует убедиться, что ваш прокси-сервер не блокирован собственным брандмауэром и проблемы могут возникать только у Squid. Кстати, если при «allow |
- | + | all» прокси-сервер не работает, либо выключите брандмауэр | |
(метод грубой силы), либо разрешите на нем использование | (метод грубой силы), либо разрешите на нем использование | ||
порта 8080. | порта 8080. | ||
Строка 140: | Строка 140: | ||
(естественно, вы должны ввести IP-адреса компьютеров | (естественно, вы должны ввести IP-адреса компьютеров | ||
вашей локальной сети). Сохраните файл и заставьте Squid | вашей локальной сети). Сохраните файл и заставьте Squid | ||
- | его перечитать | + | его перечитать — Squid -k reconfigure. Теперь убедимся, что |
«кому доступ, а кому и от ворот поворот»: с любого из перечисленных ip вы должны успешно зайти на сервер, а на | «кому доступ, а кому и от ворот поворот»: с любого из перечисленных ip вы должны успешно зайти на сервер, а на | ||
попытку зайти с ip-адресов, не указанных в списке, получить | попытку зайти с ip-адресов, не указанных в списке, получить | ||
Строка 153: | Строка 153: | ||
Данный способ приемлем для малых сетей, однако если | Данный способ приемлем для малых сетей, однако если | ||
у вас тысячи компьютеров или используется динамическая | у вас тысячи компьютеров или используется динамическая | ||
- | адресация с DHCP-сервером, он уже не годится | + | адресация с DHCP-сервером, он уже не годится — в этом случае поможет CIDR-нотация адресов, до ужаса, правда, нудная |
и требующая знаний о двоичной системе счисления. | и требующая знаний о двоичной системе счисления. | ||
Кратко поясним: люди привыкли видеть IP-адреса | Кратко поясним: люди привыкли видеть IP-адреса | ||
в формате 123.123.123.123. А вот компьютеры работают с т. | в формате 123.123.123.123. А вот компьютеры работают с т. | ||
- | н. «длинным» IP-адресом, например, 2071690107 | + | н. «длинным» IP-адресом, например, 2071690107 — думаете, случайное число? Вы будете смеяться, но это эквивалент |
123.123.123.123. | 123.123.123.123. | ||
В ip-адресах мы используем, разделяя точками, числа | В ip-адресах мы используем, разделяя точками, числа | ||
от 0 до 255. Самое малое число в двоичной системе будет | от 0 до 255. Самое малое число в двоичной системе будет | ||
- | выглядеть как 00000000 (0), а самое большое | + | выглядеть как 00000000 (0), а самое большое — как 11111111 |
(255). Компьютер переводит каждый сегмент ip-адреса в двоичную систему счисления и «склеивает» с остальными в одно | (255). Компьютер переводит каждый сегмент ip-адреса в двоичную систему счисления и «склеивает» с остальными в одно | ||
- | длинное число. Например, число 123 | + | длинное число. Например, число 123 — это 01111011, значит, |
адрес 123.123.123.123 преобразуется в 01111011011110110 | адрес 123.123.123.123 преобразуется в 01111011011110110 | ||
1111011. В десятичной системе счисления получится как раз | 1111011. В десятичной системе счисления получится как раз | ||
Строка 173: | Строка 173: | ||
адресов) задается указанием неизменных разрядов и маски. | адресов) задается указанием неизменных разрядов и маски. | ||
Например, так: 192.168.100.0/24. Это значит, что первые 24 | Например, так: 192.168.100.0/24. Это значит, что первые 24 | ||
- | разряда двоичного эквивалента 192.168.100.0 остаются неизменными (это 192.168.100), а последние 8 бит могут меняться ( | + | разряда двоичного эквивалента 192.168.100.0 остаются неизменными (это 192.168.100), а последние 8 бит могут меняться (0-255). А если адрес такой: 10.0.0.0/8, то фиксированы |
- | только первые 8 разрядов (это как раз первое число | + | только первые 8 разрядов (это как раз первое число — 10), |
а остальные числа могут меняться. То есть вместо того, чтобы перечислять в конфигурационном файле все адреса от | а остальные числа могут меняться. То есть вместо того, чтобы перечислять в конфигурационном файле все адреса от | ||
192.168.0.1 до 192.168.0.255, мы можем указать их в краткой | 192.168.0.1 до 192.168.0.255, мы можем указать их в краткой | ||
Строка 184: | Строка 184: | ||
http_access allow internal_network | http_access allow internal_network | ||
Тут мы указали две группы адресов в CIDR-нотации | Тут мы указали две группы адресов в CIDR-нотации | ||
- | (192.168.132. | + | (192.168.132.1-255 и 192.168.133.1-255) и еще один ip-адрес |
в обычном виде (192.168.134.10). Убедитесь, что правило | в обычном виде (192.168.134.10). Убедитесь, что правило | ||
«deny all» стоит после этих строк. | «deny all» стоит после этих строк. | ||
Строка 190: | Строка 190: | ||
=== Детишки под контролем === | === Детишки под контролем === | ||
Допущенный к родительскому компьютеру с благородной | Допущенный к родительскому компьютеру с благородной | ||
- | целью | + | целью — делать уроки, ваш отпрыск в лучшем случае проест |
- | все деньги, часами просиживая в чатах и обмениваясь копиями игр, а в худшем | + | все деньги, часами просиживая в чатах и обмениваясь копиями игр, а в худшем — натащит вирусов и насмотрится порнухи. |
Оборонить компьютер поможет все тот же Squid! | Оборонить компьютер поможет все тот же Squid! | ||
- | Во-первых, можно просто перекрыть доступ к Интернету в определенное время дня | + | Во-первых, можно просто перекрыть доступ к Интернету в определенное время дня — это будет хорошим стимулом сделать, наконец, домашнее задание (сообразительный малютка все равно откопает игру «Сапер», но тут уж |
ваша вина: нечего было использовать Windows в учебном | ваша вина: нечего было использовать Windows в учебном | ||
процессе). | процессе). | ||
Ограничение по времени устанавливается в ACL типа | Ограничение по времени устанавливается в ACL типа | ||
- | «time», только укажите день недели и временной промежуток. Дни недели обозначаются буквами: M | + | «time», только укажите день недели и временной промежуток. Дни недели обозначаются буквами: M — понедельник, |
- | T | + | T — вторник, W — среда, H — четверг, F — пятница, A — суббота, |
- | S | + | S — воскресенье; комбинация MTWHF (рабочие дни) — D. Так, |
для того, чтобы создать ACL для периода с Воскресенья по | для того, чтобы создать ACL для периода с Воскресенья по | ||
Четверг с 19:00 до 20:00, вставьте в Squid.conf такую строку: | Четверг с 19:00 до 20:00, вставьте в Squid.conf такую строку: | ||
Строка 209: | Строка 209: | ||
acl kids_computers src 192.168.133.3 192.168.133.4 192.168.133.5 | acl kids_computers src 192.168.133.3 192.168.133.4 192.168.133.5 | ||
acl adult_computers src 192.168.133.0/24 | acl adult_computers src 192.168.133.0/24 | ||
- | Адреса взрослых расположены в диапазоне 192.168.133. | + | Адреса взрослых расположены в диапазоне 192.168.133.1-255, но три адреса, хотя и входят в этот диапазон, в списке адресов взрослых не числятся, потому что раньше были |
- | указаны в другом списке | + | указаны в другом списке — kids_computers. Создадим правила |
доступа для них: | доступа для них: | ||
http_access deny kids_computers homework_time | http_access deny kids_computers homework_time | ||
Строка 218: | Строка 218: | ||
можно увидеть два параметра: kids_computers и homework_time. | можно увидеть два параметра: kids_computers и homework_time. | ||
Squid работает с правилами в том порядке, в каком вы их | Squid работает с правилами в том порядке, в каком вы их | ||
- | записали. То есть в данном случае, он при попытке соединения смотрит на первое правило | + | записали. То есть в данном случае, он при попытке соединения смотрит на первое правило — если компьютер принадлежит списку kids_computers и текущее время входит во |
временной промежуток homework_time, то он сразу запрещает соединение и отправляется на заслуженный отдых. При | временной промежуток homework_time, то он сразу запрещает соединение и отправляется на заслуженный отдых. При | ||
несоблюдении хотя бы одного из указанных условий он переходит к разборке следующего правила, и так далее. Короче, | несоблюдении хотя бы одного из указанных условий он переходит к разборке следующего правила, и так далее. Короче, | ||
Строка 224: | Строка 224: | ||
первой найденной строки, для которой выполняются все | первой найденной строки, для которой выполняются все | ||
условия. Если список начинается с «accept all», то ни до каких | условия. Если список начинается с «accept all», то ни до каких | ||
- | дальнейших ограничений дело не дойдет. Главное | + | дальнейших ограничений дело не дойдет. Главное — понять |
этот принцип и соблюдать правильный порядок (прокрутите | этот принцип и соблюдать правильный порядок (прокрутите | ||
свои правила в уме). | свои правила в уме). | ||
Строка 254: | Строка 254: | ||
acl noporno url_regex -i porno | acl noporno url_regex -i porno | ||
Параметр -i означает, что регулярное выражение не различает строчных и заглавных букв (то есть включает Porno, | Параметр -i означает, что регулярное выражение не различает строчных и заглавных букв (то есть включает Porno, | ||
- | PORNO, PoRNo и т.д.). Теперь блокируем все сомнительные | + | PORNO, PoRNo и т. д.). Теперь блокируем все сомнительные |
сайты: | сайты: | ||
acl nosex url_regex -i sex | acl nosex url_regex -i sex |
Версия 08:22, 16 мая 2008
Содержание |
Squid Настройка прокси-сервера
Пол Хадсон (Paul Hudson) затевает новую серию статей для продвинутых пользователей.
Недавно мучились с головоломной настройкой прокси-сервера? Ну и зря. О нудных проблемах должны заботиться небритые системные администраторы, сутками не вылезающие из офиса и ведрами хлебающие кофе. В данной рубрике мы будем рассказывать о вещах, подобных гоночным болидам: мощных и невероятно сложных. Зато интересных!
Squid — это круто
Вы угадали: Squid — это прокси-сервер. Но почему крутой? Скоро узнаете. У нас, в LinuxFormat, все начинают бесноваться, если какой-нибудь web-сайт открывается дольше наносекунды, переводя наше драгоценное время. При этом мы постоянно скачиваем новые дистрибутивы, так что пробки в канале нас тоже волнуют. Однако ситуация поправима: есть способ сэкономить — сразу! — и время, и полосу пропускания. Имя ему — правильно, Squid. Этот свободный скоростной прокси-сервер кэширует сайты и контролирует права доступа к сетевым ресурсам, а если его хорошенько попросить, то и порядок у вас наведет. В процессе урока вы узнаете, как:
- базовая установка Squid оптимизирует Интернет-соединение
- продвинутый Squid защищает детей от гадких сайтов
- Squid’но подшутить над вашими коллегами
Ну что ж, довольно слов. Начнем, пожалуй!
Кэш в руках
Установка Squid – это сложный мистический ритуал. Действуйте по алгоритму:
- Позвоните своему боссу/жене/мужу и сообщите, что вам придется пару суток чахнуть над компьютером.
- Выудите свой менеджер пакетов и установите пакет со Squid – в некоторых дистрибутивах он может называться squidd или squid-daemon.
- А теперь от души расслабьтесь. Все-то думают, что вы усердно вкалываете – самое время устроить каникулы!
Некоторые дистрибутивы запускают Squid автоматически при загрузке; в других, например, Fedora и SUSE, это нужно делать вручную. Для запуска Squid в Fedora, выполните от лица суперпользователя команду service squid start, а для подключения при загрузке — chkconfig -level 345 squid on. В SUSE, откройте YaST, выберите настройку системных сервисов (System Services) в разделе System (Система), отыщите в списке Squid, и активируйте его, щелкнув по кнопке Enable. Squid стартует, а потом будет сам включаться при загрузке системы. На худой конец, выполните команду /etc/init.d/squid start (или /etc/rc.d/squid start), она запускает Squid в большинстве дистрибутивов.
Мы запустили Squid без всякой настройки, и теперь он работает в фоновом режиме, ожидая HTTP-запросов. Чтобы убедиться, что он действительно работает, настроим-ка браузер на доступ в сеть через прокси.
Если вы используете Firefox, зайдите в Preferences (Настройки) в меню Edit (Правка), щелкните на кнопке Connection Settings (Настройки соединения) и выберите Manual Proxy Configuration (Ручная конфигурация прокси). Укажите в качестве прокси 127.0.0.1, а в качестве порта — 3128. Поставьте «галочку» напротив Use this proxy server for all protocols (Использовать этот прокси для всех протоколов).
Пользователям Konqueror следует зайти в Настройки Konqueror (Settings -> Configure Konqueror), перейти на вкладку Proxy (Прокси), щелкнуть на Manually Specify Proxy Settings (Указать настройки прокси-сервера вручную). В окне настроек введите 127.0.0.1 и 3128.
Теперь откройте окно терминала и выполните следующую команду от лица суперпользователя: tail -f /var/log/Squid/access.log. Да, запуск программ от лица root может быть опасен, однако Squid устанавливает права доступа к своим каталогам так, что читать их могут только пользователь «Squid» (или «proxy», это зависит от дистрибутива) и root. Так что обычным пользователям файлы журналов Squid не прочитать, и никто не догадается, по каким сайтам вы полазили! Откройте браузер и введите какой-нибудь адрес, не спуская глаз с окна терминала tail -f. Если все нормально заработало, там должны мелькать сообщения о том, что запрошенная страница в кэше не обнаружена и Squid получает ее из сети («TCP_MISS/200»).
В самом браузере страница открывается как обычно, только теперь она сохранена в кэше Squid. При следующем обращении Squid возьмет ее из кэша, а не из сети.
Все для всех
- Установите для опции «buffered_logs» в squid.conf значение «on» для кэширования лог-файлов перед их записью на диск.
- Squid может работать и как «обратный» прокси-сервер, кэшируя страницы вашего веб-сайта и отправляя их пользователям Интернета.
- Используя Squirm, вы можете «подменять» веб-сайты, перенаправляя пользователей на другие ресурсы.
- Помните, что для выполнения какого-то правила Squid должны выполняться все его условия. Допустим, если в одном правиле указано два различных временных интервала, то оно не выполнится никогда, потому что текущее время может попасть лишь в один промежуток времени.
Пока вы не побежали звонить своим друзьям/коллегам и приглашать их срочно опробовать ваш замечательный прокси-сервер, спешу сказать — обождите. По умолчанию Squid блокирует запросы со всех машин, кроме вашей, так что друзья-коллеги получат одни сообщения об ошибках. Чтобы пресечь это, а заодно и дурацкую манеру Squid использовать порт 3128, нужно отредактировать /etc/squid/squid.conf, небольшой конфигурационный файлик на пару тысяч строк кода. Отставить валерьянку! Объясняю: большинство из них — комментарии. Мы обойдемся десятью-пятнадцатью строками (только никому не рассказывайте).
Начнем с HTTP-порта. 3128 — не очень удачное число, сложновато для запоминания. Да и как только выйдет эксплойт для Squid, хакеры именно с этого порта и начнут. Большинство обладателей Squid меняют порт на 80, 1080, 8000 или 8080, это несложно: откройте в любимом редакторе Squid.conf (с правами root) и поищите строку http_port. Скорее всего, первым вхождением будет «TAG: http_port», начало директивы установки порта http_port. Спустившись ниже, вы обнаружите строку «# http_port 3128». # в начале строки обозначает комментарий, то есть данная строка Squid’ом игнорируется (3128-й порт явно устанавливать не нужно, он назначен по умолчанию). Удалите # и вместо 3128 подставьте нужный вам порт, например, 8080. Разумеется, настройку браузера тоже надо скорректировать.
Сохраните файл и запустите команду Squid -k reconfigure (с правами суперпользователя), чтобы Squid перечитал конфигурационный файл. Если вы не ищете легких путей, могу особо предложить другой вариант: kill -SIGHUP `cat /var/run/ squid.pid`. Результат тот же, просто это для любителей забивать гвозди микроскопом.
Уладив проблемы с портом, приступим к открытию доступа к прокси-серверу другим пользователям. Вернитесь в файл squid.conf и поищите в нем строку «acl all». ACL - аббревиатура от «Access Control List»: списки контроля доступа. Доступ, естественно, надо ограничить, чтобы до вас не добрались злые хакеры. По строке «acl all» вы найдете блок из 16-и строк — «рекомендуемая минимальная конфигурация» (оставьте его в покое), потом кое-какие комментарии и, наконец, строки http_access allow localhost (разрешен доступ к прокси-серверу с локальной машины) и http_access deny all (блокировать всех).
Как проще всего открыть доступ к вашему прокси-серверу? Всего-навсего поменять http_access deny all на http_access allow all! После этого сохраните squid.conf и выполните squid -k reconfigure. Теперь к вам может достучаться каждый встречный. Только не оставляйте прокси-сервер в таком состоянии надолго: разве что полные чайники держат прокси-сервер открытым настежь, зато и внушительный счет на оплату «левого» трафика им обеспечен.
Если все заработало (есть контакт с другими машинами), остановите Squid и снова измените правило на http_access deny all. Вы, наверное, удивитесь: чему тут не работать? Дело в том, что мы будем устанавливать гораздо более сложные ACL, и предварительно следует убедиться, что ваш прокси-сервер не блокирован собственным брандмауэром и проблемы могут возникать только у Squid. Кстати, если при «allow all» прокси-сервер не работает, либо выключите брандмауэр (метод грубой силы), либо разрешите на нем использование порта 8080.
Адреса закажет CIDR
Squid позволяет вам ограничить доступ по IP-адресам пользователей, причем вы можете указать точные адреса или задать группу адресов с помощью CIDR-нотации. Начнем с простейшей конфигурации для небольшой локальной сети, когда список адресов (назовем его «internal_network») вводится вручную. Компьютеры, не включенные в список, подключиться к вашему прокси-серверу не смогут. Вставьте в конфигурационный файл перед «http_access deny all» следующие строки:
acl internal_network src 192.168.133.1 192.168.133.2 192.168.133.3 192.168.133.22 http_access allow internal_network
(естественно, вы должны ввести IP-адреса компьютеров вашей локальной сети). Сохраните файл и заставьте Squid его перечитать — Squid -k reconfigure. Теперь убедимся, что «кому доступ, а кому и от ворот поворот»: с любого из перечисленных ip вы должны успешно зайти на сервер, а на попытку зайти с ip-адресов, не указанных в списке, получить сообщение «Access Denied» (Доступ запрещен).
[Прим. переводчика: Squid можно научить сообщать об ошибках на русском языке. Проверьте, есть ли у вас директория /usr/share/Squid/errors/Russian-koi8-r, и не пуста ли она. Если там имеются текстовые файлы, то стоит открыть /etc/Squid/Squid.conf и поменять значение переменной «error_directory» на «/usr/share/Squid/errors/Russian-koi8-r». После перезапуска Squid будет ругаться по-русски.]
Данный способ приемлем для малых сетей, однако если у вас тысячи компьютеров или используется динамическая адресация с DHCP-сервером, он уже не годится — в этом случае поможет CIDR-нотация адресов, до ужаса, правда, нудная и требующая знаний о двоичной системе счисления.
Кратко поясним: люди привыкли видеть IP-адреса в формате 123.123.123.123. А вот компьютеры работают с т. н. «длинным» IP-адресом, например, 2071690107 — думаете, случайное число? Вы будете смеяться, но это эквивалент 123.123.123.123.
В ip-адресах мы используем, разделяя точками, числа от 0 до 255. Самое малое число в двоичной системе будет выглядеть как 00000000 (0), а самое большое — как 11111111 (255). Компьютер переводит каждый сегмент ip-адреса в двоичную систему счисления и «склеивает» с остальными в одно длинное число. Например, число 123 — это 01111011, значит, адрес 123.123.123.123 преобразуется в 01111011011110110 1111011. В десятичной системе счисления получится как раз 2071690107. Улавливаете связь?
Теперь самая сложная часть. Диапазон ip-адресов в CIDR-нотации (ее еще называют краткой формой записи группы адресов) задается указанием неизменных разрядов и маски. Например, так: 192.168.100.0/24. Это значит, что первые 24 разряда двоичного эквивалента 192.168.100.0 остаются неизменными (это 192.168.100), а последние 8 бит могут меняться (0-255). А если адрес такой: 10.0.0.0/8, то фиксированы только первые 8 разрядов (это как раз первое число — 10), а остальные числа могут меняться. То есть вместо того, чтобы перечислять в конфигурационном файле все адреса от 192.168.0.1 до 192.168.0.255, мы можем указать их в краткой форме: 192.168.0.0/24.
Надеюсь, теорию вы усвоили. Продолжим настройку Squid:
acl internal_network src 192.168.132.0/24 192.168.133.0/24 192.168.134.10 http_access allow internal_network
Тут мы указали две группы адресов в CIDR-нотации (192.168.132.1-255 и 192.168.133.1-255) и еще один ip-адрес в обычном виде (192.168.134.10). Убедитесь, что правило «deny all» стоит после этих строк.
Детишки под контролем
Допущенный к родительскому компьютеру с благородной целью — делать уроки, ваш отпрыск в лучшем случае проест все деньги, часами просиживая в чатах и обмениваясь копиями игр, а в худшем — натащит вирусов и насмотрится порнухи. Оборонить компьютер поможет все тот же Squid!
Во-первых, можно просто перекрыть доступ к Интернету в определенное время дня — это будет хорошим стимулом сделать, наконец, домашнее задание (сообразительный малютка все равно откопает игру «Сапер», но тут уж ваша вина: нечего было использовать Windows в учебном процессе). Ограничение по времени устанавливается в ACL типа «time», только укажите день недели и временной промежуток. Дни недели обозначаются буквами: M — понедельник, T — вторник, W — среда, H — четверг, F — пятница, A — суббота, S — воскресенье; комбинация MTWHF (рабочие дни) — D. Так, для того, чтобы создать ACL для периода с Воскресенья по Четверг с 19:00 до 20:00, вставьте в Squid.conf такую строку:
acl homework_time time SMTWH 19:00-20:00
Раньше мы использовали ACL только для ограничения по ip-адресам. Теперь к ним добавятся ограничения по времени. Разграничим адреса детей (kids) и взрослых (adult):
acl kids_computers src 192.168.133.3 192.168.133.4 192.168.133.5 acl adult_computers src 192.168.133.0/24
Адреса взрослых расположены в диапазоне 192.168.133.1-255, но три адреса, хотя и входят в этот диапазон, в списке адресов взрослых не числятся, потому что раньше были указаны в другом списке — kids_computers. Создадим правила доступа для них:
http_access deny kids_computers homework_time http_access allow kids_computers http_access allow adult_computers
Второе и третье правила очевидны, однако в первом можно увидеть два параметра: kids_computers и homework_time. Squid работает с правилами в том порядке, в каком вы их записали. То есть в данном случае, он при попытке соединения смотрит на первое правило — если компьютер принадлежит списку kids_computers и текущее время входит во временной промежуток homework_time, то он сразу запрещает соединение и отправляется на заслуженный отдых. При несоблюдении хотя бы одного из указанных условий он переходит к разборке следующего правила, и так далее. Короче, соединение либо его запрет устанавливается на основании первой найденной строки, для которой выполняются все условия. Если список начинается с «accept all», то ни до каких дальнейших ограничений дело не дойдет. Главное — понять этот принцип и соблюдать правильный порядок (прокрутите свои правила в уме).
Что ж, пока детишки выполняют домашнее задание (блажен, кто верует), продолжим вакханалию запрещений и заблокируем скачивание файлов с сайтов сомнительного содержания.
Анализу подлежат три объекта: сомнительные сайты, о которых вы знаете, сомнительные сайты, о которых вы не знаете, и файлы, которые могут нагадить приютившему их компьютеру.
Для первого случая (запрет конкретного ресурса) предусмотрена директива dstdomain. Вот пример ее использования:
acl banned_sites dstdomain bbc.co.uk http_access deny kids_computers homework_time http_access deny kids_computers banned_sites http_access allow kids_computers
Мы запретили детям посещать любые сайты во время выполнения домашнего задания и bbc.co.uk в любое время. Причем в список запрещенных сайтов не попадают, например, news.bbc.co.uk и www.bbc.co.uk. Для того, чтобы запретить все ресурсы домена bbc.co.uk, нужно добавить перед ним точку: .bbc.co.uk.
Неизвестные вам сайты, не предназначенные для малолеток, вычисляются по употреблению нехороших слов, например «sex», «porno», «freeipod». Конечно, всех не перевешаешь, но мы можем воспользоваться регулярными выражениями:
acl noporno url_regex -i porno
Параметр -i означает, что регулярное выражение не различает строчных и заглавных букв (то есть включает Porno, PORNO, PoRNo и т. д.). Теперь блокируем все сомнительные сайты:
acl nosex url_regex -i sex acl nofreeipod url_regex -i freeipod acl noporno url_regex -i porno
Наконец, хорошо бы запретить детишкам скачивать подозрительные файлы. В регулярных выражениях можно использовать знаки «^» и «$», означающие начало и конец строки соответственно. Так, для того, чтобы заблокировать скачивание исполняемых файлов для Windows (с расширением exe), следует добавить что-то вроде этого:
acl noexe $ url_regex -i exe$
Знак доллара означает конец строки URL, так что сайт www.hexen.com не вызовет никаких подозрений у Squid, а вот http://evilsite.com/virus.exe будет заблокирован.
Хотите подшутить над коллегами? Сначала прикиньте, что вам за это будет – бойкот? Увольнение? Членовредительство?
Ладно, я все-таки обещал рассказать вам, как подшутить над коллегами. В конце концов, над своим ребенком вы уже поиздевались… Вы ведь экономите служебный трафик, так почему бы не воспользоваться своим положением?
Давайте заменим все анимированные GIF’ы, встречающиеся на web-сайтах, на изображение нашего подопытного кролика, Эндрю Грегори (Andrew Gregory).
Для выполнения сего действа нам понадобится переадресатор Squid: какая-нибудь утилита, незаметно переделывающая один URL в другой. Легально она может пригодиться, например, если пользователь хочет зайти на сайт www.coolsite.org, а зеркало этого сайта есть у вас в локальной сети. Чтобы сэкономить трафик, вы перенаправляете запрос на локальное зеркало.
Таким переадресатором является, например, Squirm (http://squirm.foote.com.au). Скачайте архив с программой и установите ее:
tar xvpfz squirm-1.0.tar.gz cd squirm-1.0 cd regex ./configure make cp regex.h regex.o .. groupadd squid make su <введите пароль> make install cd /usr/local/squirm/etc mv squirm.local.dist squirm.local chown -R squid /usr/local/squirm
Отредактируйте squid.conf: измените параметр «redirect_program» на /usr/local/squirm/bin/squirm (не забудьте удалить знак «#» перед этой строкой), потом найдите опцию «redirect_children» и установите значение в 10. Теперь создайте файл /usr/local/squirm/etc/squirm. patterns следующего содержания:
regexi gif$ http://www.linuxformat.co.uk/blog/wp-content/TacheWink.gif
Ключевое слово regexi задает регулярное выражение (не различающее верхний и нижний регистры), которому соответствуют все адреса, оканчивающиеся на «gif». Вместо них будет подставлено изображение TacheWink.gif.
Теперь для того, чтобы заработал Squirm, достаточно заставить Squid перечитать свои конфигурационные файлы: squid -k reconfigure.
Поздравляем: вы заработали звание подполковника армии Прокси!