LXF76:Hardcore Linux1

Материал из Linuxformat.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: == Squid Настройка прокси-сервера == '''''Пол Хадсон''' (Paul Hudson) затевает новую серию статей для продвинутых п...)
м (викификация)
Строка 9: Строка 9:
сложных. Зато интересных!
сложных. Зато интересных!
-
=== Squid это круто ===
+
=== Squid это круто ===
-
Вы угадали: Squid это прокси-сервер. Но почему крутой?
+
Вы угадали: Squid это прокси-сервер. Но почему крутой?
Скоро узнаете. У нас, в LinuxFormat, все начинают бесноваться, если какой-нибудь web-сайт открывается дольше наносекунды, переводя наше драгоценное время. При этом мы
Скоро узнаете. У нас, в LinuxFormat, все начинают бесноваться, если какой-нибудь web-сайт открывается дольше наносекунды, переводя наше драгоценное время. При этом мы
постоянно скачиваем новые дистрибутивы, так что пробки в
постоянно скачиваем новые дистрибутивы, так что пробки в
канале нас тоже волнуют. Однако ситуация поправима: есть
канале нас тоже волнуют. Однако ситуация поправима: есть
-
способ сэкономить сразу! и время, и полосу пропускания. Имя ему правильно, Squid. Этот свободный скоростной
+
способ сэкономить сразу! и время, и полосу пропускания. Имя ему правильно, Squid. Этот свободный скоростной
прокси-сервер кэширует сайты и контролирует права доступа
прокси-сервер кэширует сайты и контролирует права доступа
к сетевым ресурсам, а если его хорошенько попросить, то и
к сетевым ресурсам, а если его хорошенько попросить, то и
-
порядок у вас наведет.В процессе урока вы узнаете, как:
+
порядок у вас наведет. В процессе урока вы узнаете, как:
* базовая установка Squid оптимизирует Интернет-соединение
* базовая установка Squid оптимизирует Интернет-соединение
* продвинутый Squid защищает детей от гадких сайтов
* продвинутый Squid защищает детей от гадких сайтов
Строка 37: Строка 37:
делать вручную. Для запуска Squid в Fedora, выполните от
делать вручную. Для запуска Squid в Fedora, выполните от
лица суперпользователя команду service squid start, а для
лица суперпользователя команду service squid start, а для
-
подключения при загрузке - chkconfig -level 345 squid on.
+
подключения при загрузке 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, а в качестве порта 3128. Поставьте
+
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». # в начале строки обозначает комментарий, то есть данная строка
+
ниже, вы обнаружите строку «# 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« вы найдете блок
+
добрались злые хакеры. По строке «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. Кстати, если при “allow
+
ACL, и предварительно следует убедиться, что ваш прокси-сервер не блокирован собственным брандмауэром и проблемы могут возникать только у Squid. Кстати, если при «allow
-
all” прокси-сервер не работает, либо выключите брандмауэр
+
all» прокси-сервер не работает, либо выключите брандмауэр
(метод грубой силы), либо разрешите на нем использование
(метод грубой силы), либо разрешите на нем использование
порта 8080.
порта 8080.
Строка 140: Строка 140:
(естественно, вы должны ввести IP-адреса компьютеров
(естественно, вы должны ввести IP-адреса компьютеров
вашей локальной сети). Сохраните файл и заставьте Squid
вашей локальной сети). Сохраните файл и заставьте Squid
-
его перечитать Squid -k reconfigure. Теперь убедимся, что
+
его перечитать Squid -k reconfigure. Теперь убедимся, что
«кому доступ, а кому и от ворот поворот»: с любого из перечисленных ip вы должны успешно зайти на сервер, а на
«кому доступ, а кому и от ворот поворот»: с любого из перечисленных ip вы должны успешно зайти на сервер, а на
попытку зайти с ip-адресов, не указанных в списке, получить
попытку зайти с ip-адресов, не указанных в списке, получить
Строка 153: Строка 153:
Данный способ приемлем для малых сетей, однако если
Данный способ приемлем для малых сетей, однако если
у вас тысячи компьютеров или используется динамическая
у вас тысячи компьютеров или используется динамическая
-
адресация с DHCP-сервером, он уже не годится в этом случае поможет CIDR-нотация адресов, до ужаса, правда, нудная
+
адресация с 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), а самое большое как 11111111
+
выглядеть как 00000000 (0), а самое большое как 11111111
(255). Компьютер переводит каждый сегмент ip-адреса в двоичную систему счисления и «склеивает» с остальными в одно
(255). Компьютер переводит каждый сегмент ip-адреса в двоичную систему счисления и «склеивает» с остальными в одно
-
длинное число. Например, число 123 это 01111011, значит,
+
длинное число. Например, число 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 бит могут меняться (0–255). А если адрес такой: 10.0.0.0/8, то фиксированы
+
разряда двоичного эквивалента 192.168.100.0 остаются неизменными (это 192.168.100), а последние 8 бит могут меняться (0-255). А если адрес такой: 10.0.0.0/8, то фиксированы
-
только первые 8 разрядов (это как раз первое число 10),
+
только первые 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.1–255 и 192.168.133.1–255) и еще один ip-адрес
+
(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 вторник, W среда, H четверг, F пятница, A суббота,
+
T вторник, W среда, H четверг, F пятница, A суббота,
-
S воскресенье; комбинация MTWHF (рабочие дни) D. Так,
+
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.1–255, но три адреса, хотя и входят в этот диапазон, в списке адресов взрослых не числятся, потому что раньше были
+
Адреса взрослых расположены в диапазоне 192.168.133.1-255, но три адреса, хотя и входят в этот диапазон, в списке адресов взрослых не числятся, потому что раньше были
-
указаны в другом списке kids_computers. Создадим правила
+
указаны в другом списке 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 и текущее время входит во
+
записали. То есть в данном случае, он при попытке соединения смотрит на первое правило если компьютер принадлежит списку 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 – это сложный мистический ритуал. Действуйте по алгоритму:

  1. Позвоните своему боссу/жене/мужу и сообщите, что вам придется пару суток чахнуть над компьютером.
  2. Выудите свой менеджер пакетов и установите пакет со Squid – в некоторых дистрибутивах он может называться squidd или squid-daemon.
  3. А теперь от души расслабьтесь. Все-то думают, что вы усердно вкалываете – самое время устроить каникулы!

Некоторые дистрибутивы запускают 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.

Поздравляем: вы заработали звание подполковника армии Прокси!

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию