SQUID - НАСТРОЙКА ПРОКСИ-СЕРВЕРА

 proxy

Я тут стал частенько общаться с Chat-GPT но эти пидорасы из OpenAI прикрыли доступ к системе всей Рашке, поэтому приходится использовать VPN. Платные VPN сервисы везде стоят неадекватно-дорого, а бесплатные, если закрываются пидорасами из Роскомнадзора, то просто хуево работают. Поэтому мне в голову пришла светлая мысль арендовать VPS сервер где-нибудь в забугорье и там запилить свой-собственный прокси с блэкджеком и шлюхами. Сложнее всего было разобраться как подключиться к своей виртуальной машине, а далее - обычная Убунта и 5 минут терпения, чтобы сосредоточиться на настройке. Итак, поехали:

Шаг 1. Установка Squid на Ubuntu

Сначала подключаемся к нашему VPS-серваку. Вместо "your_vps_ip" вводите свой IP из инструкции от провайдера услуги.

ssh root@your_vps_ip

Далее я обычно создаю своего пользователя, чтобы не действовать от root. Хз, зачем, просто потому:

adduser madmentat

Далее добавляю его (то есть, себя) в группу sudo:

usermod -aG sudo madmentat

Теперь можно поменять пароль root на то, что вам удобно:

passwd root

Можно переключиться на своего полльзователя:

su madmentat

Обновимся:

sudo apt update

sudo apt upgrade

И, наконец, приступаем к установке нашего сервиса:

sudo apt install squid

Шаг 2. Настройка конфигурации Squid

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

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.default

Ок, рабочия копия есть - теперь правим боевой конфиг:

sudo nano /etc/squid/squid.conf

# Порт, на котором Squid будет слушать запросы (по умолчанию 3128)
http_port 3128

# Настройка базовой аутентификации пользователей
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

# Разрешаем HTTPS соединения через метод CONNECT
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access allow CONNECT SSL_ports

# Разрешаем доступ всем аутентифицированным пользователям
http_access allow authenticated

# Отклоняем доступ всем остальным
http_access deny all

# Размер кэша (можно уменьшить или увеличить по необходимости, здесь 100 MB)
cache_dir ufs /var/spool/squid 100 16 256

# Настройка логирования
access_log /var/log/squid/access.log squid

# Прочие параметры конфигурации (оставлены по умолчанию)
coredump_dir /var/spool/squid

Здесь происходит следующее:

  • http_port 3128 — указывает Squid на использование порта 3128 для прокси.
  • auth_param basic — включает базовую аутентификацию с логинами и паролями.
  • acl authenticated proxy_auth REQUIRED — разрешает доступ только аутентифицированным пользователям.
  • http_access allow authenticated — разрешает доступ после успешной аутентификации.
  • dns_v4_first on — указание использовать IPv4 в первую очередь при разрешении DNS-имен.

 Ctrl + X , "y" для выхода.

Перезагрузим службу:

sudo systemctl restart squid

Шаг 3. Создание пользователей для аутентификации

Чтобы пользователи могли подключаться к прокси, необходимо создать файл для хранения логинов и паролей:

 sudo apt install apache2-utils

Добавим пользователя и пароль:

sudo htpasswd -c /etc/squid/passwd madmentat

Чтобы добавить других пользователей, используйте ту же команду, но без флага -c (чтобы не перезаписывать файл):

 sudo htpasswd /etc/squid/passwd new_user

Убедитесь, что права на файл паролей корректны:;

sudo chmod o-r /etc/squid/passwd

Шаг 4. Настройка браузера Firefox для работы через прокси

Вручную:

  1. Откройте настройки Firefox.
  2. Перейдите в раздел "Сеть" -> "Настроить соединение".
  3. Выберите опцию "Ручная настройка прокси".
  4. Введите IP-адрес сервера и порт 3128 для HTTP и HTTPS прокси.
  5. После подключения браузер запросит логин и пароль, используйте данные, которые созданы на шаге 3.

 f options

 

