Поиск по сайту:

Настройка прокси-сервера Squid с ограниченным доступом и настройка клиентов для использования прокси. Часть 5


Сертифицированный инженер Linux Foundation — это квалифицированный специалист, обладающий опытом установки, управления и устранения неполадок сетевых служб в системах Linux, а также отвечающий за проектирование, внедрение и текущее обслуживание системы. широкая архитектура.

Представляем программу сертификации Linux Foundation.

В Части 1 этой серии мы показали, как установить squid, прокси-кэширующий сервер для веб-клиентов. Прежде чем продолжить, прочтите этот пост (ссылка приведена ниже), если вы еще не установили Squid в свою систему.

  1. Часть 1. Установка сетевых служб и настройка автоматического запуска при загрузке

В этой статье мы покажем вам, как настроить прокси-сервер Squid для предоставления или ограничения доступа в Интернет, а также как настроить http-клиент или веб-браузер для использования этого прокси-сервера.

Настройка моей среды тестирования

Кальмар-сервер
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Клиентская машина 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Клиентская машина 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Напомним, что, говоря простым языком, веб-прокси-сервер — это посредник между одним (или несколькими) клиентскими компьютерами и определенным сетевым ресурсом, наиболее распространенным из которых является доступ в Интернет. Другими словами, прокси-сервер подключен с одной стороны напрямую к Интернету (или к маршрутизатору, который подключен к Интернету), а с другой стороны — к сети клиентских компьютеров, которые через него будут получать доступ во Всемирную паутину.

Вам может быть интересно, зачем мне добавлять еще одно программное обеспечение в мою сетевую инфраструктуру?

Вот 3 основные причины:

1. Squid сохраняет файлы из предыдущих запросов, чтобы ускорить будущую передачу. Например, предположим, что client1 загружает CentOS-7.0-1406-x86_64-DVD.iso из Интернета. Когда client2 запрашивает доступ к тому же файлу, squid может перенести файл из своего кэша вместо того, чтобы снова загружать его из Интернета. Как вы можете догадаться, вы можете использовать эту функцию для ускорения передачи данных в сети компьютеров, требующих частых обновлений того или иного типа.

2. ACL (Списки контроля доступа) позволяют нам ограничивать доступ к веб-сайтам и/или контролировать доступ для каждого пользователя. Вы можете ограничить доступ, например, по дню недели, времени суток или домену.

3. Обход веб-фильтров становится возможным благодаря использованию веб-прокси, к которому выполняются запросы и который возвращает запрошенный контент клиенту, вместо того, чтобы клиент запрашивал его напрямую в Интернет.

Например, предположим, что вы вошли в систему client1 и хотите получить доступ к www.facebook.com через маршрутизатор вашей компании. Поскольку сайт может быть заблокирован политиками вашей компании, вместо этого вы можете подключиться к веб-прокси-серверу и запросить доступ к www.facebook.com. Затем удаленный контент снова возвращается к вам через веб-прокси-сервер, минуя политику блокировки маршрутизатора вашей компании.

Настройка Squid – основы

Схема контроля доступа веб-прокси-сервера Squid состоит из двух разных компонентов:

  1. Элементы ACL — это строки директив, которые начинаются со слова «acl» и представляют типы тестов, которые выполняются для любой транзакции запроса.
  2. Правила списка доступа состоят из действий разрешить или запретить, за которыми следует ряд элементов ACL, и используются для указания того, какое действие или ограничение было применено. быть применено для данного запроса. Они проверяются по порядку, и поиск по списку прекращается, как только одно из правил совпадает. Если правило имеет несколько элементов ACL, оно реализуется как логическая операция И (чтобы правило соответствовало, все элементы ACL правила должны совпадать).

Основной файл конфигурации Squid — /etc/squid/squid.conf, его длина составляет ~5000 строк, поскольку он включает в себя как директивы конфигурации, так и документацию. По этой причине для нашего удобства мы создадим новый файл squid.conf, содержащий только те строки, которые содержат директивы конфигурации, оставляя пустые строки или строки с комментариями. Для этого мы будем использовать следующие команды.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

А потом,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Теперь откройте вновь созданный файл squid.conf и найдите (или добавьте) следующие элементы ACL и списки доступа.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

Две строки выше представляют собой базовый пример использования элементов ACL.

  1. Первое слово, acl, указывает, что это строка директивы элемента ACL.
  2. Второе слово, localhost или localnet, определяет имя директивы.
  3. Третье слово, src в данном случае, представляет собой тип элемента ACL, который используется для представления IP-адреса клиента или диапазона адресов соответственно. Вы можете указать один хост по IP (или имени хоста, если у вас реализовано какое-либо разрешение DNS) или по сетевому адресу.
  4. Четвертый параметр — это аргумент фильтрации, который «передается» в директиву.

Две строки ниже представляют собой правила списка доступа и представляют явную реализацию директив ACL, упомянутых ранее. Вкратце, они указывают, что доступ HTTP должен быть предоставлен, если запрос поступает из локальной сети (localnet) или с localhost. В частности, каковы разрешенные адреса локальной сети или локального хоста? Ответ: те, которые указаны в директивах localhost и localnet.

http_access allow localnet
http_access allow localhost

На этом этапе вы можете перезапустить Squid, чтобы применить все ожидающие изменения.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

а затем настройте клиентский браузер в локальной сети (192.168.0.104 в нашем случае) для доступа в Интернет через ваш прокси следующим образом.

В Firefox

1. Перейдите в меню Правка и выберите параметр Настройки.

2. Нажмите Дополнительно, затем вкладку Сеть и, наконец, Настройки

3. Установите флажок Настройка прокси-сервера вручную и введите IP-адрес прокси-сервера и порт, который он прослушивает. для связей.

Примечание. По умолчанию Squid прослушивает порт 3128, но вы можете изменить это поведение, отредактировав список доступа. > правило, которое начинается с http_port (по умолчанию оно читается как http_port 3128).

4. Нажмите ОК, чтобы применить изменения, и все готово.

Проверка того, что клиент имеет доступ к Интернету

Теперь вы можете убедиться, что ваш клиент локальной сети имеет доступ к Интернету через прокси-сервер следующим образом.

1. В клиенте откройте терминал и введите:

ip address show eth0 | grep -Ei '(inet.*eth0)'

Эта команда отобразит текущий IP-адрес вашего клиента (192.168.0.104 на следующем изображении).

2. В своем клиенте используйте веб-браузер, чтобы открыть любой веб-сайт (в данном случае linux-console.net).

3. На сервере запустите.

tail -f /var/log/squid/access.log

и вы получите просмотр запросов, обслуживаемых через Squid, в режиме реального времени.

Ограничение доступа по клиенту

Теперь предположим, что вы хотите явно запретить доступ к этому конкретному IP-адресу клиента, сохраняя при этом доступ для остальной части локальной сети.

1. Определите новую директиву ACL следующим образом (я назвал ее ubuntuOS, но вы можете назвать ее как хотите).

acl ubuntuOS src 192.168.0.104

2. Добавьте директиву ACL в список доступа к локальной сети, который уже существует, но поставьте перед ним восклицательный знак. Это означает: «Разрешить доступ в Интернет клиентам, соответствующим директиве ACL локальной сети, за исключением того, который соответствует директиве ubuntuOS».

http_access allow localnet !ubuntuOS

3. Теперь нам нужно перезапустить Squid, чтобы изменения вступили в силу. Затем, если мы попытаемся перейти на любой сайт, мы обнаружим, что доступ теперь запрещен.

Настройка Squid – тонкая настройка

Ограничение доступа по домену и/или по времени суток/дню недели

Чтобы ограничить доступ к Squid по домену, мы будем использовать ключевое слово dstdomain в директиве ACL следующим образом.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Где forbidden_domains — это обычный текстовый файл, содержащий домены, доступ к которым мы хотим запретить.

Наконец, мы должны предоставить доступ к Squid для запросов, не соответствующих указанной выше директиве.

http_access allow localnet !forbidden

Или, может быть, мы захотим разрешить доступ к этим сайтам только в определенное время дня (с 10:00 до 11:00) только в понедельник (M), Среда (Ср) и Пятница (Пт).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

В противном случае доступ к этим доменам будет заблокирован.

Ограничение доступа путем аутентификации пользователя

Squid поддерживает несколько механизмов аутентификации (Basic, NTLM, Digest, SPNEGO и Oauth) и вспомогательных средств (база данных SQL, LDAP, NIS, NCSA и т. д.). В этом уроке мы будем использовать базовую аутентификацию с NCSA.

Добавьте следующие строки в ваш файл /etc/squid/squid.conf.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Примечание. В CentOS 7 плагин NCSA для squid можно найти в /usr/lib64/squid/basic_nsca_auth, поэтому измените его соответствующим образом в строке выше.

Несколько уточнений:

  1. Нам нужно указать Squid, какую вспомогательную программу аутентификации использовать с директивой auth_param, указав имя программы (скорее всего, /usr/lib/squid/ncsa_auth или /usr/lib64/squid/basic_nsca_auth), а также любые параметры командной строки (в данном случае /etc/squid/passwd), если необходимо.
  2. Файл /etc/squid/passwd создается с помощью htpasswd, инструмента для управления базовой аутентификацией через файлы. Это позволит нам добавить список имен пользователей (и соответствующих им паролей), которым будет разрешено использовать Squid.
  3. credentialsttl 30 минут потребует ввода имени пользователя и пароля каждые 30 минут (вы также можете указать этот временной интервал в часах).
  4. с учетом регистра указывает, что имена пользователей и пароли чувствительны к регистру.
  5. realm представляет собой текст диалога аутентификации, который будет использоваться для аутентификации в squid.
  6. Наконец, доступ предоставляется только в случае успешной аутентификации прокси (proxy_auth REQUIRED).

Выполните следующую команду, чтобы создать файл и добавить учетные данные для пользователя gacanepa (опустите флаг -c, если файл уже существует).

htpasswd -c /etc/squid/passwd gacanepa

Откройте веб-браузер на клиентском компьютере и попробуйте перейти на любой сайт.

Если аутентификация прошла успешно, доступ к запрошенному ресурсу предоставляется. В противном случае доступ будет запрещен.

Использование кэша для ускорения передачи данных

Одной из отличительных особенностей Squid является возможность кэширования ресурсов, запрошенных из Интернета, на диск, чтобы ускорить будущие запросы этих объектов тем же клиентом или другими.

Добавьте следующие директивы в ваш файл squid.conf.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Несколько пояснений к вышеуказанным директивам.

  1. ufs — формат хранения данных Squid.
  2. /var/cache/squid — каталог верхнего уровня, в котором будут храниться файлы кэша. Этот каталог должен существовать и быть доступен для записи Squid (Squid НЕ будет создавать этот каталог для вас).
  3. 1000 — это объем (в МБ), который будет использоваться в этом каталоге.
  4. 16 — это количество подкаталогов 1-го уровня, тогда как 256 — это количество подкаталогов 2-го уровня в /var/spool/squid.
  5. Директива maximum_object_size определяет максимальный размер разрешенных объектов в кэше.
  6. refresh_pattern сообщает Squid, как обращаться с конкретными типами файлов (в данном случае .mp4 и .iso) и как долго он должен хранить запрошенные файлы. объекты в кеше (2880 минут=2 дня).

Первый и второй 2880 представляют собой нижний и верхний пределы соответственно того, как долго объекты без явного срока действия будут считаться недавними и, следовательно, будут обслуживаться кешем, тогда как 0% — это процент возраста объектов (время с момента последней модификации), при котором каждый объект без явного срока действия будет считаться недавним.

Практический пример: загрузка файла .mp4 с двух разных клиентов и тестирование кеша

Первый клиент (IP 192.168.0.104) загружает файл 71 МБ .mp4 за 2 минуты 52 секунды.

Второй клиент (IP 192.168.0.17) скачивает тот же файл за 1,4 секунды!

Это связано с тем, что во втором случае файл был загружен из кэша Squid (обозначенного TCP_HIT/200), а не в первом случае, когда он был загружен непосредственно из Интернет (представленный TCP_MISS/200).

Ключевые слова HIT и MISS вместе с кодом ответа 200 http указывают, что файл был успешно обработан оба раза, но кеш был HIT. и Пропущен соответственно. Когда запрос по какой-то причине не может быть обслужен кэшем, Squid пытается обслужить его из Интернета.

Заключение

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

Вы можете обратиться к веб-сайту Squid для получения дополнительной документации (не забудьте также проверить вики), но не стесняйтесь обращаться к нам, если у вас есть какие-либо вопросы или комментарии. Мы будем более чем рады услышать ваше мнение!