Основные настройки squid
Прежде чем начнется изменение файла конфигурации, соберем немного важной информации, которая касается логики обработки файла конфигурации при выполнении программы.
В рамках этой инструкции изменение порта и интерфейса нас не интересуют, перейдем к дальнейшей настройке. Для работы Squid используются списки контроля доступа (ACL). Синтаксис списка доступа следующий: acl имя_списка параметр содержимое.
Таким образом строка: acl localnet src 172.16.0.0/12 добавляет список с именем localnet, в котором объявляетсяпул IP-адресов (172.16.0.0-172.31.255.255) для входящих соединений (параметр src).
Введение
В этому мануале рассмотрим установку и настройку прокси-сервера Squid. Инсталляцию установим на операционную систему Ubuntu 20.04 семейства Linux и коротко рассмотрим, как установить на Windows. Также в этой инструкции мы расскажем, как использовать сервер в качестве шлюза для сети.
Firefox
Приведенные ниже шаги одинаковы для Windows, macOS и Linux.
В правом верхнем углу щелкните значок гамбургера,
☰
чтобы открыть меню Firefox:Щелкните
⚙ Preferences
ссылку.Прокрутите вниз до
Network Settings
раздела и нажмитеSettings...
кнопку.Откроется новое окно.
Prerequisites
To complete this guide, you will need:
You will use the domain name your_domain in this tutorial, but you should substitute this with your own domain name, or IP address.
Proto и port
Теперь рассмотрим параметр для протоколов proto и портов port. Его синтаксис:
Socks через ssh
Для того чтоб поднять SOCKS5 через SSH нужен только доступ к SSH сервера.
Вводим в терминале или SSH клиенте (PuTTY для Windows)
Srcdomain
При появлении задачи с указанием домена источника требуется использовать srcdomain. Синтаксис выглядит следующим образом:
Step 3 — connecting through squid
In order to demonstrate your Squid server, you’ll use a command line program called curl, which is popular for making different types of web requests. In general, if you want to verify whether a given connection should be working in a browser under ideal circumstances, you should always test first with curl.
Url_regex
Параметр url_regex позволяет обработать шаблон регулярного выражения в ссылке.
acl videosAvi url_regex .avi$
Директива, указанная в примере, позволяет добавить в acl-список для обработки видеофайлы формата avi. Очень удобно использовать url_regex с ключом -i , так как он позволяет игнорировать регистр символов при использовании регулярных выражений.
Команды управления процессом
Прежде чем установить прокси-сервер Squid, необходимо ознакомиться с командами управления процессом, а также с директориями важных файлов.
Запуск демона Squid:
sudo systemctl start squid
Статус:
sudo systemctl status squid
Добавить демона Squid в автозагрузку:
sudo systemctl enable squid
Перезапустить:
sudo systemctl restart squid
Остановить процесс Squid:
sudo systemctl stop squid
Убрать из автозагрузки:
sudo systemctl disable squid
Важные файлы и директории рассмотрены далее в инструкции, основные моменты настройки и проверки будут произведены с их использованием:
- /etc/squid/squid.conf一 основной файл конфигурации Squid;
- /var/log/squid/access.log 一 файл доступа;
- /var/log/squid/cache.log一 лог кэша.
Настройка squid
Squid можно настроить, отредактировав /etc/squid/squid.conf файл. Вы также можете использовать отдельные файлы с параметрами конфигурации, которые можно включить с помощью директивы «include».
Настройка браузера
Сейчас сервис готов к проверке прав пользователей на доступ. Осталось лишь настроить браузер на использование нашего прокси-сервера. Я расскажу об этом на примере Firefox, но практически также можно настроить Chrome.
Для автоматического изменения настроек прокси-сервера в зависимости от ресурса, который вы посещаете, есть замечательное расширение Proxy SwitchyOmega. После установки этого расширения вы можете добавить профиль своего сервера:
затем ввести адрес, порт
и данные пользователя
После этого вы можете настраивать правила автоматического переключения профилей или просто выбрать ваш прокси-сервер для всех соединений.
На этом настройка Squid на нашем VPS на Ubuntu завершена. Жду ваших вопросов и замечаний в комментариях.
Настройка вашего браузера для использования прокси
Теперь, когда у вас настроен Squid, последний шаг – настроить предпочитаемый вами браузер для его использования.
Настройка межсетевого экрана
Предполагая, что вы используете UFWдля управления своим брандмауэром, вам необходимо открыть порт Squid. Для этого включите профиль «Squid», который включает правила для портов Squid по умолчанию.
sudo ufw allow 'Squid'
Чтобы проверить тип статуса:
sudo ufw status
Результат будет выглядеть примерно так:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
Squid ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Squid (v6) ALLOW Anywhere (v6)
Если Squid работает по другому, не по умолчанию порт, к примеру, 8888
вы можете разрешить трафик на этот порт с: sudo ufw allow 8888/tcp
.
Настройка пользователей
После этого нужно создать файл, содержащий имена пользователей и хэши их паролей. Для этого можно воспользоваться утилитой htdigest из пакета apache2-utils или следующим скриптом:
Сохраните его в папку /etc/squid под именем genpasswd. Не забудьте изменить права:
А сейчас, с помощью нашего скрипта, создадим файл с единственным, пока, пользователем:
О настройке squid на windows
Произвести установку возможно как на десктопную операционную систему, так и на серверную.
Ограничение скорости
В Squid ограничение скорости настраивается с использованием параметра delay_pools. Логика работы следующая: каждый запрашиваемый объект попадает сначала в пул, потом передается на клиента. У каждого пула 2 параметра: скорость заполнения и размер буфера.
Скорость заполнения пула определяется классом, директива delay_class.
Возможно несколько вариантов:
- общее ограничение скорости загрузки всем;
- общее ограничение скорости загрузки и скорость каждого клиента;
- общее ограничение скорости загрузки, скорости группы (сети), а также каждого клиента;
- все ограничения предыдущего класса и ограничение отдельных пользователей 一 для этого потребуется аутентификация пользователей;
- запросы объединяются по тегам определяемым директивой external_acl.
Директива delay_parameters назначает параметры пула.
Тип записей delay_parameters с выбранным классом:
- delay_parameters “номер пула” “общие ограничения для всех”
- delay_parameters “номер пула” “общие ограничения для всех” “ограничения для хоста”
- delay_parameters “номер пула” “общие ограничения для всех” “ограничения для подсети” “ограничения для хоста”
- delay_parameters “номер пула” “общие ограничения для всех” “ограничения для подсети” “ограничения для хоста” “ограничения для пользователя”
- delay_parameters “номер пула” “тегированные ограничения”
Для отдельных клиентов сети используется директива delay_access. Логика работы следующая:
delay_access номер_пула указание имя_acl
Указание осуществляет 2 операции deny и allow 一 запретить и разрешить. Указание действует на тот пул, которому разрешен, и не действует на запрещенные.
Таким образом, delay_access 1 allow gr_1 оказывает воздействия пула №1 для acl gr_1,
а строка delay_access 1 deny gr_2 не обрабатывает gr_2.
Пример работы
Укажем количество пулов:
delay_pools 2
Присвоим класс первому пулу:
delay_class 1 1
Присвоим класс второму пулу:
delay_class 2 1
Разрешить доступ к пулу №1 пользователям,состоящим в списке us_groupe_1:
delay_access 1 allow us_groupe_1
Запрещаем всем остальным доступ к этому пулу:
delay_access 1 deny all
Разрешить доступ к пулу №2 пользователям, состоящим в списке us_groupe_2:
delay_access 2 allow us_groupe_2
Запрещаем всем остальным доступ в этот пул:
delay_access 2 deny all
Настраиваем параметры пулов. Первому пулу оставляем настройку без ограничения размера буфера и скорости:
delay_parameters 1 -1/-1
Второму пулу ограничиваем размер буфера и скорость до 64 кБ/с:
delay_parameters 2 8000/8000
Параметры acl-листа
Продолжим настройку и разберемся более детально со списками и указаниями. В acl-листе возможно выставить множество указаний, в том числе с использованием регулярных выражений для более тонкой настройки прокси-сервера. Разберем некоторые из них.
Параметры для тонкой настройки
На данном этапе разобраны основные типы элементов acl. Есть еще некое количество элементов, которые понимает Squid, но в этой инструкции они не описываются, т.к используются для более профессиональной настройки.
Ниже приведем краткий список, чтобы было понимание, что можно найти и использовать помимо основных.
Правила доступа
Теперь разберем типы правил доступа. Для начала немного о самой логике и принципах работы правил доступа.
- Правило состоит из указания deny или allow с указанием имени списка контроля доступа.
- В правиле возможно использование одного или нескольких списков контроля доступа.
- При использовании нескольких acl в правиле использовано логическое «И». Следует это учитывать при добавлении элементов, т.к правило не сработает если верно только одно значение.
- Проверка происходит построчно.
- Отличным вариантом является запретить все, кроме того что разрешено.
Синтаксис правил доступа следующий:
Предварительная настройка сети
Предварительно настроим сетевые интерфейсы. В используемой для создания мануала системе два физических сетевых интерфейса: eth0 и eth1. Они будут настроены следующим образом: eth0 будем использовать для работы в сети интернет, а eth1 настроим на взаимодействие с локальной сетью.
sudo nano /etc/netplan/02-networkd.yaml
И установим следующие настройки:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
eth1:
dhcp4: false
addresses : [192.168.0.1/24]
nameservers:
addresses: [8.8.8.8]
Yaml требует строгого соблюдения пробелов, отступов и табуляции. Очень важно это учитывать при составлении файла конфигурации. Для интерфейса eth0 установлено получение адреса по dhcp, интерфейсу eth1 назначен статический IP-адрес. Проверим конфигурацию на валидность командой:
sudo netplan --debug generate
При наличии ошибок, необходимо исправить. Если все верно, применяем конфигурацию командой:
sudo netplan --debug apply
Применить конфигурацию без вывода ошибок можно так:
sudo netplan apply
Установка socks сервера
Я знаю 2 SOCKS сервера 3proxy и Dante. У себя использовал Dante Server его настройку и опишу.
Установить Dante сервер можно с помощью apt-get, по умолчанию устанавливается старая версия (v.1.1). Ниже будут настройки для старой и новой (v.1.4) версий.
Установка squid
Теперь перейдем непосредственно к установке. Отправим в терминал команду:
sudo apt -y install squid -y
Вывод процесса установки:
Установка squid на ubuntu
Пакет Squid включен в репозитории Ubuntu 18.04 по умолчанию. Чтобы установить его, введите следующие команды от имени пользователя sudo :
sudo apt update
sudo apt install squid
После завершения установки служба Squid запустится автоматически.
Чтобы убедиться, что установка прошла успешно и служба Squid запущена, введите следующую команду, которая распечатает статус службы:
sudo systemctl status squid
Установка и настройка squid
Устанавливаем squid следующей командой:
Установка новой версии dante server
sudo apt-get update sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository ppa:dajhorn/dante sudo apt-get update sudo apt-get install dante-server
После этих действий Dante Server будет установлен, но ругнется и не сможет запуститься, видимо дефолтные настройки имеют ошибку.
Далее нужно отредактировать файл настроек
sudo nano /etc/danted.conf
Приведя его к такому виду
Установка старой версии dante server
sudo apt-get update sudo apt-get install dante-server
Далее нужно отредактировать файл настроек
sudo nano /etc/danted.conf
Приведя его к такому виду
Заключение
В этой инструкции мы разобрали основы установки и настройки шлюза сети. А также подробно разобрали установку и настройку прокси-сервера Squid.
Conclusion
In this tutorial, you learned to deploy a popular, open-source API endpoint for proxying traffic with little to no overhead. Many applications have built-in proxy support (often at the OS level) going back decades, making this proxy stack highly reusable.
Next, you may want to learn how to deploy Dante, a SOCKS proxy which can run alongside Squid for proxying different types of web traffic.
Because one of the most common use cases for proxy servers is proxying traffic to and from different global regions, you may want to review how to use Ansible to automate server deployments next, in case you find yourself wanting to duplicate this configuration in other data centers.