Автоматическая настройка с помощью программы madProxy:

madProxy.exe

madProxy.cpp

#include <windows.h>
#include <fstream>
#include <string>
#include <filesystem>
#include <sstream>
 
// Задаем IP-адрес и порт прокси
const std::wstring PROXY_IP = L"your+proxy_ip";
const std::wstring PROXY_PORT = L"3128";
 
// Функция для получения активного профиля Firefox
std::wstring GetFirefoxProfilePath() {
    wchar_t* appData = _wgetenv(L"APPDATA");
    if (!appData) {
        return L"";
    }
 
    std::filesystem::path firefoxPath = std::wstring(appData) + L"\\Mozilla\\Firefox";
    std::filesystem::path profilesIniPath = firefoxPath / "profiles.ini";
 
    if (!std::filesystem::exists(profilesIniPath)) {
        return L"";
    }
 
    std::wifstream profilesFile(profilesIniPath.c_str());
    if (!profilesFile) {
        return L"";
    }
 
    std::wstring line;
    std::wstring profilePath;
    bool isDefault = false;
 
    while (std::getline(profilesFile, line)) {
        if (line.find(L"Default=1") != std::wstring::npos) {
            isDefault = true;
        }
 
        if (line.find(L"Path=") != std::wstring::npos) {
            profilePath = line.substr(line.find(L'=') + 1);
            if (isDefault) {
                break;
            }
        }
    }
 
    profilesFile.close();
 
    if (profilePath.empty()) {
        return L"";
    }
 
    std::filesystem::path fullPath = firefoxPath / profilePath;
    return fullPath;
}
 
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {
    // Получение пути к профилю Firefox
    std::wstring profilePath = GetFirefoxProfilePath();
    if (profilePath.empty()) {
        MessageBoxW(NULL, L"Не удалось найти профиль Firefox. Убедитесь, что Firefox установлен и запущен хотя бы один раз.", L"Ошибка", MB_ICONERROR | MB_OK);
        return 1;
    }
 
    // Путь к prefs.js
    std::filesystem::path prefsFilePath = std::filesystem::path(profilePath) / L"prefs.js";
 
    if (!std::filesystem::exists(prefsFilePath)) {
        MessageBoxW(NULL, L"Файл prefs.js не найден в профиле Firefox.", L"Ошибка", MB_ICONERROR | MB_OK);
        return 1;
    }
 
    // Открываем prefs.js для добавления настроек прокси
    std::ofstream prefsFile(prefsFilePath.string(), std::ios::app);
    if (!prefsFile) {
        MessageBoxW(NULL, L"Не удалось открыть файл prefs.js для записи.", L"Ошибка", MB_ICONERROR | MB_OK);
        return 1;
    }
 
    // Настройки прокси
    std::string proxyIpStr(PROXY_IP.begin(), PROXY_IP.end());
    std::string proxyPortStr(PROXY_PORT.begin(), PROXY_PORT.end());
 
    prefsFile << "user_pref(\"network.proxy.type\", 1);\n";
    prefsFile << "user_pref(\"network.proxy.http\", \"" << proxyIpStr << "\");\n";
    prefsFile << "user_pref(\"network.proxy.http_port\", " << proxyPortStr << ");\n";
    prefsFile << "user_pref(\"network.proxy.ssl\", \"" << proxyIpStr << "\");\n";
    prefsFile << "user_pref(\"network.proxy.ssl_port\", " << proxyPortStr << ");\n";
    prefsFile << "user_pref(\"network.proxy.no_proxies_on\", \"\");\n";
 
    prefsFile.close();
 
    MessageBoxW(NULL, L"Настройки прокси были успешно применены. Пожалуйста, перезапустите Firefox, чтобы они вступили в силу.", L"Успех", MB_ICONINFORMATION | MB_OK);
 
    return 0;
}
 

 

Ну вот, собственно, и все. Я правда скрипт пока не пробовал. Это от известного робота-пиздабола... В принципе, может и заработать. Бывает ведь даже такое!