Squid proxy linux server

Боевой прокси-сервер Squid 5.2 с нуля

Всем привет. Появилась необходимость сменить в компании старичка Squid 3.5 с NTLM на FreeBSD, трудящегося с лохматых годов, так как как он не управлял скоростями и функционал работал криво. Было решено ставить Squid 5.2 с авторизацией по Kerberos на Ubuntu 22.04. Конфиг от 3.5 не подходит для 5 версии, поэтому все писалось с нуля. Для удобства чтения настройка будет разбита не несколько статей:

  1. Серверная часть и настройка авторизации Kerberos (Active Directory)
  2. Настройка файла конфигурации Squid
  3. Настройка доступов и скоростей

Немного теории для тех, кто вообще не знает, что это и с чем «едят» кальмара..

Гугл говорит нам замысловато..

Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и HTTPS. Разработан сообществом как программа с открытым исходным кодом. Все запросы выполняет как один неблокируемый процесс ввода-вывода.

Для новичка может быть вообще ничего непонятно. Проще говоря прокси-сервер встраивается между конечным сайтом и пользователем. Кэширует данные с сайтов, «режет» скорость и позволяет правильно распределить нагрузки на интернет-канал, предоставляет или наоборот закрывает доступы к разным сайтам, например соц.сетям, магазинам и т.п., чтобы ничего не отвлекало наших сотрудников от выполнения их обязанностей 😊

Hidden text

Постарался все максимально объяснить с разных сторон, чтобы было понятно даже человеку, который делает это впервые. Надеюсь знания окажутся полезными.

Обозначения:

yourdomain.com – вместо этого подставляйте свой домен.

user-px – пользователь от которого запускается squid.

proxy_comp — имя прокси сервера в DNS.

proxy_k – пользователь для Squid в Active Directory.

dc01 – Active Directory 1 сервер.

dc02 — Active Directory 2 сервер (может и не быть в компании).

192.168.10.100 – сервер прокси (у вас будет свой).

192.168.10.1 – шлюз (у вас будет свой).

192.168.10.9 — DNS (у вас будет свой).

192.168.10.10 – DNS (у вас будет свой).

192.168.10.222 — IP нашего админского компа.

Переходим к базовой настройке сервера Ubuntu 22.04

Устанавливаем актуальную версию Ubuntu server LTS отсюда:

Читайте также:  Linux mint virtual machine windows

Настраиваем статический ip адрес в sudo vim /etc/netplan/00-installer-config.yaml

# This is the network config written by ‘subiquity’

Источник

Установка и настройка прокси сервера Squid в Linux

date

31.03.2022

user

itpro

directory

CentOS, Linux, Ubuntu

comments

комментариев 16

Squid это, наверное, самый известный и популярный open source кэширующий прокси сервер. Прокси сервер Squid поддерживает большое количество кэширующих протоколов (ICP, HTCP, CARP, WCCP), позволяет проксировать трафик протоколов HTTP, HTTPS, FTP и т.д. Squid легко масштабируется, его можно использовать для фильтрации контента и управления скоростью доступа к сайтам для разных категорий пользователей, он поддерживает аутентификацию пользователей (в том числе пользователей Active Directory через LDAP). В этой статье мы рассмотрим типовую установку прокси сервера Squid на Linux.

Установка прокси сервера Squid в Linux

Установите пакет Squid на хост с помощью вашего пакетного менеджера. В зависимости от версии Linux нужно выполните одну из следующих команд:

  • Oracle, Rocky, CentOS или Red Hat Enterprise Linux: dnf install -y squid
  • SUSE Linux Enterprise Server: zypper install squid
  • Ubuntu или Debian: apt-get install squid

установка squid в linux

Если вы хотите использовать аутентификацию пользователей в Squid, нужно дополнительно установить пакет:

  • В RHEL/CentOS/Fedora: dnf -y install httpd-tools
  • В Debian/Ubuntu: sudo apt install apache2-utils

Добавьте сервис Squid в автозагрузку Linux через systemd, запустите службу и проверьте статус:

systemctl enable squid
systemctl start squid
systemctl status squid

systemctl status squid - running

Чтобы ввести все опции, с которыми собран squid:

Squid Cache: Version 4.15 Service Name: squid This binary uses OpenSSL 1.1.1k FIPS 25 Mar 2021. For legal restrictions on distribution see https://www.openssl.org/source/license.html configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--libexecdir=/usr/lib64/squid' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,PAM,POP3,RADIUS,SASL,SMB,SMB_LM' '--enable-auth-ntlm=SMB_LM,fake' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs,rock' '--enable-diskio' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' '--disable-security-cert-validators' '--with-swapdir=/var/spool/squid' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Настройка кэширующего прокси сервера Squid

По умолчанию squid использует конфигурационный файл /etc/squid/squid.conf.

Читайте также:  Change default text editor linux

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original

В дальнейшем мы сможете вернуться к оригинальному конфигурационному файлу или использовать его в качестве справочника директив.

