SQUID - НАСТРОЙКА ПРОКСИ-СЕРВЕРА
Я тут стал частенько общаться с 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 для работы через прокси
Вручную:
- Откройте настройки Firefox.
- Перейдите в раздел "Сеть" -> "Настроить соединение".
- Выберите опцию "Ручная настройка прокси".
- Введите IP-адрес сервера и порт
3128
для HTTP и HTTPS прокси. - После подключения браузер запросит логин и пароль, используйте данные, которые созданы на шаге 3.
Автоматическая настройка с помощью программы madProxy:
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; }
Ну вот, собственно, и все. Я правда скрипт пока не пробовал. Это от известного робота-пиздабола... В принципе, может и заработать. Бывает ведь даже такое!