Настройка Squid
Сервис squid можно настроить, отредактировав файл . Файл конфигурации содержит комментарии, описывающие, что делает каждый параметр конфигурации. Вы также можете поместить свои параметры конфигурации в отдельные файлы, которые можно включить в основной файл конфигурации с помощью директивы «include».
Перед внесением любых изменений рекомендуется создать резервную копию исходного файла конфигурации:
Чтобы начать настройку вашего экземпляра squid, откройте файл в текстовом редакторе :
По умолчанию squid настроен на прослушивание порта на всех сетевых интерфейсах сервера.
Если вы хотите изменить порт и установить интерфейс прослушивания, найдите строку, начинающуюся с и укажите IP-адрес интерфейса и новый порт. Если интерфейс не указан, Squid будет прослушивать все интерфейсы.
/etc/squid/squid.conf
Запуск Squid на всех интерфейсах и на порту по умолчанию должен подойти большинству пользователей.
Squid позволяет вам контролировать, как клиенты могут получать доступ к веб-ресурсам, используя списки контроля доступа (ACL). По умолчанию доступ разрешен только с локального хоста.
Если все клиенты, использующие прокси-сервер, имеют статический IP-адрес, простейшим вариантом ограничения доступа к прокси-серверу является создание ACL, который будет включать разрешенные IP-адреса. В противном случае вы можете настроить squid на использование аутентификации.
Вместо добавления IP-адресов в основной файл конфигурации создайте новый выделенный файл, который будет содержать разрешенные IP-адреса:
/etc/squid/allowed_ips.txt
После этого откройте основной файл конфигурации и создайте новый ACL с именем (первая выделенная строка) и разрешите доступ к этому ACL с помощью директивы (вторая выделенная строка):
/etc/squid/squid.conf
Порядок правил важен. Убедитесь, что вы добавили строку перед .
Директива работает аналогично правилам межсетевого экрана. Squid читает правила сверху вниз, и когда правило совпадает, правила ниже не обрабатываются.
Каждый раз, когда вы вносите изменения в файл конфигурации, вам необходимо перезапустить службу 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.
Исходящий сетевой интерфейс
На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим:
vi /etc/squid/squid.conf
acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33
acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34
* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34.
Перечитываем конфигурацию squid:
squid -k reconfigure
Troubleshooting
Squid needs to be restarted after boot
If you are using both squid and NetworkManager, the following error means that squid is launched before the wifi connection is enabled by NetworkManager ( is empty).
/var/log/squid/cache.log
Warning: Could not find any nameservers. Trying to use localhost Please check your /etc/resolv.conf file or use the 'dns_nameservers' option in squid.conf.
You can:
- Enable systemd unit.
- Using instead of systemd to start squid
Disable the systemd unit with the following script:
/etc/NetworkManager/dispatcher.d/10_squid
if test "$1" = 'wlp2s0' then if test "$2" = 'up' then systemctl start squid else systemctl stop squid fi fi
Make sure it is executable
Настройка вашего браузера для использования прокси
Теперь, когда у вас настроен Squid, последний шаг — настроить предпочитаемый вами браузер для его использования.
Fire Fox
Приведенные ниже шаги одинаковы для Windows, macOS и Linux.
-
В верхнем правом углу щелкните значок гамбургера чтобы открыть меню Firefox:
-
Щелкните ссылку .
-
Прокрутите вниз до раздела « » и нажмите кнопку « .
-
Откроется новое окно.
- Установите переключатель « ».
- Введите IP-адрес вашего сервера Squid в поле и в поле .
- Установите флажок .
- Нажмите кнопку , чтобы сохранить настройки.
На этом этапе ваш Firefox настроен, и вы можете просматривать Интернет через прокси-сервер Squid. Чтобы проверить это, откройте , введите «what is my ip», и вы должны увидеть IP-адрес своего сервера Squid.
Чтобы вернуться к настройкам по умолчанию, перейдите в « , установите переключатель « » и сохраните настройки.
Гугл Хром
Чтобы запустить Chrome с новым профилем и подключиться к серверу Squid, используйте следующую команду:
Linux:
macOS:
Windows:
Если профиль не существует, он будет создан автоматически. Таким образом, вы можете запускать несколько экземпляров Chrome одновременно.
Чтобы убедиться, что прокси-сервер работает правильно, откройте и введите «какой у меня IP». IP-адрес, отображаемый в вашем браузере, должен быть IP-адресом вашего сервера.
Подмена заголовков в запросе клиента в Squid
Дело было на домашнем Debian-сервере. Один из интернет радио порталов напрочь отказывался воспроизводиться на моем музыкальном центре, настойчиво предлагая закрыть плейер и открыть браузер. К сожалению, не смотря на наличие интернета, браузер в музыкальном центре конструкцией не был предусмотрен. Пришлось замаскировать центр под браузер путем подмены заголовка User-Agent с помощью Squid’а и прозрачного проксирования.
Для подмены HTTP-заголовка, добавляем три опции в squid.conf:
# Подмена HTTP-заголовка User-Agent # Задаем IP-адрес устройства, для которого требуется подмена acl MediaDevice src 192.168.0.3 # Запрещаем передачу HTTP-заголовка User-Agent request_header_access User-Agent deny MediaDevice # Включаем подмену HTTP-заголовка User-Agent, задаем браузер по вкусу ;) request_header_replace User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
Перезапускаем Squid:
service squid restart
Поскольку это безобразие нагло нарушает HTTP-стандарт, требуется сборка Squid с параметром LAX_HTTP, он же —enable-http-violations.
Авторизация через Kerberos
В данной главе рассматривается настройка авторизации пользователей через контроллер домена Контроллер ЕПП FreeIPA в Astra Linux. Предполагается, что имеется настроенный сервер (контроллер домена) FreeIPA с полным доменным именем (FQDN) ipa.ipadomain.ru, а сервер squid расположен на отдельной машине с полным доменным именем (FQDN) squid.ipadomain.ru, которая введена в домен.
-
На контроллере домена регистрируем сервис. Имя сервиса состоит из ключевого слова HTTP, символа косой черты и полного доменного имени (FQDN), в нашем случае имя сервиса будет
Зарегистрировать сервис можно через WEB-интерфейс FreeIPA:
или из командной строки, выполнив на контроллере домена команду
sudo ipa service-add HTTP/squid.ipadomain.ru
-
На сервере squid получить ключи службы, для чего на сервере squid выполнить команду
sudo ipa-getkeytab -s ipa.ipadomain.ru -p HTTP/squid.ipadomain.ru -k /etc/squid/krb5.keytab
где-s — имя сервера, от которого нужно получить ключи (ipa.ipadomain.ru);-p — имя службы, для которой нужно получить ключи (HTTP/squid.ipadomain.ru);-k — имя файла, в котором нужно сохранить полученные ключи (/etc/squid/krb5.keytab).
-
Установить для созданного на предыдущем шаге файла с ключами права доступа:
chown proxy:proxy /etc/squid/krb5.keytabchmod 640 /etc/squid/krb5.keytab
-
Отредактировать файл конфигурации службы squid /etc/squid/squid.conf, закомментировав строки «#http_access allow localnet» и «#http_access allow localhost» и добавив после них строки для включения авторизации через Kerberos:
-
Обновить конфигурацию юнитов запуска системных служб командой
sudo systemctl daemon-reload
-
Перезапустить службу squid командой:
sudo
Файлы журналов
Журналы squid располагаются в каталоге /var/log/squid:
Файл | Описание |
---|---|
cache.log |
Содержит отладочную информацию и сообщения о ошибках, которые генерирует Squid.Обычно это отчеты о ошибках при программировании Squid, полезные пир тестировании новых возможностей или поиске причин непонятного поведения прокси. |
access.log |
Содержит подробную информацию о подключениях, пригодную для автоматического анализа. |
Make it work for you
Of course, Squid can do quite a bit more than serve as a basic proxy server. If you need to get deep into the various configuration options for Squid, make sure to take a look at the official documentation, where you can find out how to configure options for third-party applications, configure options for the neighbour selection algorithm, configure various network parameters, and much more. In the meantime, you can always take a look at the /var/log/squid/access.log and /var/log/squid/cache.log to see what Squid is doing on your network.
Daily Tech Insider Newsletter
Stay up to date on the latest in technology with Daily Tech Insider. We bring you news on industry-leading companies, products, and people, as well as highlighted articles, downloads, and top resources. You’ll receive primers on hot tech topics that will help you stay ahead of the game.
Delivered Weekdays
Sign up today
Related articles on this site:
Create your own Web Content Filter with Squid and Linux | Article discusses a Python3 redirector for Squid for the purpose of filtering content. Example provides a starting point for developing a full content filter / ad blocker |
Linux Command Line Tips | Various Notes on Using and Managing a Linux System from the Command Line |
Big Tech is Spying on Us: a collection of articles to freak you out and convince your doubting frie… | Big Tech has had a long history of spying on us. It’s in their DNA. If you have your doubts, then review this list of recent evidence. |
Examples and Options with tcpdump | We review some options and examples for use of tcpdump in network testing and probing. |
Don’t Track Don’t Work? | Testing shows that Don’t Track doesn’t work. However, identifying tracking sites and blocking them does… |
Выполнить блокировку рекламных банеров
Блокировка рекламных банеров с помощью proxy-сервера squid производится на основе списков (текстовых файлов).
Squid поддерживает различные типы списков. Мы с вами будем использовать два из них:
- Тип списка url_regex — в этом типе списков задаются образцы адресов сайтов, которые будут блокироваться (часть полного адреса между http:// и до первого /)
- Тип списка urlpath_regex — в этом типе списков задаются образцы имен файлов, которые будут блокироваться (часть полного адреса, после первого /)
1. Создадим файл со списком образцов адресов сайтов, на которых обычно размещают рекламные банеры:
Все образцы адресов сатой записаны в виде регулярных выражений. Все сайты, в адресах доменов которых будет встречаться слово doubleclick будут подпадать под данное правило (и т.д.).
2. Создадим второй файл со списками образцов имен файлов (банерных картинок) которые в дальнейшем будем блокировать:
nano /etc/squid/bad_url_path 88x31.*gif 88x31.*GIF 100x80.*gif 100x80.*GIF 100x100.*gif 100x100.*GIF 120x60.*gif
В этом списке содержатся образцы имен файлов, загрузка которых будет блокироваться. Любые изображения, в именах которых встретиться 88×31 и расширение их будет gif будут заблокированы.
3. Создадим третий пустой файл, в который будем добавлять исключения для «хороших» сайтов, которые будут подпадать под созданные нами выше образцы.
nano /etc/squid/good_url
Оставляем его пустым и сохраняем.
4. Создав эти файлы мы можем приступать к добавлению правил блокировки интернет-контента на основе данных из этих списков. Откроем на редактирование конфигурационный файл squid’а и добавим туда нужные правила:
nano /etc/squid/squid.conf
Находим секцию, где уже описаны acl записи для других правил и добавим туда следующие строки
acl good_url url_regex "/etc/squid/good_url" acl bad_urlpath urlpath_regex "/etc/squid/bad_urlpath" acl bad_url url_regex "/etc/squid/bad_url"
Этими записями мы описали 3 «переменных» good_url, bad_urlpath и bad_url и поставили им в соответствие содержимое соответствующих файлов. Теперь, при загрузке squid будет перечитывать содержимое этих файлов и вносить данные из них в эти «переменные».
После описания мы можем использовать эти «переменные» в правилах блокировки интернет-контента
Ищем ниже по содержимому конфигурационного файла squid секцию, где описываются http_access правила и добавляем в конец уже имеющихся но до правила http_access deny all наши правила блокировки рекламных банеров.
http_access deny bad_urlpath !good_url http_access deny bad_url !good_url
Первым правилом мы заблокировали весь интернет-контент, в именах файлов которого содержаться образцы их списка bad_url_path и имен этих файлов нет в списке исключений good_url. Т.е. если адрес сайта, с которого производится загрузка «запрещенного» контента, есть в списке «хороших» сайтов good_url, то пользователь получит и увидит эти файлы.
По аналогии работает и второе правило. Оно блокирует контент по второму списку.
5. Проверка. После выполнения настроек перезапустите squid и проверьте, работает ли блокировка банеров.
дополнение
Данный подход позволяет снизить нагрузку на Internet-канал организации. Пользователи не прокачивают блокируемый объем рекламы.
Installation
This installation and configuration will be handled completely from the command line, so open up a terminal window and prepare to type.
The first thing we want to do (as with software installation on Ubuntu) is to update apt. From your terminal window, issue the command sudo apt-get update. Once that completes, you could also run an upgrade with the command sudo apt-get upgrade. Of course, should this upgrade the kernel, you’ll want to do a reboot, so schedule this accordingly.
Once the update/upgrade is complete, install Squid with the command:
The installation will pick up the necessary dependencies (libecap3, libltdl7, squid-purge, and squid-langpack) and complete without issue.
That is all there is to the installation. Now we move on to the configuration of a basic proxy server.
Запуск Squid
Включаем Squid в rc.conf:
squid_enable="YES"
Вручную редактором:
ee /etc/rc.conf
Или командой:
printf '\nsquid_enable=\"YES\"\n' >>/etc/rc.conf
Запускаем Squid:
service squid start
Если при старте получаем предупреждение: “WARNING: Could not determine this machines public hostname. Please configure one or set ‘visible_hostname’”. Задаем имя сервера параметром “visible_hostname” в конфиге.
Проверяем, запущен ли демон:
ps -ax | grep squid
Проверяем, слушается ли порт:
sockstat | grep squid
Проверяем системный лог на наличие сообщений от Squid:
grep squid /var/log/messages
Проверяем cache.log:
cat /var/log/squid/cache.log
В случае успешного старта вывод будет примерно следующим:
2015/03/25 15:29:32 kid1| Set Current Directory to /var/squid/cache 2015/03/25 15:29:32 kid1| Starting Squid Cache version 3.4.12 for i386-portbld-freebsd10.1... 2015/03/25 15:29:32 kid1| Process ID 32795 2015/03/25 15:29:32 kid1| Process Roles: worker 2015/03/25 15:29:32 kid1| With 14148 file descriptors available 2015/03/25 15:29:32 kid1| Initializing IP Cache... 2015/03/25 15:29:32 kid1| DNS Socket created at , FD 7 2015/03/25 15:29:32 kid1| DNS Socket created at 0.0.0.0, FD 8 2015/03/25 15:29:32 kid1| Adding nameserver 8.8.8.8 from /etc/resolv.conf 2015/03/25 15:29:32 kid1| Logfile: opening log daemon:/var/log/squid/access.log 2015/03/25 15:29:32 kid1| Logfile Daemon: opening log /var/log/squid/access.log 2015/03/25 15:29:32 kid1| Store logging disabled 2015/03/25 15:29:32 kid1| Swap maxSize 0 + 262144 KB, estimated 20164 objects 2015/03/25 15:29:32 kid1| Target number of buckets: 1008 2015/03/25 15:29:32 kid1| Using 8192 Store buckets 2015/03/25 15:29:32 kid1| Max Mem size: 262144 KB 2015/03/25 15:29:32 kid1| Max Swap size: 0 KB 2015/03/25 15:29:32 kid1| Using Least Load store dir selection 2015/03/25 15:29:32 kid1| Set Current Directory to /var/squid/cache 2015/03/25 15:29:32 kid1| Finished loading MIME types and icons. 2015/03/25 15:29:32 kid1| HTCP Disabled. 2015/03/25 15:29:32 kid1| Squid plugin modules loaded: 0 2015/03/25 15:29:32 kid1| Accepting HTTP Socket connections at local=:3128 remote= FD 11 flags=9 2015/03/25 15:29:32 kid1| Accepting NAT intercepted HTTP Socket connections at local=127.0.0.1:3128 remote= FD 12 flags=41 2015/03/25 15:29:33 kid1| storeLateRelease: released 0 objects
Ограничения доступа к сайтам и контенту в Squid
С переходом гигантов интернет индустрии на HTTPS ограничение доступа к сайтам на уровне прозрачного прокси больше не эффективно, поскольку HTTPS-трафик прозрачно проксировать не удастся. Для решения проблемы необходимо переходить к традиционному непрозрачному прокси, либо блокировать сайты на уровне DNS.
Фильтрация по типу контента передаваемого по HTTPS-протоколу невозможна ни в прозрачном, ни в не прозрачном режиме.
Для настройки ограничений, корректируем squid.conf следующим образом:
... acl CONNECT method CONNECT # Путь к списку IP-адресов пользователей, для которых не действуют запреты #acl AdminsIP src "/usr/local/etc/squid/AccessLists/AdminsIP.txt" # Путь к списку запрещенных сайтов #acl RestrictedDomains dstdomain "/usr/local/etc/squid/AccessLists/RestrictedDomains.txt" # Mime-типы для аудио и видео #acl MimeAudioVideo rep_mime_type audio video # Сайты с IP-адресами #acl UrlIP url_regex -i ^http://{1,3}\.{1,3}\.{1,3}\.{1,3}/.* # # Рекомендованный минимум настройки прав доступа: # # Запретить доступ к портам, отсутствующим в списке выше http_access deny !Safe_ports # Запретить метод CONNECT не на SSL-порт http_access deny CONNECT !SSL_ports # Разрешить только локальное управление кэшем http_access allow localhost manager http_access allow manager CacheManagerIP http_access deny manager # Запретить доступ к локальным ресурсам сервера через прокси # Настоятельно рекомендуется задать это правило, чтобы исключить внешний доступ # к приложениям, принимающим локальные подключения по адресу 127.0.0.1. http_access deny to_localhost # # Задайте свои правила доступа для клиентов # # Не ограничивать локальный доступ с сервера http_access allow localhost # Не ограничивать доступ администраторам #http_access allow AdminsIP # Блокировать запрещенные сайты #http_access deny RestrictedDomains # Запретить доступ к сайтам по IP-адресу #http_access deny UrlIP # Образец правила разрешающего доступ в интернет из вашей локальной сети # Список ваших внутренних IP-сетей, задается в acl localnet http_access allow localnet # Последнее правило, блокирует все, что не было разрешено выше http_access deny all # #Фильтрация по HTTP-заголовкам в ответе сервера, с HTTPS не работает # # Не ограничивать доступ администраторам #http_reply_access allow AdminsIP # Блокировать загрузку аудио/видео контента # Успех блокировки зависит от используемого протокола # и корректности MIME-типа, отправляемого сервером #http_reply_access deny MimeAudioVideo # Разрешить весь остальной контент http_reply_access allow all # Адрес и порт для входящих подключений # Обычно Squid ожидает подключения на порт 3128 # Если требуется только прозрачный прокси, порт можно ограничить внутренним интерфейсом http_port 3128 #http_port 127.0.0.1:3128 ...
Создаем папку для списков контроля доступа:
mkdir /usr/local/etc/squid/AccessLists
Создаем необходимые списки, значения в списке разделяются новой строкой.
Список IP-адресов с неограниченным доступом:
ee /usr/local/etc/squid/AccessLists/AdminsIP.txt
Список сайтов, доступ к которым запрещен пользователям. Точка в начале адреса блокирует доступ ко всем адресам в заданном домене. Для массовой блокировки развлекательных ресурсов потребуется установка редиректора SquidGuard.
ee /usr/local/etc/squid/AccessLists/RestrictedDomains.txt
Перезапускаем Squid:
service squid restart
Service Administration
Fire up Squid
If it is not running you can use (change «squid» to «squid3» if using a Squid 3.x version):-
sudo /etc/init.d/squid3 start|restart|stop
then this will work
squid3 -k reconfigure
Squid caches the web pages it serves. If the cache expiration time of the web page is specified, Squid seems to obey it. If you are serving some of the pages, update your page in the Apache directory, Squid won’t fetch the new version, instead relying on its cached version until its default expiration time. To flush the Squid cache
sudo /etc/init.d/squid3 stop sudo rm -fr /var/spool/squid3/* sudo squid3 -z sudo /etc/init.d/squid3 start
Настройка вашего браузера для использования прокси
Теперь, когда у вас настроен Squid, последний шаг — настроить предпочитаемый вами браузер для его использования.
Fire Fox
Приведенные ниже шаги одинаковы для Windows, macOS и Linux.
-
В верхнем правом углу щелкните значок гамбургера чтобы открыть меню Firefox:
-
Щелкните ссылку .
-
Прокрутите вниз до раздела « » и нажмите кнопку « .
-
Откроется новое окно.
- Установите переключатель « ».
- Введите IP-адрес вашего сервера Squid в поле и в поле .
- Установите флажок .
- Нажмите кнопку , чтобы сохранить настройки.
На этом этапе ваш Firefox настроен, и вы можете просматривать Интернет через прокси-сервер Squid. Чтобы проверить это, откройте , введите «what is my ip», и вы должны увидеть IP-адрес своего сервера Squid.
Чтобы вернуться к настройкам по умолчанию, перейдите в « , установите переключатель « » и сохраните настройки.
Есть несколько плагинов, которые также могут помочь вам настроить параметры прокси Firefox, например FoxyProxy .
Гугл Хром
Google Chrome использует системные настройки прокси по умолчанию. Вместо изменения настроек прокси-сервера операционной системы вы можете использовать надстройку, например SwitchyOmega, или запустить веб-браузер Chrome из командной строки.
Чтобы запустить Chrome с новым профилем и подключиться к серверу Squid, используйте следующую команду:
Linux:
macOS:
Windows:
Если профиль не существует, он будет создан автоматически. Таким образом, вы можете запускать несколько экземпляров Chrome одновременно.
Чтобы убедиться, что прокси-сервер работает правильно, откройте и введите «какой у меня IP». IP-адрес, отображаемый в вашем браузере, должен быть IP-адресом вашего сервера.
SSL Bumping
Create Self-Signed Root CA Certificate
openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
Generating a 2048 bit RSA private key .....+++ .............................................................................................................................................+++ writing new private key to 'myCA.pem' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) :US State or Province Name (full name) :Illinois Locality Name (eg, city) []:Chicago Organization Name (eg, company) :Example Company LTD. Organizational Unit Name (eg, section) []:Information Technology Common Name (e.g. server FQDN or YOUR name) []:Example Company LTD. Email Address []:
Create a DER-encoded certificate to import into users’ browsers
The result file (myCA.der) should be imported into the ‘Authorities’ section of users’ browsers.
For example, in FireFox:
Open 'Preferences' Go to the 'Privacy and Security' section Press the 'View Certificates' button and go to the 'Authorities' tab Press the 'Import' button, select the .der file that was created previously and pres 'OK'
Modify Squid Configuration File
/etc/squid/squid.conf
http_port 3128 ssl-bump tls-cert=/etc/squid/myCA.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1,SINGLE_DH_USE,SINGLE_ECDH_USE ssl_bump stare all ssl_bump bump all
Squid аутентификация
Если ограничение доступа на основе IP не работает для вашего варианта использования, вы можете настроить squid на использование серверной части для аутентификации пользователей. Squid поддерживает базовую аутентификацию Samba , LDAP и HTTP.
В этом руководстве мы будем использовать базовую аутентификацию. Это простой метод аутентификации, встроенный в протокол HTTP.
Чтобы сгенерировать зашифрованный пароль, используйте инструмент . Следующая команда добавляет пару в файл :
Следующим шагом является включение базовой аутентификации HTTP и включение файла, содержащего учетные данные пользователя, в файл конфигурации squid.
Откройте основную конфигурацию и добавьте следующее:
/etc/squid/squid.conf
Первые три выделенные строки создают новый список контроля доступа с именем « , а последняя выделенная строка разрешает доступ аутентифицированным пользователям.
Перезапустите сервис Squid:
Установка Squid
Устанавливаем Squid из портов, поскольку для поддержки прозрачного прокси необходимо корректировка параметров компиляции. Squid, установленный пакетным менеджером, в режиме прозрачного прокси работать не будет.
Обновляем коллекцию портов:
portsnap fetch update
Если коллекция портов используется впервые, получаем ее актуальную версию:
portsnap fetch extract
Выполняем настройку порта:
cd /usr/ports/www/squid make config
В параметрах сборки включаем прозрачное проксирование для используемого брандмауэра и поддержку больших файлов:
LARGEFILE Support large (>2GB) cache and log files LAX_HTTP Do not enforce strict HTTP compliance ... TP_IPF Enable transparent proxying with IPFilter TP_IPFW Enable transparent proxying with IPFW TP_PF Enable transparent proxying with PF
Если необходима модификация HTTP-заголовков (использование опций via, request_header_access), также включаем LAX_HTTP, для сборки Squid с параметром –enable-http-violations.
Устанавливаем порт:
make install clean
Блокируем переустановку Squid пакетным менеджером:
pkg lock squid
О процедуре обновления Squid читаем .
Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)
Для организации совместного доступа в Интернет с помощью общего доступа к подключению Интернета на сервере должна быть одна сетевая карта для подключения к внутренней сети и еще одна карта или модем для подключения к Интернету.
На сервере
Для настройки общего доступа к подключению Интернета необходимо выполнить на сервере указанные ниже действия.
Исходные данные:
Оба компьютера соединены по сети. На сервере установлено две сетевые карты:
- eth0 — к ней подключен интернет;
- eth1 — к ней подключена локальная сеть.
Настройте вторую карту (eth1) так:
- IP: 192.168.0.1
- Netmask: 255.255.255.0
sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0 sudo ifconfig eth1 up
Разрешите направление пакетов. Чтобы сделать это, отредактируйте .
Откройте сам файл командой:
sudo gedit /etc/sysctl.conf
А затем вставьте следующую строчку:
net.ipv4.ip_forward=1
Для того, чтобы применить это правило до перезагрузки выполните:
sysctl -w net.ipv4.ip_forward="1"
Затем добавляем правило для NAT:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Где eth0 название вашего интерфейса через который выходите в интернет. Измените его если используете другой интерфейс (напрмер ppp0) тогда команда будет выглядит иначе:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Установите и запустите пакет для раздачи пакетов по сети:
sudo apt-get install dnsmasq
Или, вы можете использовать DNS провайдера.
Чтобы NAT работал после перезагрузки сохраняем настройки в файл:
iptables-save > /etc/iptables.up.rules
И добавляем в конец файла:
sudo gedit /etc/network/interfaces
Эту строчку, для автоматической подгрузки правил:
pre-up iptables-restore < /etc/iptables.up.rules
Также в этот файл добавляем правила роутинга:
up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1 up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0
На клиентском компьютере
Установите на втором компьютере:
- IP: 192.168.0.2
- Netmask/Маска: 255.255.255.0
- Gateway/Шлюз: 192.168.0.1
- DNS: 192.168.0.1
Второй компьютер теперь должен быть подключён к интернету.
Если компьютеров несколько
Можно использовать dnsmasq как DHCP сервер.
Для этого на сервере редактируем файл dnsmasq.conf:
sudo nano etcdnsmasq.conf
interface=eth1 # интерфейс, который будет слушать dnsmasq listen-address=192.168.0.1 # адрес, на котором будет находиться dnsmasq bind-interfaces eth1 # слушать только интерфейс dhcp-range=192.168.0.5,192.168.0.50,255.255.255.0,24h1 # диапазон выдаваемых адресов dhcp-option=3,192.168.0.1 # шлюз по умолчанию
Перезапускаем dnsmasq:
sudo service dnsmasq restart
Настраиваем клиентские компьютеры на автоматическое получение адреса.
Если после перезагрузки правила iptables не восстанавливаются, добавьте:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
в любой стартовый скрипт (rc.local например).
Вместо eth0 надо написать ppp0, если этот интерфейс получает интернет от провайдера:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Настройка SQUID с ntlm авторизацией через домен
Дальше будет попроще. Если на предыдущем этапе вы все сделали правильно, то squid заработает без проблем. Устанавливаем его:
# yum -y install squid
Открываем файл конфигурации /etc/squid/squid.conf и добавляем в самое начала следующие параметры:
auth_param ntlm program /usr/bin/ntlm_auth --diagnostics --helper-protocol=squid-2.5-ntlmssp --domain=XS auth_param ntlm children 10 auth_param ntlm keep_alive off acl auth proxy_auth REQUIRED
Не забудьте указать свой домен
Обращаю внимание на первую строку. В большинстве инструкций в интернете она выглядит немного не так, в ней нет дополнительных параметров
Без них у меня ntlm авторизация не хотела работать, я очень долго ее мучал.
Дальше находим в конфиге строку:
http_access allow localnet
Комментируем ее, она позволяет получить доступ всем компьютерам из локальной сети. После этой строки добавляем новую:
http_access allow auth
Разрешаем доступ только тем, кто прошел авторизацию. Запускаем squid и добавляем в автозагрузку:
# systemctl start squid # systemctl enable squid
Все, можно идти проверять. Открываем браузер у какого-нибудь компьютера и указываем в качестве прокси ip адрес сервера, порт 3128. Пробуйте выйти в интернет.
Как понять, что все работает правильно:
- Пользователя должно пустить в интернет.
- В лог файле сквида должна быть информация об имени пользователя, который получает доступ. У меня это выглядит примерно вот так при открытии страницы яндекса:
# cat /var/log/squid/access.log | grep control 1449261311.346 9 10.1.4.189 TCP_MISS/304 438 GET http://yastatic.net/islands/_/S1-qWWyv85yFAtoHVvuxJXpOKA4.svg control HIER_DIRECT/178.154.131.217 - 1449261311.351 11 10.1.4.189 TCP_MISS/200 622 GET http://yastatic.net/www/_/_/y/ljN5poHcx67T3HSZuHbvf2NNk.png control HIER_DIRECT/178.154.131.217 image/png 1449261311.404 9 10.1.4.189 TCP_MISS/304 440 GET http://yastatic.net/morda-logo/i/disaster/metro11072015.png control HIER_DIRECT/178.154.131.217 - 1449261311.488 97 10.1.4.189 TCP_MISS/302 355 GET http://kiks.yandex.ru/fu control HIER_DIRECT/213.180.204.143 - 1449261311.507 9 10.1.4.189 TCP_MISS/304 341 GET http://kiks.yandex.ru/system/fc07.swf control HIER_DIRECT/213.180.204.143 -
В данном случае control — доменная учетная запись.
У нас получилась полностью дефолтная конфигурация, в которую мы просто добавили ntlm авторизацию и разрешили доступ в интернет только для тех, кто эту авторизацию прошел. Если компьютер находится не в домене, то при работе через прокси выскочит окно с авторизацией, в которую нужно будет ввести данные от учетной записи домена, чтобы получить доступ в интернет.
В таком виде конфигурация сервера уже вполне рабочая, можно пользоваться, подключать пользователей. Но это неудобно. Нужно средство для удобного управления списками доступа и просмотра статистики пользователей.