Перед многими системными администраторами встает вопрос ограничения доступа пользователей к тем или иным ресурсам сети интернет. В большинстве случаев в ресурсоемкой и сложной контент фильтрации нет необходимости, вполне достаточно URL-списков. Реализовать такой метод вполне возможно средсвами прокси-сервера squid не привлекая стороннего ПО.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Метод "черных" и "белых" списков идеально подходит для ограничения доступа к ресурсам, адреса которых заранее известны, но по какой-либо причине являются нежелательными, например социальные сети. По сравнению с контентной фильтрацией такой способ имеет множество недостатков, но с другой стороны он гораздо проще в реализации и требует гораздо меньше вычислительных ресурсов.
Эффективность данного метода следует рассматривать с точки зрения поставленной задачи, так если требуется заблокировать для сотрудников соцсети и ряд развлекательных ресурсов, на которых они проводят больше всего времени, то фильтрация по URL-спискам способна полностью решить эту проблему. В тоже время такая фильтрация окажется малоэффективной, если нужно ограничить доступ к любым ресурсам определенного содержания.
В дальнейшем мы будем подразумевать, что читатель обладает начальными навыками администрирования Linux. Также напомним, что все приведеные ниже команды следует выполнять от супрепользователя.
Прежде всего создадим файл списка. Располагаться он может в любом месте, но будет логично разместить его в конфигурационной директории squid - /etc/squid (или /etc/squid3 если вы используете squid3)
touch /etc/squid/blacklist
и приступим к его заполнению. При указании URL следует использовать RegExp синтаксис, мы не будем подробно останавливаться на этом вопросе, так как это выходит за рамки статьи, подробнее с правилами RegExp можно ознакомиться здесь. Для примера заблокируем популярные соцсети:
vk\.com
odnoklassniki\.ru
Обратите внимание, точка в RegExp является служебным симоволом и поэтому должна быть экранирована символом \ (обратный слеш).
В конфигурационном файле squid (/etc/squid/squid.conf) создадим acl список, в который включим хосты или пользователей, для которых будет производиться фильтрация.
acl url_filtred src 10.0.0.100-10.0.0.199
В нашем случае фильтрация включена для всех хостов в диапазоне адресов 10.0.0.100-199, т.е. мы будем фильтровать интернет только для определенной группы пользователей.
Затем подключим наш список:
acl blacklist url_regex -i "/etc/squid/blacklist"
Ключ -i указывает на то, что список нечувствителен к регистру.
Теперь перейдем в секцию правил и перед правилом
http_access allow localnet
укажем:
http_access deny blacklist url_filtred
Еще раз обратим ваше внимание, что все правила в squid обрабатываются последовательно, до первого вхождения, поэтому если мы разместим более общее правило перед более частным, то оно работать не будет. То же самое справедливо и для перекрывающихся правил - сработает самое первое.
Сохраним изменения и перезапустим squid:
service squid restart
Попробуем посетить сайт из списка, если все сделано правильно, то вы увидите сообщение squid о запрете доступа к данному ресурсу.
В дальнейшем вы можете дополнять списки, не забывая каждый раз после этого перезапускать squid.
Рассмотрим немного иную ситуацию, требуется фильтровать интернет для всех, кроме определенной группы. В этом случае создадим acl для исключенных пользователей:
acl url_no_filtred src 10.0.0.127 10.0.0.100
и изменим запрещающее правило следующим образом:
http_access deny blacklist !url_no_filtred
Также вы можете использовать несколько URL-списков и списков доступа, гибко регулируя доступ для разных групп пользователей.
Вернемся к регулярным выражениям. Допустим, что нам нужно заблокировать не ресурс целиком, а его часть, тогда составим строку таким образом, чтобы она обязательно содержала нужную часть адреса, например строка:
my\.mail\.ru
Заблокирует доступ к социальной сети Мой мир, но не будет препятствовать доступу к Майл.ру.
В качестве строки можно использовать не только доменное имя, но и его часть. Так если мы внесем в список простую строку
mail
то это приведет к блокировке всех ресурсов, у которых данное сочетание входит в доменное имя, т.е. и mail.ru и hotmail.com. Поэтому к составлению списков, особенно содержащих короткие простые сочетания, нужно подходить осторожно.
Рассмотрим простой, но показательный пример. Допустим нужно заблокировать известный сайт auto.ru и его поддомены. Если мы, не долго думая, напишем
auto\.ru
То вместе с требуемым порталом будут заблокированы все сайты имеющие данное сочетание в имени, например abc-auto.ru. Есть о чем задуматься. Если с поддоменами все просто, достаточно написать
\.auto\.ru
и все что содержит точку перед искомым адресом будет заблокировано, то с основным доменом сложнее, самое время вспомнить про полный формат адреса:
http\:\/\/(www\.)?auto\.ru
Теперь будут заблокированы только адреса начинающиеся с http://auto.ru, конструкция (www\.)? обозначает, что префикс www c точкой могут быть, а могут не быть. Зато другие сайты, содержащие auto.ru будут нормально открываться.
Напоследок рассмотрим еще одну ситуацию, как сделать, чтобы на заблокированом сайте были доступны некоторые страницы. Например, страничка компании в Вконтакте или вы хотите обезопасить определенные адреса от случайного попадания под фильтр в будущем. Для этого следует добавить к системе "белый" список. Создадим файл списка:
touch /etc/squid/whitelist
внесем в него нужные адреса, для примера разблокируем страничку Вконтакте новостного портала Утро.ру:
vk\.com\/na_utro_ru
Подключим лист:
acl whitelist url_regex -i "/etc/squid/whitelist"
и добавим правило перед запрещающим, в итоге должно получиться:
http_access allow whitelist
http_access deny blacklist url_filtred
Так как разрешающее правило расположено раньше, то указанные в "белом" листе ресурсы будут доступны, несмотря на то, что будут попадать под правила "черного".
Как видим, технология URL-фильтрации по спискам при помощи squid очень проста и позволяет в кратчайшие сроки ограничить доступ к нежелательным ресурсам, ниже приведен набор используемых нами списков, которыми вы можете воспользоваться.
URL-списки: url-list.zip
Дополнительные материалы:
- Linux. Настройка роутера (NAT + DHCP + Squid)
- Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3
- Ubuntu Server. Настраиваем контент-фильтр роутера (DansGuardian)
- DansGuardian. Сложности фильтрации русскоязычного контента
- Ubuntu Server. Настраиваем антивирусный фильтр роутера (ClamAV)
- Ubuntu Server. Дополняем контент-фильтр роутера антивирусом (DansGuardian + ClamAV)
- Ubuntu Server. Настраиваем форвардинг портов на роутере
- Ubuntu Server. Настраиваем аутентификацию через Squid
- Ubuntu Server. Ограничиваем скорость клиентов через Squid
- SARG - анализируем логи прокси-севера Squid
- SAMS - веб-интерфейс для управления Squid и не только
- Squid - настраиваем URL-фильтрацию по спискам
- Squid - блокируем потоковое мультимедиа
- Как устроена и работает система контроля доступа в Squid
- Настраиваем Squid для работы с Active Directory. Часть 1 - базовые настройки
- Настраиваем Squid для работы с Active Directory. Часть 2 - Kerberos-аутентификация
- Настраиваем Squid для работы с Active Directory. Часть 3 - Авторизация на основе групп AD
- WPAD или автоматическая настройка параметров прокси
- Устраняем ошибки Windows Update при работе через прокси-сервер Squid
- Настраиваем ограничение скорости для пользователей в Squid
- Сборка Squid 3.5 с поддержкой SSL из исходных кодов для Debian / Ubuntu
- Настраиваем роутер NAT + DHCP + Squid3 с поддержкой фильтрации SSL-трафика
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии