Домашний прокси сервер linux

Безопасный 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).
Читайте также:  Linux скрипты дата файла

Шаг 1. Назначение доменного имени

Нам потребуется доменное имя для сервера, чтобы на нём беспроблемно работал TLS (HTTPS). Вы можете либо купить домен и привязать его к IP-адресу вашего VPS, либо использовать какой-либо бесплатный сервис, предоставляющий доменные имена. В последнем случае, родительский домен вашего домена должен быть внесён в список публичных суффиксов доменов. Иначе могут возникнуть проблемы с выпуском сертификата через Let’s Encrypt — упрётся в разрешённое число выпущенных сертификатов для родительского домена за какой-то период времени. В этом руководстве мы воспользуемся бесплатным сервисом freemyip.com, который даёт домен пользователю даже без регистрации.

  1. Зайдите на страницу https://freemyip.com/.
  2. Выберите красивое доменное имя и заберите его.
  3. Сохраните куда-нибудь ссылку, которую получите.
  4. Запустите следующую команду на вашем сервере: 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 следует написать ваш домен.

Читайте также:  Открыть доступ ssh astra linux

Вариант 2. Браузерное расширение для прокси

Воспользуйтесь любым удобным браузерным расширением для переключения прокси. Например, этим.

Вариант 3. Контейнеры файрфокс

Существует расширение Firefox Container Proxy, которое позволяет назначить разным контейнерам Firefox разные прокси. Таким образом, вы можете одновременно открывать один и тот же сайт из разных сетевых локаций. Лично я пользуюсь этим вариантом.

Использование в Chrome

Вариант 1. Параметр командной строки

Прокси-сервер можно передать опцией командной строки браузера Chrome. Например, так:

chromium-browser --proxy-server='https://example.com:443'

где вместо example.com следует ваш домен.

Вариант 2. Браузерное расширение для прокси

Воспользуйтесь любым удобным браузерным расширением для переключения прокси. Например, этим.

Использование в Android

  1. Установите AdGuard на Android: руководство.
  2. Следуйте этому руководству, начиная с части про настройку приложения на Андроиде. Укажите тип прокси HTTPS, имя пользователя и пароль.

Использование с другими приложениями

Можно подключаться к удалённому HTTPS-прокси как к обычному локальному плэинтекстовому (нешифрованному) прокси при помощи приложения, которое принимает обычное соединение на локальном порту и дальше уже подключается через TLS к удалённому серверу. В качестве такого адаптера можно использовать steady-tun, который ещё вдобавок предварительно устанавливает соединения с запасом, скрадывая тем самым время установления каждого очередного TLS-соединения.

Источник

Установка и настройка Squid на Ubuntu

Обновлено

Обновлено: 11.11.2021 Опубликовано: 30.07.2020

Используемые термины: Squid, Ubuntu. Данную инструкцию можно также применять для установки SQUID на Debian. В качестве клиентов могут использоваться Windows, Linux, Mac OS и любые браузеры.

Установка и базовая настройка

Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:

* кавычки обязательны
** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса.
С точки зрения безопасности, лучше закомментировать все подсети, которые не используются в нашей локальной сети, например:

# TAG: acl
.
#acl localnet src 0.0.0.1-0.255.255.255
#acl localnet src 10.0.0.0/8
#acl localnet src 100.64.0.0/10
#acl localnet src 169.254.0.0/16
#acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
#acl localnet src fc00::/7
#acl localnet src fe80::/10

* в данном примере мы оставили только подсеть 192.168.0.0/16. Разрешаем доступ для локальных сетей, которые заданы опцией acl localnet:

* данную опцию нужно либо раскомментировать, либо вставить выше опции http_access deny all. Настраиваем директорию для кэша:

* где ufs — файловая система (ufs для SQUID является самой подходящей); /var/spool/squid — директория хранения кэша; 4096 — объем пространства в мегабайтах, которое будет выделено под кэш; 32 — количество каталогов первого уровня, которое будет создано для размещение кэша; 256 — количество каталогов второго уровня, которое будет создано для размещение кэша. Останавливаем squid:

Читайте также:  Установка apache2 php linux

Проверка

Настройка Firefox для использования прокси-сервера

Заходим в настройки браузера и настраиваем использование прокси-сервера. Например, в Mozilla Firefox настройки нужно выставить такими: * где 192.168.163.166 — IP-адрес моего прокси-сервера. Теперь открываем сайт 2ip.ru. После его загрузки мы увидим внешний IP-адрес — он должен соответствовать той сети, от которой работает настроенный SQUID.

Прозрачный прокси

Прозрачный прокси позволяет автоматически использовать прокси-сервер, не настраивая при этом браузер компьютера. Пользователи могут даже не знать, что трафик идет через squid. Открываем конфигурационный файл:

* порт 3128 будет для прозрачного проксирования. Порт 3129 должен быть указан в качестве прокси. И перезапускаем конфигурацию squid:

Для работы прозрачного проксирования. необходимо, чтобы шлюз перекидывал запросы по нужным портам на наш прокси. Это выполняется разными способами в зависмости от реализации шлюза. Для примера, если нашим шлюзом будет наш сервер со squid, то нужно выполнить команды:

Авторизация по логину и паролю

# TAG: auth_param
.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/auth_users
auth_param basic children 25
auth_param basic realm SQUID PROXY
auth_param basic credentialsttl 3 hours

* где /usr/lib/squid/basic_ncsa_auth — расположение ncsa_auth (в зависимости от системы может находиться в другом каталоге); /etc/squid/auth_users — файл с логинами и паролями; children 25 разрешает 25 одновременных подключений; SQUID PROXY — произвольная фраза для приветствия; credentialsttl 3 hours будет держать сессию 3 часа, после потребуется повторный ввод логина и пароля. Создаем acl для пользователей, которые прошли регистрацию. Сделаем регистрацию обязательной:

Слушаем на определенном интерфейсе

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

* в данном примере squid будет слушать на адресе 192.168.1.15. И перечитываем конфигурацию squid:

Исходящий сетевой интерфейс

На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим:

acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33

acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34

* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34. Перечитываем конфигурацию squid:

Настройка цепочки прокси-серверов

  • hostname — другой сервер, на который мы будем передавать запрос.
  • type — тип «родства» другого сервера. Могут быть варианты:
    • parent
    • sibling
    • multicast

    * более подробное описание можно найти в самом конфигурационном файле SQUID.

    Если на прокси, к которому мы подключаемся, необходима авторизация, добавляем опцию login:

    cache_peer 10.11.12.13 parent 3128 3128 proxy-only login=loginname:password

    Запрещаем использование нашего прокси-сервера напрямую (не через cache_peer):

    # TAG: never_direct
    .
    never_direct allow all

    Перечитываем конфигурацию squid:

    Источник

Оцените статью
Adblock
detector