Squid — это популярный прокси-сервер, который используется в основном для кэширования часто запрашиваемого веб-контента, чтобы уменьшить время отклика страниц, а также для фильтрации сетевого трафика. Он поддерживает множество различных протоколов таких как HTTP, FTP, TLS, SSL, Internet Gopher и HTTPS. А еще эта штука может быть очень полезной при медленном интернет-соединении. Первоначально Squid был разработан как Unix демон, но потом было выпущено несколько портов для WIndows. Squid распространяется под лицензией GNU General Public License.
В этой инструкции вы узнаете как установить Squid в Ubuntu 16.04. Просто последовательно выполняйте эти инструкции и установка squid ubuntu не вызовет никаких проблем. Squid это довольно многофункциональная программа и мы не сможем охватить в этой статье все ее функции, но попытаемся рассмотреть основные, чтобы вы смогли ее полностью настроить и использовать. Начнем с установки.
Есть несколько способов установки Squid в Ubuntu, один из самых распространенных — установка из официальных репозиториев с помощью утилиты apt.
Сначала откройте терминал сочетанием клавиш Ctrl+Alt+T и обновите индекс пакетов:
После обновления списка пакетов можно переходить к установке прокси-сервера просто выполните команду:
Затем утилита спросит нужно ли продолжать установку, введите Y и дождитесь окончания загрузки и установки:
Затем можно переходить к настройке.
Конфигурационный файл сервера находится в директории /etc/squid. В зависимости от версии Squid название папки и самого файла может отличаться, например, /etc/squid3/squid.conf или /etc/squid/squid.conf. Все настройки находятся в этом файле. Давайте его рассмотрим.
Когда откроется файл вы увидите что то похожее:
Файл содержит несколько опций настроек, а также очень много документации по их использованию. Мы не будем трогать многие из них, но основные рассмотрим.
Сначала нам нужно настроить правила доступа клиентов к нашему прокси-серверу. Squid проектировался как программа для организаций и даже если вы используете его дома, настройка squid 3 тоже должна быть выполнена.
Для это используется acl список. это обычный список объектов, сейчас он вообще ничего не значит. Это могут быть ip адреса, порты и т д. Потом мы укажем программе что нужно делать с этим списком, разрешать или запрещать доступ. Синтаксис создания acl списка такой:
aclимя_спискатип_спискаэлемент_списка
Таких строк может быть несколько с одним именем и типом, из них получается список. Имя списка может быть произвольным, мы его еще будем использовать. Тип списка это намного интереснее. Может быть одним из:
- src — ip адрес откуда исходит соединение, адрес клиента;
- dst — ip адрес назначения соединения, адрес сервера, к которому хочет получить доступ клиент;
- dstdomain — домен назначения соединения;
- srcdomain — домен клиента;
- arp — MAC адрес сетевой карты клиента;
- time — время, когда выполняется соединение;
- port — порт, к которому пытается получить доступ клиент;
- proto — протокол, по которому устанавливается соединение;
- method — метод передачи данных, например, GET — передача данных HTTP, POST — передача данных форм в HTTP, CONNECT — запрос соединения с сервером;
- http_status — ответ сервера;
- browser — браузер клиента;
- url_regex — url адрес, к которому пытаются получить доступ.
Это далеко не все типы списков, но для начала хватит, а более подробная информация есть в том же конфигурационном файле.
Добавим список, для доступа к серверу из локальной сети:
acl localnet src 192.168.0.0/16
Создадим список Safe_ports, чтобы разрешить трафик на порты основных сетевых служб, а также незарегистрированные порты выше 1024:
acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http
Создадим еще два списка — SSL_ports и connect, чтобы разрешить использовать метод connect только для ssl соединений. Это запретит клиенту использовать другие прокси-серверы поверх нашего:
acl SSL_ports port 443
acl connect method CONNECT
Как я уже говорил, эти списки сами по себе ничего не значат и никак не влияют на работу сервера. Чтобы применить список нужно использовать директиву http_access. Ее синтаксис:
http_access действие имя_списка
Действие может быть allow (разрешить) или deny (запретить). теперь запретим доступ ко всем портам, кроме заданных в Safe_ports:
http_access deny !Safe_ports
Дальше запретим использование метода CONNECT кроме SSL соединений:
http_access deny Connect !SSL_ports
Теперь разрешим доступ из этого компьютера (acl список localhos предопределен):
http_access allow localhost
Разрешим доступ из локальной сети:
http_access allow localnet
И запретим все остальное:
http_access deny all
Контроль доступа, это один из самых важных компонентов, но настройка squid ubuntu на этом незакончена. Есть еще много интересных параметров, мы рассмотрим только несколько из них:
http_port — задает ip адрес и порт, на котором будет работать программа. Можно запускать прокси только на этом компьютере такой конструкцией:
http_port localhost:3218
Или в локальной сети:
http_port :3128
https_port — задает ip адрес и порт, на котором будут приниматься https соединения. Мы не рассматриваем работу с https в этой статье.
cache_mem — количество памяти, которая выделяется для кэширования объектов.
cache_dir — позволяет задать папку для хранения кэша. По умолчанию весь кэш хранится в оперативной памяти. Синтаксис:
cache_dirфайловая_системапапкаразмер_в_мб L1 L2
L1 и L2 — количество подпапок первого и второго уровня. Файловая система определяет каким образом данные будут писаться на диск. Например:
cache_dir aufs /var/spool/squid 100 16 256
coredump_dir — директория, в которую будет сохранен дамп памяти в случае ошибки.
refresh_pattern — очень интересный параметр, который позволяет продлить время жизни объектов в кэше. Синтаксис такой:
refresh_pattern-iрегулярное_выражениеминимальное_времяпроцентмаксимальное_времяпараметры
- регулярное выражение — задает объекты, к которым нужно применять параметр;
- минимальное_время — время в минутах пока объект считается свежим;
- максимальное_время — максимальное время в минутах, пока объект будет свежим;
параметры могут быть такие:
- override-expire — игнорировать заголовок expire;
- override-lastmod — игнорировать последнюю дату изменения файла;
- reload-into-ims — вместо не кэшировать отправлять запрос If-Modified-Since;
- ignore-reload — игнорировать запросы клиента не кэшировать.
Например:
refresh_pattern -i .gif$ 43200 100% 43200 override-lastmod override-expire
Вам могут понадобиться и другие настройки после того, как установка squid ubuntu Будет завершена. Но они выходят за рамки этой статьи. Теперь сохраните изменения, закройте файл и перезагрузите Squid:
Если эта команда вернет ошибку, попробуйте другую:
Осталось проверить работу нашего прокси-сервера. Это можно сделать с помощью любого браузера. Откройте настройки браузера и выполните настройку прокси. Я покажу как это сделать в Mozilla Firefox. Если у вас другой браузер, например, Google Chrome думаю вы разберетесь как там настраивается прокси.
Откройте браузер, перейдите в Настройка —> Дополнительно —> Сеть. Затем нажмите Настройки в разделе Подключение и выберите настроить прокси вручную:
В поле HTTP прокси укажите IP адрес машины, на которой выполнялась установка Squid сервера, а в поле порт — номер порта 3128. Этот порт используется по умолчанию в Squid, но вы можете изменить номер порта с помощью /etc/squid/squid.conf
Нажмите ОК, и прокси начнет работать.
В этой статье была рассмотрена установка и настройка squid ubuntu 16.04. Мы рассматривали только основные моменты, которые могут понадобиться каждому пользователю. Если вам нужна более тонкая настройка, такая как ограничение скорости и так далее, вам придется обратиться к документации программы. Если у вас остались вопросы, спрашивайте в комментариях!
Материалы о построении роутера на базе Squid — одни из самых популярных на нашем сайте. Такое решение позволяет с минимальными затратами (прежде всего на программную часть) организовать и упорядочить доступ к сети интернет на предприятии. Но рассматриваемые нами варианты предназначались преимущественно для работы в составе рабочей группы. Отсутствие интеграции с Active Directory резко снижало удобство применения такого роутера в доменных сетях, поэтому мы решили исправить это упущение.
В процессе подготовки данного материала мы не планировали отдельно останавливаться на подготовке сервера, намереваясь использовать для этого уже существующий материал: Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3. Однако, когда количество уточнений и отличий стало превышать разумные пределы, мы решили посвятить этому вопросу отдельную статью. В тоже время мы предполагаем, что читатель знаком с вышеуказанным материалом и поэтому не будем объяснять подробно многие используемые нами настройки и не будем останавливаться на второстепенных деталях.
Особенности интеграции с Active Directory
В чем смысл интеграции прокси-сервера Squid в Active Directory? Скажем сразу, что если ваша основная цель — просто раздать интернет всем и без ограничений, ну разве что закрыв социальные сети, то дальше можно не читать, уже описанная нами конфигурация полностью удовлетворит ваши потребности. Основное преимущество интеграции роутера в Active Directory — это использование единой точки аутентификации и управление доступом к сети интернет на базе уже существующих в домене учетных записей и групп безопасности.
Отсюда следуют некоторые особенности. Так прозрачный режим не поддерживает аутентификацию и от него придется отказаться, указывая настройки прокси непосредственно в настройках браузера. Этот процесс несложно автоматизировать при помощи DHCP-сервера и протокола WPAD.
В качестве DNS-серверов, в том числе и на роутере, должны обязательно указываться только доменные DNS, по умолчанию DNS-сервером является каждый контроллер домена. По этой причине роутер не должен иметь роли DNS-сервера. Также, для обеспечения интеграции с AD, роль DHCP-сервера также следует передать Windows Server, обычно на один или несколько контроллеров домена.
Теперь подходим к тому, ради чего все это затевалось. Аутентификация по доменным учетным записям позволяет использовать единую точку входа (SSO, Single Sign-On), когда пользователь вводит логин и пароль один раз — при входе в систему. Это достигается применением протокола Kerberos, который является способом аутентификации в AD по умолчанию. В отличии от авторов иных руководств, мы не видим смысла настраивать NTLM или Basic-аутентификацию, в первую очередь по соображениям безопасности. Тем более Kerberos поддерживают все современные операционные системы.
Следующим шагом является авторизация на основе существующих групп безопасности, это особенно актуально при переходе с Forefront TMG или ISA Server. Это позволяет один раз настроив Linux-сервер дальнейшее управление доступом осуществлять привычным способом — через группы Active Directory, что позволяет снизить порог вхождения для администраторов.
Так как Active Directory имеет более сложную структуру и большее количество «действующих лиц», то чтобы вы не запутались в используемых нами адресах и именах хостов мы подготовили небольшую схему:
В наших примерах будет использоваться домен Active Directory с FQDN именем interface31.lab, за который отвечают два контроллера домена SRV-DC01 и SRV-DC02 с адресами 192.168.31.101 и 102 соответственно. Оба контроллера реализованы на базе Windows Server 2012 R2.
Роутер выполнен на базе Ubuntu Server 14.04 (Debian 7/8) и имеет имя SRV-GW01 с адресом 192.168.31.100. Также в сети имеется группа серверов со статическими адресами 192.168.31.103-105 и клиентские ПК, адреса которым выдаются DHCP сервером из диапазона 192.168.31.111-199.
Настройка сети
Сеть настраивается традиционным образом, посредством правки конфигурационного файла /etc/network/interfaces. Примем что внешней сети соответствует интерфейс eth0, а внутренней eth1. В результате настройки у нас должно получиться примерно следующее:
auto lo iface lo inet loopbackauto eth0 iface eth0 inet static address 172.18.0.106 netmask 255.255.240.0 gateway 172.18.0.1 dns-search interface31.lab dns-nameservers 192.168.31.101 192.168.31.102auto eth1 iface eth1 inet static address 192.168.31.100 netmask 255.255.255.0post-up /etc/nat
Обратите внимание, что несмотря на то, что в настройках внешнего интерфейса использован внешний адрес и шлюз, адреса DNS-серверов указаны внутренние. Также указана опция dns-search, которая определяет домен для разрешения не FQDN-имен. Это означает, что к каждому короткому имени будет автоматически добавлен указанный домен, например, srv-dc01 будет дополнено до srv-dc01.interface31.lab.
Если вас смущает указание внутренних DNS в настройках внешней сетевой карты, то можете перенести эти строки в секцию eth1, на работу сервера это не повлияет.
DNS-сервера провайдера или публичные DNS следует указать в разделе Серверы пересылки внутреннего DNS-сервера на любом из контроллеров домена.
Если вы получаете сетевые настройки от провайдера по DHCP, то для использования внутренних серверов имен, вместо DNS провайдера секция eth0 должна иметь вид:
auto eth0 iface eth0 inet dhcp dns-search interface31.lab dns-nameservers 192.168.31.101 192.168.31.102
Таким образом явно указанные настройки перекроют полученные автоматом от провайдера.
Сохраняем содержимое файла, перезагружаемся. Проверяем наличие интернета на сервере и разрешение имен. Например, выполните команду:
nslookup srv-dc02
Ответить вам должен первый указанный доменный сервер имен, в нашем случае 192.168.33.101 и выдать полное FQDN-имя хоста и его IP-адрес.
После чего проверьте разрешение внешних имен:
nslookup ya.ru
Вы также должны получить ответ от внутреннего сервера. На этом настройку сети можно считать законченной.
Настройка NAT и брандмауэра
Базовая настройка брандмауэра принципиально ничем не отличается от варианта роутера для рабочей группы, за одним исключением. Так как наш прокси является непрозрачным, то существует возможность выхода напрямую через NAT, если по какой-то причине браузер не будет настроен на работу с прокси-сервером. Поэтому ограничим доступ по HTTP (порт 80) для всех клиентов локальной сети, за исключением серверов и отдельных хостов, которым может потребоваться прямой доступ.
Мы считаем, что прокси-сервер нужен в первую очередь для контроля пользователей, поэтому заворачивать на него сервера и служебные хосты, которые не предоставляют доступ к интернет пользователям, не видим никакого смысла.
Создадим и откроем файл /etc/nat
touch /etc/nat
внесем в него следующее содержимое:
#!/bin/sh# Включаем форвардинг пакетовecho 1 > /proc/sys/net/ipv4/ip_forward# Сбрасываем настройки брандмауэраiptables -Fiptables -Xiptables -t nat -Fiptables -t nat -X# Разрешаем доступ из локальной сетиiptables -A INPUT -i eth1 -j ACCEPT# Разрешаем инициированные нами подключения извнеiptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT# Разрешаем подключения по SSHiptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT#Запрещаем входящие извнеiptables -A INPUT -i eth0 -j DROP# Разрешаем инициированные нами транзитные подключения извнеiptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT#Разрешаем HTTP серверамiptables -A FORWARD -i eth1 -s 192.168.31.101 -p tcp --dport 80 -j ACCEPT...iptables -A FORWARD -i eth1 -s 192.168.31.105 -p tcp --dport 80 -j ACCEPT#Запрещаем HTTPiptables -A FORWARD -i eth1 -p tcp --dport 80 -j DROP# Запрещаем транзитный трафик извнеiptables -A FORWARD -i eth0 -o eth1 -j DROP# Включаем NATiptables -t nat -A POSTROUTING -o eth0 -s 192.168.31.0/24 -j MASQUERADE
Секция #Разрешаем HTTP серверам подразумевает набор идентичных правил для каждого хоста, которому мы разрешаем выход в интернет в обход прокси. В нашем случае это адреса от 192.168.31.101 до 192.168.31.105, чтобы не загромождать пример мы написали первый и последний, разделив их многоточием (которого в реальном конфиге быть не должно).
Сохраним файл и дадим ему права на исполнение:
chmod +x /etc/nat
Перезагрузимся:
reboot
После чего можно проверить интернет на клиентах, на тех, которые входят в список исключений — он будет, на остальных нет. Другие протоколы: почта (SMTP, POP3, IMAP), FTP, HTTPS и т.п. должны работать на всех клиентах.
Настройка синхронизации времени
Для успешной работы с доменом Active Directory и прохождения Kerberos-аутентификации важно чтобы часы роутера были синхронизированы с часами контроллера домена.
Установим NTP-клиент:
apt-get install ntp
Затем откроем файл конфигурации /etc/ntp.conf и закомментируем все строки, начинающиеся на server. После чего добавим две свои записи:
server srv-dc01.interface31.labserver srv-dc02.interface31.lab
Как вы уже, наверное, догадались, мы закомментировали записи сторонних серверов времени и добавили в этом качестве контроллеры домена.
Затем добавим в конец файла две строки, ограничивающие работу NTP-клиента внутренним интерфейсом:
interface ignore wildcardinterface listen eth1
Сохраняем файл и перезапускаем службу:
service ntp restart
Чтобы убедиться, что NTP работает только на внутреннем интерфейсе, выполните:
ss -l | grep 123
В выводе команды должны быть только внутренние адреса и адреса локальной петли (localhost):
Проверить синхронизацию можно командой:
ntpq -p
В выводе обращаем внимание на колонки: when -время с последнего ответа сервера, pool — время опроса сервера, offset — разница времени в секундах.
Если ваш роутер расположен в виртуальной среде, то при загрузке, пока система не знает с кем синхронизировать время, время внутри виртуальной машины синхронизируется с временем гипервизора. Поэтому либо отключите эту функцию в настройках виртуальной машины, либо синхронизируйте часы гипервизора с часами домена.
Настройка кеширующего прокси-сервера Squid3
Внимание! Если вы перенастраиваете сервер для рабочей группы, то обязательно удалите пакет dnsmasq или иные DNS и DHCP сервера!
Важно! Начиная с Debian 9 и Ubuntu 16.04 вместо пакета squid3 снова используется squid, также аналогичным образом следует изменить все пути, т.е. вместо /etc/squid3 использовать /etc/squid.
Установим прокси-сервер squid3 командой:
apt-get install squid3
Откроем конфигурационный файл /etc/squid3/squid.conf и зададим минимальную конфигурацию, добавив или раскомментировав в соответствующих секциях указанные строки.
Укажем acl элемент для локальной сети:
acl localnet src 192.168.31.0/24
Минимальный набор списков доступа:
http_access allow localnethttp_access allow localhosthttp_access deny all
Интерфейсы, порты и режимы работы прокси:
http_port 192.168.31.100:3128http_port 127.0.0.1:3128
Настройки кеша:
cache_mem 1024 MBmaximum_object_size_in_memory 512 KBcache_dir ufs /var/spool/squid3 204816256maximum_object_size 4 MB
Настройки лога:
access_log daemon:/var/log/squid3/access.log squidlogfile_rotate 31
Для squid 3.1 и ниже первая строка должна выглядеть так:
access_log /var/log/squid3/access.log squid
Сохраните и проверьте конфигурацию:
squid3 -k check
Если нет ошибок, то перезапускаем squid:
service squid3 restart
Перестраиваем кэш:
service squid3 stopsquid3 -zservice squid3 start
На DNS-сервере домена добавьте A-запись для нашего роутера:
Теперь в настройках браузера укажите полное FQDN имя сервера и порт 3128:
Так как никаких ограничений пока не установлено, то вы должны получить доступ в интернет.
На этом базовую настройку будем считать законченной. Следующим этапом будет настройка Kerberos-аутентификации и автоматического распространения настроек прокси, о чем мы расскажем в следующей статье.
Дополнительные материалы:
</span>
18.3. Настройка SQUID
Сервер SQUID использует файл конфигурации squid.conf
, который обычно располагается в каталоге /etc/squid
(или /usr/local/squid/etc
— более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID. Отредактируйте в этом файле следующие строки.
Укажите прокси-провайдера (тот сервер, который станет вашим «соседом» (neighbour, peer)):
cache_peer proxy.isp.ru
Установите объем памяти, разрешенный для кэша squid, в байтах, и каталог для дискового кэша:
cache_mem 65536
cache_dir ufs /usr/local/squid/cache 1024 16 256
где 1024 — количество мегабайтов, отводимое под кэш в указанном каталоге. В этом каталоге будут храниться кэшированные файлы. Стоит ли говорить, что если у вас несколько жестких дисков, то кэш нужно разместить на самом быстром из них.
Укажите узлы, которым разрешен доступ к прокси-серверу:
acl allowed_hosts src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
Укажите разрешенные SSL-порты:
acl SSL_ports port 443 563
Запретите метод CONNECT для всех портов, кроме указанных в acl SSL_ports:
http_access deny CONNECT !SSL_ports
Запретите доступ всем, кроме тех, кому можно:
http_access allow localhost
http_access allow allowed_hosts
http_access allow SSL_ports http_access deny all
Пропишите пользователей, которым разрешено пользоваться SQUID (в рассматриваемом примере это den, admin и developer):
ident_lookup on
acl allowed_users user den admin developer
http_access allow allowed_users
http_access deny all
Тэги maximum_object_size и maximum_object устанавливают ограничения на размер передаваемых объектов.
Ниже приведен пример запрета доступа к любому URL, который соответствует шаблону games, и разрешения доступа ко всем остальным:
acl GaMS url_regex games
http_access deny GaMS
http_access allow all
Данный текст является ознакомительным фрагментом. Поделитесь на страничке
Следующая глава
Используемые источники:
- https://losst.ru/ustanovka-squid-v-ubuntu-15-10
- https://interface31.ru/tech_it/2015/06/nastraivaem-squid-dlya-raboty-s-active-directory-chast-1-bazovye-nastroyki.html
- https://it.wikireading.ru/13974