Чтобы отредактировать конфигурационный файл squid, выполните:

sudo mcedit /etc/squid/squid.conf

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

Например, вы хотите разрешить доступ только из вашей локальной сети. Добавьте директиву:

acl localnet src 192.168.10.0/24

Остальные строки acl localnet можно закомментировать.

Чуть ниже в конфигурации указан директива, разрешающая доступ для этих сетей:

http_access allow localnet

По умолчанию Squid принимает подключения пользователей на порту 3128. Вы можете изменить этот порт в директиве http_port. Я повешу Squid на порт 4555:

Если вы хотите использовать прокси сервер для кэширования, нужно настроить директорию для кэша:

cache_dir ufs /var/spool/squid 5120 32 256
  • 5120 – размер кэша в МБ
  • 32 – количество каталогов первого уровня для кэша, 256 – каталоги второго уровня

Чтобы создать на диске структуру папок под кэш squid, выполните команду:

Для аутентификации пользователей на squid можно использовать простейшую basic аутентификацию. Сначала создайте файл для хранения пользователей и паролей:

sudo touch /etc/squid/passwd && sudo chown squid /etc/squid/passwd

Чтобы добавить пользователя в этот файл, выполните команду:

sudo htpasswd -c /etc/squid/passwd username1

При добавлении следующих пользователей указывать параметр -c не нужно.

добавление пользователя в squid

Затем добавьте следующие строки в начало конфигурационного файла squid.conf:

#использовать basic auth и указать путь к файлу с паролями auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd # количество одновременных подключений auth_param basic children 5 auth_param basic realm Squid Basic Authentication # длительность сессии без повторного ввода логина и пароля auth_param basic credentialsttl 8 hours auth_param basic casesensitive off acl auth_users proxy_auth REQUIRED http_access allow auth_users

В разных дистрибутивах Linux путь к файлу basic_ncsa_auth может отличаться:

  • /usr/lib64/squid/basic_ncsa_auth (Oracle Linux, RHEL, CentOS)
  • /usr/lib/squid/basic_ncsa_auth (Debian, Ubuntu, Kali Linux)

squid.conf конфигурационный файл squid

Недостаток Basic аутентификации в тои, что пароль передается в виде текста, зашифрованного с помощью Base64 (легко расшифровывается, см. пример в статье об отправке писем через telnet с аутентификацией). Поэтому для интеграции с Active Directory лучше использовать Kerberos аутентификацию в Squid. Если AD нет, можно настроить HTTP Digest аутентификацию в Squid. Но это уже за рамками этой статьи.

Читайте также:  Самый красивый дистрибутив linux

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

http_access allow localhost http_access allow authenticated http_access deny all

В Squid можно заблокировать определенный сайты. Создайте файл со списком запрещенных сайтов:

sudo vi /etc/squid/blocked_sites

Добавьте в файл список сайтов, доступ к которым нужно запретить:

facebook.com twitter.com instagram.com

И добавьте такие строки в конфигурационный файл squid:

acl blocked_sites dstdomain "/etc/squid/blocked_sites" http_access deny blocked_sites

После внесения изменений в конфигурационный файл squid нужно проверить его на синтаксические ошибки:

Если ошибок нет, перечитайте конфигурацию squid для применения новых настроек (не нужно перезапускать демона):

Разрешите в фаейрволе подключение к порту прокси сервера (в нашем примере это TCP 4555). Если у вас используется firewalld, добавьте разрешающее правило так:

firewall-cmd —zone=public —add-port=4555/tcp
firewall-cmd —reload

Если ваш Linux сервер расположен у внешнего провайдера (AWS, Azure, Oracle Cloud, и т.д.), не забудьте добавить разрешающее правило для порта 4555 в соответствующую Security Group.

Проверьте, что Squid слушает порт, указанный в директиве http_port:

С помощью curl можно проверить доступность прокси сервера squid:

curl -x http://xx.xx.xx.xx:4555 -L http://google.com

Если появляется ошибка authentication required/ Access Denied , значит нужно передать имя пользователя и пароль для подключения к squid:
curl -x http://xx.xx.xx.xx:4555 —proxy-user proxyuser1:TGFTM0xDVjNm -I http://google.com

тестирование squid с помощью curl

Для анализа логов squid в реальном времени используйте команду:

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

Если браузер выводит ошибку The proxy server is refusing connections , а в логе access.log есть строка TCP_DENIED/403 4041 CONNECT , проверьте ваши ACL.

При успешной аутентификации пользователя в логе squid появится сообщение TCP_TUNNEL/200 39 CONNECT winitpro.ru:443 proxyusername HIER_DIRECT/xx.xx.xx.xx или TCP_MISS/200 .
Не забудьте задать настройки прокси сервера в браузерах на компьютерах пользователей. Задайте IP адрес (имя) хоста squid и порт в настройках браузера. На компьютеры Windows можно распространить настройки прокси через GPO.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Источник

Оцените статью
Adblock
detector