Skip to content

Простой прокси север

По мотивам этой записи.

Очень простой прокси сервер. Один бинарный файл. Вся конфигурация передается в момент запуска команды.

Функции которые мы посмотрим:

  • 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 была описана здесь.

Больше настроек доступно в источнике

Источник 1

Источник 2