- Безопасный HTTPS-прокси менее чем за 10 минут
- Шаг 1. Назначение доменного имени
- Шаг 2. Установка dumbproxy
- Шаг 3. Конфигурирование dumbproxy
- Шаг 4. Запустите dumbproxy
- Настройка клиентов
- Настройка прокси для всех браузеров на Windows
- Использование в Firefox
- Вариант 1. PAC-скрипт
- Вариант 2. Браузерное расширение для прокси
- Вариант 3. Контейнеры файрфокс
- Использование в Chrome
- Вариант 1. Параметр командной строки
- Вариант 2. Браузерное расширение для прокси
- Использование в Android
- Использование с другими приложениями
- Боевой прокси-сервер Squid 5.2 с нуля
- Переходим к базовой настройке сервера Ubuntu 22.04
Безопасный HTTPS-прокси менее чем за 10 минут
Это руководство описывает развёртывание HTTPS-прокси с помощью dumbproxy на практически любом Linux-сервере. Потребуется только curl и рутовый доступ на какой-то сервер.
Под HTTPS-прокси здесь подразумевается HTTP-прокси с подключением через TLS, а не просто нешифрованный HTTP-прокси, через который может работать и HTTPS. То есть такой HTTPS-прокси привносит дополнительный слой TLS между клиентом и прокси-сервером, обеспечивая таким образом конфиденциальность соединения с прокси-сервером. Такие прокси пригодны для непосредственного использования в браузерах и прочем софте. Так называемые браузерные «VPN-расширения», по сути, работают как раз через такие HTTP-прокси «с шифрованием».
Зачем HTTPS-прокси?
- Хорошо подходит для доступа к заблокированному контенту, не требуя при этом переключать трафик всей системы. Можно использовать избирательно для каких-то отдельных сайтов, доменов и т.п.
- Стандартный протокол, который внешне выглядит как HTTPS потому что технически он и есть HTTPS.
- Альтернативные решения типа shadowsocks зачастую всё равно приходится прятать внутрь TLS с помощью плагинов вроде simple-tls или v2ray. А в таком случае отпадает нужда в самом shadowsocks — проще непосредственно использовать обычный прокси внутри TLS.
- Поддерживается браузерами без дополнительного ПО. Остальное ПО, поддерживающее HTTP-прокси, можно подружить с HTTPS-прокси с помощью вот такого адаптера.
Больше о преимуществе защищённых прокси над VPN можно узнать в одном из моих предыдущих постов.
Почему dumbproxy?
Это довольно простой прокси-сервер, который специально сделан для нынешних реалий, работает на множестве разных платформ и операционных систем. По сути для работы достаточно запустить лишь один исполняемый файл.
В то же время dumbproxy имеет ряд других достаточно важных плюсов:
- Возможность прятать ответ прокси кодом 407, чтобы прокси не выдавал себя при активном опросе (по умолчанию отключено).
- Легковесные потоки позволяют ему обслуживать существенное количество одновременных соединений (десятки тысяч) в конфигурации по умолчанию, что является преимуществом по сравнению с 3proxy и tinyproxy. В сочетании со скромным расходом памяти на каждое соединение, это позволяет эксплуатировать прокси на VPS минимальных тарифных планов.
- Простое управление авторизацией: файл с пользователями автоматически перезагружается тогда, когда обнаружены изменения.
- Поддерживает HTTP/2.
- Имеется возможность авторизации по сертификатам TLS (вероятно, это будет удобнее использовать, применяя steady-tun на стороне клиента).
- Сервер возьмёт на себя выпуск сертификатов для доменных имён, используя протокол ACME (например, через Let’s Encrypt или BuyPass).
Шаг 1. Назначение доменного имени
Нам потребуется доменное имя для сервера, чтобы на нём беспроблемно работал TLS (HTTPS). Вы можете либо купить домен и привязать его к IP-адресу вашего VPS, либо использовать какой-либо бесплатный сервис, предоставляющий доменные имена. В последнем случае, родительский домен вашего домена должен быть внесён в список публичных суффиксов доменов. Иначе могут возникнуть проблемы с выпуском сертификата через Let’s Encrypt — упрётся в разрешённое число выпущенных сертификатов для родительского домена за какой-то период времени. В этом руководстве мы воспользуемся бесплатным сервисом freemyip.com, который даёт домен пользователю даже без регистрации.
- Зайдите на страницу https://freemyip.com/.
- Выберите красивое доменное имя и заберите его.
- Сохраните куда-нибудь ссылку, которую получите.
- Запустите следующую команду на вашем сервере: curl ‘ССЫЛКА’ , где ССЫЛКА — та самая ссылка, которую вы получили на предыдущем шаге. Обратите внимание: нужно не забыть взять ссылку в одиночные кавычки!
Проверка: проверьте ваш домен ping -ом, он должен указывать на IP-адрес вашего VPS. Если это не так, то попробуйте подождать несколько минут и попробовать снова.
Шаг 2. Установка dumbproxy
Предполагается архитектура процессора amd64. Для других случаев см. бинарники здесь. Запустите команду:
curl -Lo /usr/local/bin/dumbproxy 'https://github.com/Snawoot/dumbproxy/releases/download/v1.6.1/dumbproxy.linux-amd64' && chmod +x /usr/local/bin/dumbproxy
Проверка: команда dumbproxy -version должна выводить v1.6.1 .
Шаг 3. Конфигурирование dumbproxy
Создадим файл со списком пользователей и паролей. Запустите следующую команду, заменяя USERNAME и PASSWORD настоящими желаемыми значениями имени пользователя и пароля:
dumbproxy -passwd /etc/dumbproxy.htpasswd 'USERNAME' 'PASSWORD'
Сконфигурируйте dumbproxy. Создайте файл /etc/default/dumbproxy со следующим содержимым:
OPTIONS=-auth basicfile://?path=/etc/dumbproxy.htpasswd -autocert -bind-address :443
Создайте файл /etc/systemd/system/dumbproxy.service со следующим содержимым:
[Unit] Description=Dumb Proxy Documentation=https://github.com/Snawoot/dumbproxy/ After=network.target network-online.target Requires=network-online.target [Service] EnvironmentFile=/etc/default/dumbproxy User=root Group=root ExecStart=/usr/local/bin/dumbproxy $OPTIONS TimeoutStopSec=5s PrivateTmp=true ProtectSystem=full LimitNOFILE=20000 [Install] WantedBy=default.target
Наконец, примените новую конфигурацию systemd:
Шаг 4. Запустите dumbproxy
Включите автозапуск следующей командой:
systemctl enable dumbproxy
systemctl start dumbproxy
Проверка: команда curl -x ‘https://USERNAME:PASSWORD@DOMAIN’ http://ifconfig.co должна выводить IP-адрес сервера.
Примечание: первый запрос может занять несколько секунд из-за выпуска сертификата.
Настройка клиентов
Настройка прокси для всех браузеров на Windows
Откройте системные настройки прокси:
Включите опцию скрипта настройки и введите следующий код:
data:,function FindProxyForURL(u, h)
где вместо example.com укажите ваш домен.
Использование в Firefox
Вариант 1. PAC-скрипт
Откройте настройки прокси в Firefox, переключите режим на «URL автоматической настройки» и введите следующий код:
data:,function FindProxyForURL(u, h)
где вместо example.com следует написать ваш домен.
Вариант 2. Браузерное расширение для прокси
Воспользуйтесь любым удобным браузерным расширением для переключения прокси. Например, этим.
Вариант 3. Контейнеры файрфокс
Существует расширение Firefox Container Proxy, которое позволяет назначить разным контейнерам Firefox разные прокси. Таким образом, вы можете одновременно открывать один и тот же сайт из разных сетевых локаций. Лично я пользуюсь этим вариантом.
Использование в Chrome
Вариант 1. Параметр командной строки
Прокси-сервер можно передать опцией командной строки браузера Chrome. Например, так:
chromium-browser --proxy-server='https://example.com:443'
где вместо example.com следует ваш домен.
Вариант 2. Браузерное расширение для прокси
Воспользуйтесь любым удобным браузерным расширением для переключения прокси. Например, этим.
Использование в Android
- Установите AdGuard на Android: руководство.
- Следуйте этому руководству, начиная с части про настройку приложения на Андроиде. Укажите тип прокси HTTPS, имя пользователя и пароль.
Использование с другими приложениями
Можно подключаться к удалённому HTTPS-прокси как к обычному локальному плэинтекстовому (нешифрованному) прокси при помощи приложения, которое принимает обычное соединение на локальном порту и дальше уже подключается через TLS к удалённому серверу. В качестве такого адаптера можно использовать steady-tun, который ещё вдобавок предварительно устанавливает соединения с запасом, скрадывая тем самым время установления каждого очередного TLS-соединения.
Боевой прокси-сервер Squid 5.2 с нуля
Всем привет. Появилась необходимость сменить в компании старичка Squid 3.5 с NTLM на FreeBSD, трудящегося с лохматых годов, так как как он не управлял скоростями и функционал работал криво. Было решено ставить Squid 5.2 с авторизацией по Kerberos на Ubuntu 22.04. Конфиг от 3.5 не подходит для 5 версии, поэтому все писалось с нуля. Для удобства чтения настройка будет разбита не несколько статей:
- Серверная часть и настройка авторизации Kerberos (Active Directory)
- Настройка файла конфигурации Squid
- Настройка доступов и скоростей
Немного теории для тех, кто вообще не знает, что это и с чем «едят» кальмара..
Гугл говорит нам замысловато..
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 отсюда:
Настраиваем статический ip адрес в sudo vim /etc/netplan/00-installer-config.yaml
# This is the network config written by ‘subiquity’