Всем привет. Появилась необходимость сменить в компании старичка 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 отсюда:

https://ubuntu.com/download/server

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

Листинг:

# This is the network config written by 'subiquity'

network:

  ethernets:

    ens192:

      addresses:

      - 192.168.10.100/24

      gateway4: 192.168.10.1

      nameservers:

        addresses:

        - 192.168.1.10

        - 192.168.1.11

        search:

        - yourdomain.com

  version: 2

 

Настраиваем синхронизацию времени с доменом:

Устанавливаем клиент

apt-get install ntp

В файле /etc/ntp.conf комментируем все строки с серверами и добавляем свой сервер Active Directory:

server dc01.yourdomain.com

server dc02.yourdomain.com

В конец файла дописать:

interface ignore wildcard

interface listen eth1

Сохранить файл и перезапустить службу ntp:

service ntp restart

 

Далее обновляем пакеты и устанавливаем squid

sudo apt update

sudo apt install squid

 

По завершению проверяем работу службы

sudo systemctl status squid

Создаем пользователя и пароль, от которого будет запускаться squid, и все права на файлы предоставляем ему.

sudo useradd user-px

chown user-px:user-px /etc/squid/*

chmod 640 /etc/squid/*

И ставим squid в автозагрузку

systemctl enable squid

На DNS-сервере делаем соответствующую А запись:

IP и имя сервера, на котором будет крутиться прокси, порт указываем 3128


Настраиваем авторизацию через Active Directory (Kerberos)

Так как все пользователи распределены по ролям, squid будет проверять вхождение пользователя в определенную группу из AD и на основании неё выдавать доступ. Чтобы это реализовать нам нужно получить доступ к AD. Приступим..

Создаем в AD пользователя, под которым Squid будет авторизовываться для получения списка пользователей и групп. Имя пользователя указывайте своё.

Обязательно ставьте галки

  • Запретить смену пароля пользователем

  • Срок действия пароля не ограничен

Заходим на сервер AD (dc01) и в командной строке от имени Администратора пишем:

ktpass -princ HTTP/mydomain.com@MYDOMAIN.COM /mapuser proxy_k /pass "ПарольОтУчеткиProxy_k" /out C:\squid.keytab /ptype KRB5_NT_PRINCIPAL /mapop set

Регистр очень важен! В целом во всем проекте все может ничерта не работать, а оказывается где-то неверный регистр..

Получившийся файл переносим с Active Directory на наш прокси сервер в директорию /etc/squid

Предоставляем пользователю, от которого запускается служба Squid права на файл.

chown user-px:user-px /etc/squid/squid.keytab

chmod 640 /etc/squid/squid.keytab

Устанавливаем пакет для поддержки аутентификации:

apt-get install krb5-user

При установке вводите домен ЗАГЛАВНЫМИ буквами.

Делаем копию файла /etc/krb5.conf и открываем его.

Вносим правки:

[libdefaults]

        default_realm = YOURDOMAIN.RU

        default_keytab_name = /etc/squid/squid.keytab

[realms]

        MASTESOFT.LOCAL = {

                kdc = dc01.yourdomain.com

                kdc = dc02.yourdomain.com

                admin_server = dc01.yourdomain.com

                default_domain = yourdomain.com

        }

[domain_realm]

        .yourdomain.com = YOURDOMAIN.RU

       yourdomain.com = YOURDOMAIN.RU

Сохраняем файл и проверяем работу.

kinit -kV -p HTTP/proxy_comp.yourdomain.com

Получили сообщение об успешной аутентификации.

Удаляем билет командой.

Kdestroy

Настройка файлов для аутентификации по Kerberos и подготовка сервера закончена.

Буду рад ответить на комментарии и возникшие вопросы :)

Часть 2

https://habr.com/ru/post/719902/

Комментарии (28)


  1. losacef
    00.00.0000 00:00
    +3

    Сюда бы еще ClamAV


    1. itzme Автор
      00.00.0000 00:00

      Для чего?


    1. rkislov
      00.00.0000 00:00
      +1

      c-icap стандартный для squid


  1. rkislov
    00.00.0000 00:00

    А как на счет работы squid в прозрачном режиме и аутентификации?


    1. itzme Автор
      00.00.0000 00:00

      Аутентификация Kerberos, не прозрачный, но адрес прокси сервера на машинах юзеров раскатываются политиками, поэтому один раз настроили политику и забыли.


    1. randomsimplenumber
      00.00.0000 00:00

      А как на счет работы squid в прозрачном режиме и аутентификации?

      Раньше эти вещи были несовместимы на уровне http. Не думаю что что то поменялось.


      1. nikweter
        00.00.0000 00:00

        А каком смысле несовместимы? А что у меня тогда 10 лет уже работает в разных организациях?

        Через dhcp раскидываешь адрес файлом wpad.dat, в нем разруливаешь что проксировать, а что нет. В сквиде что-то вроде auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -s HTTP/proxy.dom.loc

        Ну и по группам еще можно.

        Нигде никаких данных пользователю вводить не нужно, в браузерах по умолчанию автообнаружение прокси включено. Вроде прозрачно.


        1. martin74ua
          00.00.0000 00:00
          +4

          Это не прозрачный прокси. Прозрачный прокси - когда вы фаерволом принудительно 80 и 443 порты на прокси отправляете. И у пользователя вообще ничего настраивать не надо...


          1. nikweter
            00.00.0000 00:00
            -1

            Так у пользователя ничего не настраивается. Если комп не в домене в сеть подключить - сразу запрос логина пароль выскочит. Прям новый ноут из коробки достаешь, к вайфай подключил - тут же запрос аутентификации от прокси прилетает. Куда еще прозрачнее?

            Хотя и вы правы, если зарулить порты на фаерволе, то не будет работать.


            1. martin74ua
              00.00.0000 00:00

              squid transparent mode

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


              1. nikweter
                00.00.0000 00:00

                Да и по ip пускал, бывало. Но я лет 5 назад последний экземпляр поднимал. Надеюсь что больше не придется.


            1. mayorovp
              00.00.0000 00:00

              Прозрачность прокси определяется для программ, а не для пользователей.


  1. Stas_VTK
    00.00.0000 00:00

    Меня, к примеру, в первую очередь интересуют настройки этой версии в плане его как прокси для протоколов HTTP и HTTPS. Ожидал увидеть их тут.


    1. itzme Автор
      00.00.0000 00:00
      -2

      Привет, конфиг будет в следующих частях)


      1. Abyss777
        00.00.0000 00:00

        Будет фильтрация HTTPS без подмены сертификата?


        1. rkislov
          00.00.0000 00:00

          Есть вариант peak and splice, заглядывать только в sni сессии


        1. 117thDragon
          00.00.0000 00:00

          Хм, тогда потеряется весь смысл https.


  1. teplolub
    00.00.0000 00:00
    +1

    Спасибо за статью. Не смотря на минусы, не сдавайтесь, продолжайте цикл. Обязательно прочитаю следующие части.
    Использовали squid во времена небезлимитного интернета. Причем версию под Windows. Первоначальная настройка тогда получилась не сразу, пришлось помучаться. Зато потом я был очарован возможностями и стабильностью работы.


  1. rkislov
    00.00.0000 00:00

    На самом деле, можно поставить Nginx с керберос авторизацией и у него указать апстримом ваш сквид


    1. nidalee
      00.00.0000 00:00

      Nginx научился проксировать CONNECT? Помню еще полтора года назад с этим были проблемы.


      1. isden
        00.00.0000 00:00

        1. nidalee
          00.00.0000 00:00

          Нет, это старый костыль, так и не заработал лично у меня.


  1. martin74ua
    00.00.0000 00:00

    А зачем ушли от системного пользователя squid ? теперь при каждом обновлении придется править права файлов....


  1. isden
    00.00.0000 00:00
    +1

    Squid

    Он еще жив? О_о
    Последний раз когда его трогал (в 00-х), он уже начал стремительно терять популярность.


    1. socketpair
      00.00.0000 00:00

      И какая же годная ему замена?


      1. isden
        00.00.0000 00:00

        От целей зависит. Я лично наблюдал как народ подумал и вообще отказывался от прокси.


      1. heejew
        00.00.0000 00:00

        Так-то 3proxy, да даже тот же nginx можно использовать в качестве прокси сервера. Но тут конечно от целей зависит, как правильно отметили.

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


      1. timru
        00.00.0000 00:00

        Ну мы выбрали микротик и уровни обслуживания.
        Для нас этого хватило.