По мотивам этой записи.
Очень простой прокси сервер. Один бинарный файл. Вся конфигурация передается в момент запуска команды.
Функции которые мы посмотрим:
— HTTPS. Т.е. зашифрованное подключение к прокси серверу
— CONNECT метод. Т.е. поддержка запросов к HTTPS сайту
— Basic аутентификация
Функции которые доступны:
— Защита от активных проверок
— Аутентификация через htpasswd файл
— Аутентификация сертификатом
Автор dumbproxy Владислав Ярмак.
Скачиваем бинарный файл в папку /usr/local/bin
wget -O dumbproxy https://github.com/Snawoot/dumbproxy/releases/download/v1.4.0/dumbproxy.linux-amd64
- Другие платформы доступны здесь.
Назначаем права на запуск файла под root
Это не безопасно
chmod a+x /usr/local/bin/dumbproxy
chmod u+s /usr/local/bin/dumbproxy
Проверим запуск прокси сервера
/usr/local/bin/dumbproxy -bind-address :443 -auth 'static://?username=user&password=password' -cert /etc/letsencrypt/live/example.org/fullchain.pem -key /etc/letsencrypt/live/example.org/privkey.pem
Вывод должен показать Starting proxy server…
Если ошибка CRITICAL Server terminated with a reason: listen tcp :443: bind: permission denied
. Значит бинарный файл запуска без прав рута. Существует вариант использовать capabilities для этого того, чтобы не использовать учетную запись root для запуска. Это более безопасно.
Используются сертификаты Let’s Encrypt. Его настройка рассмотрена здесь.
Проверим работу прокси с использование curl
curl --proxy https://proxy.example.org:443 http://wttr.in/ --proxy-user user:password --insecure --proxy-insecure --include --verbose
Вывод должен показать прогноз погоды
Примечание к команде
- proxy.example.org:443 — адрес:порт прокси сервера
- wttr.in — сайт к которому обращается запрос
- user:password — логин:пароль прокси сервера. Задается в команде запуска dumbproxy
Создадим systemd серврис, для запуска прокси автоматически
Создадим файл /usr/lib/systemd/system/dumbproxy.service
[Unit]
Description=Dumbiest HTTP proxy ever
After=network.target network-online.target nss-lookup.target
[Service]
User=nobody
ExecStart=/usr/local/bin/dumbproxy -bind-address :443 -auth 'static://?username=user&password=password' -cert /etc/letsencrypt/live/example.org/fullchain.pem -key /etc/letsencrypt/live/example.org/privkey.pem
Restart=always
KillMode=process
TimeoutStartSec=5
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
Перезагрузим сервис
systemctl daemon-reload
systemctl enable dumbproxy
systemctl restart dumbproxy
Логи сервиса можно посмотреть командой
journalctl -u dumbproxy
Использовать прокси в приложении
Для настройки приложения на использование прокси сервера под HTTPS, оно должно поддерживать автоконфигурацию файлом PAC. Самый простой пример в поле адреса на скрипт автоконфигурации указать содержимое
data:,function FindProxyForURL(u, h){return "HTTPS proxy.example.org:443";}
Это команда отправит все запросы на прокси сервер. Если прокси настроен на аутентификацию, то при первом подключении браузер выдаст запрос на логин и пароль.
Настройка Firefox была описана здесь.
Больше настроек доступно в источнике