Как сделать прокси сервер на centos

Добавил пользователь Евгений Кузнецов
Обновлено: 27.09.2024

В этой статье предполагается, что у вас есть хотя бы базовые знания Linux, вы знаете, как использовать оболочку, и, что наиболее важно, вы размещаете свой сайт на собственном VPS. Установка довольно проста и предполагает, что вы работаете с учетной записью root, в противном случае вам может потребоваться добавить sudo к командам для получения привилегий root. Я покажу вам пошаговую установку Squid на сервере CentOS 8.

Установка Squid Proxy на CentOS 8

Шаг 1. Сначала давайте начнем с проверки актуальности вашей системы.

Шаг 2. Установка прокси-сервера Squid на CentOS 8.

Прокси-сервер Squid доступен в репозиториях CentOS 8 по умолчанию и может быть установлен с помощью команды:

После завершения установки запустите и включите ее при запуске системы, используя следующие команды:

Шаг 3. Настройка прокси-сервера Squid.

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

Теперь мы открываем основной файл конфигурации squid и добавляем / редактируем следующее:

Затем создайте наш файл аутентификации, который Squid может использовать для проверки аутентификации пользователей:

Шаг 4. Настройте брандмауэр для Squid.

Если брандмауэр включен, разрешите порт Squid. Замените порт, если вы изменили значение по умолчанию:

Наконец, завершена часть настройки шага. Теперь пора протестировать просмотр с указанием IP-адреса squid и порта по умолчанию в браузере клиента. В Firefox настройте его для подключения к внешней сети через сервер Squid. Предпочтения> Общие> Параметры сети> Настройка прокси вручную. Установите флажок Использовать этот прокси-сервер для всех протоколов.

Поздравления! Вы успешно установили squid . Благодарим за использование этого руководства по установке прокси-сервера Squid в системе CentOS 8. Для получения дополнительной помощи или полезной информации мы рекомендуем вам посетить официальный сайт Squid .


Примечание: вся действия будут производиться под пользователем root. Это не безопасно. Для защиты рекомендуется использовать отдельного пользователя и команду sudo.

1.2. NGINX

Узнаем версию nginx

смотрим вывод nginx version

Узнаем опции, с которыми был скомпилирован nginx

смотрим вывод configure arguments


Устанавливаем зависимости для компиляции PCRE, ZLIB, OPENSSL

Скачиваем исходный код nginx
Примечание: версию используем ту же, что в выводе команды выше

Скачиваем модуль PAM
Примечание: используем PAM модуль из репозитория проекта

Настраиваем сборку ngnix из исходного кода с модулями
Примечание: параметры могут отличаться от ваших.

Собираем nginx из исходных кодов
ВНИМАНИЕ: Команда установки сама заменит файлы в папках. Если у вас на этом nginx сервере запущено что-то оно может перестать работать.

Для начала проверим самый простой вариант. Незашифрованное подключение без аутентификации.

2.1. БЕЗ АУТЕНТИФИКАЦИИ

2.1.1. SQUID

Примечание: для чистоты эксперимента отключим кэш.
Файл конфигурации /etc/squid/squid.conf

Проверим конфигурацию командой

ВНИМАНИЕ: руководство не учитывает наличие сетевых экранов. Если у вас используется какой-то брандмауэр не забудьте на нем разрешить порт TCP 3128 для входящих подключений.

2.1.2. NGINX

Проверим конфигурацию командой

2.2. ПРОВЕРКА


Проверим работу прокси сервера. Используем по очереди Squid и nginx. Настройка браузера вручную.
Для проверки настроим браузер на использование прокси сервера

Тестовые шаги:
Запустить Squid

Проверить что порт прослушивается

Проверить что порт прослушивается

2.3.PAM BASIC АУТЕНТИФИКАЦИЯ

Добавим аутентификацию. Имя пользователя и пароль будут такими же, как для входа в систему. Соединение оставим незашифрованным.

2.3.1. SQUID


Для включения PAM аутентификации в Suid используется программа аутентификации и список контроля доступа, который указывает для кого применять аутентификацию.
Примечание: параметр realm — тот текст, который будет выводиться браузером в запросе логина и пароля.
Окно с запросом логина и пароля

Файл конфугуракции /etc/squid/squid.conf

Включаем PAM аутентификацию
Для того чтобы Squid мог задействовать PAM аутентификацию нужно создать файл конфигурации PAM, с таким именем как сервис Squid.
Файл конфигурации /etc/pam.d/squid

Меняем права доступа к модулю аутентификации
Примечание: данный шаг снижает уровень безопасности. Запуск модуля аутентификации от имени root (SETUID). необходим чтобы PAM мог получить доступ к файлу с паролями /etc/shadow. По умолчанию модуль запускается с правами пользователя сервиса, использующего модуль. В случае со squid это пользователь squid. У него нет доступа к этому файлу и аутентификации PAM невозможна.

2.3.2. NGINX

Файл конфигурации /etc/nginx/conf.d/default.conf

Включаем PAM аутентификацию

Файл конфигурации /etc/pam.d/nginx

2.4. ПРОВЕРКА


Захват пакетов:
Для проверки оставим настройки браузера такими же

Для настройки адреса прокси сервера для веб браузера существуют несколько вариантов: ручной, полу-автоматический и автоматический.

Для настройки веб браузера на автоматический прокси используется URL адрес. По этому URL веб браузер обращается и получает функцию FindProxyForURL. Эта функция инструктирует какие запросы следует отправлять через прокси сервер. В самом простом случае можно указать чтобы все запросы шли через прокси сервер. В этом случае это будет аналогом ручной настройки адреса прокси сервера в браузере.

3.1. PLAIN TEXT

Обычно для автоматической настройки прокси создается файл с содержанием функции. Затем файл размещается на веб-сервере. URL в настройках веб браузера указывает на этот файл.
Однако существует обходной путь без веб сервера. Для этого в поле URL указывается сама функция FindProxyForURL. Это может быть не очень удобно, если правил фильтрации много, однако позволяет сэкономить на веб сервере. В дальнейшем веб сервер будет использоваться для выдачи сертификата, поэтому данный способ может быть полезен для тестов.

3.2. PAC

3.3. NGINX

Настроем nginx для размещения PAC файла. По стандарту PAC файл должен помечаться специальным типом x-ns-proxy-autoconfig.
Примечание: поскольку nginx не работает с PAM аутентификацией, то оставим в файле конфигурации только выдачу PAC файла. В дальнейшем ngninx будет также использоваться для получения сертификата.

Файл конфигурации /etc/nginx/conf.d/default.conf

Создаем директорию для PAC файла

Создаем файл proxy.pac в этой директории с содержанием выше.

Даем права на файл

3.4. ПРОВЕРКА

Проверим механизм Plain text. Для этого в настройках браузера укажем Automatic proxy configuration URL с содержанием функции FindProxyForURL. В функции укажем, что все запросы отправлять через прокси сервер.


Тестовые шаги:
Запустить Squid

Проверить что порт прослушивается

Проверим nginx с PAC файлом. Для этого в настройках браузера укажем Automatic proxy confgiration URL с адресом PAC файла.

Проверить что порт прослушивается

Настроим браузер на автоконфигурацию прокси URL



Захват пакетов:
Пример пакетов при использовании PAC файла.
Веб браузер сначала обращаться за файлом автоконфигурации прокси


Сервер отправляет файл
Примечание: обратите внимание на тип контента

Для получения сертификата воспользуемся Let’s Encrypt. Он позволяет автоматизировать процесс получения и обновления сертификата. И к тому же свободен. Чтобы получить сертификат на домен нужно подтвердить его владение. Для подтверждения существует несколько вариантов. Мы воспользуемся размещением специальных файлов на веб сервере. Let’s Encrypt будет проверять наличие этих файлов по определенному URL с доменом. Если файлы существуют, то домен считается подтвержденным и произойдет выдача сертификатов.

4.1. NGINX

Создаем папку для файлов

Добавляем в конфигурацию nginx информацию о пути до файлов.

Файл конфигурации /etc/nginx/conf.d/default.conf

4.2. LET’S ENCRYPT

Установим Let’s Encrypt

Запустим certbot на выдачу сертификата.
Примечание: будем использовать модуль webroot. В нем укажем директорию, где будут располагаться файлы для проверки домена.

Примечание: В процессе первого запуска произойдет регистрация аккаунта (запрос почты). И сохранение аутентификации в директории /etc/letsencrypt. В этой же директории будут сохранены публичный и закрытый ключи. Рекомендуется сделать резервную копию.

После прохождения мастера можно проверить, что сертификаты сохранились

В этой папке нас интересуют следующие файлы:

Также можно запустить certbot на вывод всех сертификатов

Примечание: обратите внимание, что сертификаты Let’s Encrypt выдаются сроком 90 дней. Именно поэтому необходимо предусмотреть автоматизацию процесса их обновления.


На захваченном пакете можно увидеть как сервер letsencrypt проверяет наличие файла

Примечание: поскольку nginx не работает с PAM, будем настраивать только Squid.

5.1. SQUID

Файл конфигурации /etc/squid/squid.conf

5.2. PAC

Изменим PAC файл. Укажем адрес прокси сервера с новым портом.
Примечание: обратите внимание, что явно указывается протокол для подключения к прокси серверу.

5.3. ПРОВЕРКА

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


Настройку браузера используем прежнюю

Настроем сервис certbot на регулярный запрос обновления сертификата. Используем систему timer из systemd. Certbot будет запускаться каждый день. После чего обновлять сертификаты. И перезапускать прокси сервер.
Примечание: данный этап лучше провести спустя несколько дней, чтобы отследить, что сертификат обновился.

Изменим настройку таймера
Примечание: после обновления сертификата Squid нужно перезапускать. Он подхватит новый сертификат. Для этого введем команду перезапуска Squid в конфигурации certbot.

Файл конфигурации таймера /etc/sysconf/certbot

Файл конфигурации таймера /usr/lib/systemd/system/certbot-renew.timer

Запустим таймер обновления

Проверим статус сертификатов

Примечание: обратите внимание, что ссылки теперь ведут на новые файлы. А название самой ссылки не поменялось — поэтому не нужно изменять конфигурацию Squid.

Включим автоматический запуск nginx, Squid и таймера Let’s Encrypt при включении машины

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

  • настроить выход конкретно для пользователя
  • для всей системы
  • только для yum
  • только для wget

Системные настройки прокси

Производится путем добавления настроек в файл — /etc/profile, строки можно добавить в конец файла:

Если необходимо настроить для конкртеного пользователя, то необходимо изменить файл .bash_profile в домашней дирректории пользователя, добавив в него (в конец файла) выше приведенные строки. Настройки применяем выходом / входом в систему, в моем случае все решилось использованием команды:source ~/.bash_profile

Настройка системы для работы через proxy
Добавляем в конец файла /etc/profile строки:

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

После этого выйти из системы и зайти заново.
Настройка yum для работы через proxy
Надо отредактировать файл /etc/yum.conf в секции main:

Настройка wget для работы через proxy
Надо отредактировать файл /etc/wgetrc. Добавляем:

Читайте также: