Установка и настройка squid на ubuntu

Post navigation

Настройка 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.

  1. В верхнем правом углу щелкните значок гамбургера чтобы открыть меню Firefox:

  2. Щелкните ссылку .

  3. Прокрутите вниз до раздела « » и нажмите кнопку « .

  4. Откроется новое окно.

    • Установите переключатель « ».
    • Введите 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, которая введена в домен.

  1. На контроллере домена регистрируем сервис. Имя сервиса состоит из ключевого слова HTTP, символа косой черты и полного доменного имени (FQDN), в нашем случае имя сервиса будет

    Зарегистрировать сервис можно через WEB-интерфейс FreeIPA:

    или из командной строки, выполнив на контроллере домена команду

    sudo ipa service-add HTTP/squid.ipadomain.ru

  2. На сервере 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).

  3. Установить для созданного на предыдущем шаге файла с ключами права доступа:

    chown proxy:proxy /etc/squid/krb5.keytabchmod 640 /etc/squid/krb5.keytab

  4. Отредактировать файл конфигурации службы squid /etc/squid/squid.conf, закомментировав строки «#http_access allow localnet» и «#http_access allow localhost» и добавив после них строки для включения авторизации через Kerberos:

  5. Обновить конфигурацию юнитов запуска системных служб командой

    sudo systemctl daemon-reload

  6. Перезапустить службу 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.

  1. В верхнем правом углу щелкните значок гамбургера чтобы открыть меню Firefox:

  2. Щелкните ссылку .

  3. Прокрутите вниз до раздела « » и нажмите кнопку « .

  4. Откроется новое окно.

    • Установите переключатель « ».
    • Введите 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. Пробуйте выйти в интернет.

Как понять, что все работает правильно:

  1. Пользователя должно пустить в интернет.
  2. В лог файле сквида должна быть информация об имени пользователя, который получает доступ. У меня это выглядит примерно вот так при открытии страницы яндекса:
# 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 авторизацию и разрешили доступ в интернет только для тех, кто эту авторизацию прошел. Если компьютер находится не в домене, то при работе через прокси выскочит окно с авторизацией, в которую нужно будет ввести данные от учетной записи домена, чтобы получить доступ в интернет.

В таком виде конфигурация сервера уже вполне рабочая, можно пользоваться, подключать пользователей. Но это неудобно. Нужно средство для удобного управления списками доступа и просмотра статистики пользователей.

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: