По умолчанию Gopeed запускает встроенный HTTP-сервер на 0.0.0.0:9999
без какого-либо механизма аутентификации и шифрования. Это значит, что доступ к веб-интерфейсу открыт для всех клиентов, которые могут достучаться до порта 9999. В ситуации, когда Gopeed работает на VPS с публичным IP, любой сканер портов может обнаружить сервис и получить доступ к нему. Кроме того, изначально трафик передаётся по HTTP, то есть в незашифрованном виде. В такой конфигурации данные о загрузках, cookie и любые управляющие запросы могут быть перехвачены и изменены посредником.
Настройка реверс-прокси с HTTPS решает сразу несколько проблем. Во-первых, TLS-шифрование обеспечивает конфиденциальность и целостность трафика, поскольку данные между браузером и сервером больше не идут в открытом виде. Во-вторых, реверс-прокси позволяет включить базовую аутентификацию или любой другой механизм авторизации, чтобы ограничить доступ к интерфейсу Gopeed. В-третьих, внешний доступ остаётся только через стандартный порт 443, тогда как внутренний порт 9999 можно закрыть файерволом и оставить доступным только для прокси.
В статье разберём, как защитить доступ к Gopeed, установленном на Ubuntu или Debian, при помощи протокола HTTPS и базовой аутентификации.
Как защитить доступ к Gopeed
Чтобы настроить доступ через HTTPS к веб-интерфейсу Gopeed (как и к любому другому сайту), необходимо сначала привязать к IP-адресу сервера доменное имя. Это связано с тем, что установка TLS-сертификата возможна только при обращении к сайту по имени домена. Привязка доменного имени к IP-адресу производится при помощи специальной DNS-записи, а именно A-записи. Такую настройку можно сделать на сайте регистратора вашего домена, либо во вкладке Домены
в личном кабинете RUVDS.

Для публикации сервисов, таких как Gopeed, удобно использовать веб-сервер Caddy, настроенный для работы в качестве обратного прокси. Caddy максимально автоматизирует рутину, которая у Nginx или Apache требует ручной настройки. Веб-сервер Caddy обладает встроенным ACME-клиентом. Это позволяет ему самостоятельно получать и продлевать TLS-сертификаты от Let’s Encrypt, без вызова внешних утилит вроде Certbot. У Caddy из коробки включены современные TLS-настройки, HTTP/2 и даже HTTP/3, что позволяет не тратить время на подбор параметров шифров или протоколов.
Установка Caddy
При настройке для работы по HTTPS Caddy использует порты 443 и 80. Это связано с тем, что для выпуска и продления TLS-сертификатов через ACME-протокол используется так называемый http-01 challenge
. Сертификационный центр при проверке домена делает обычный HTTP-запрос на порт 80, ожидая увидеть там специальный токен. Caddy при этом автоматически поднимает обработчик на /.well-known/acme-challenge
и возвращает правильный ответ. Если порт 80 закрыт, валидация владения доменом не проходит и сертификат выпустить невозможно. После получения сертификата Caddy продолжит слушать 80-й порт, но только для перенаправления трафика на HTTPS. Это упрощает доступ пользователям и одновременно обеспечивает успешное автоматическое продление сертификата. Таким образом, перед началом работ по настройке HTTPS-доступа необходимо открыть доступ к серверу через порты 80 и 443. Чтобы это сделать, создайте в брандмауэре UFW соответствующие разрешающие правила:
$ sudo ufw allow 80
$ sudo ufw allow 443
Затем установите пакеты, которые понадобятся для дальнейшей работы:
$ sudo apt install curl gpg
В данном случае команда выше устанавливает:
curl
– утилиту для передачи данных по URL, которая используется для загрузки файлов по HTTP/HTTPS;gpg
– GNU Privacy Guard, инструмент для работы с криптографией, который будет нужен для того, чтобы пакетный менеджерapt
мог проверять подлинность пакетов при установке.
Следующей командой загрузите GPG-ключ репозитория Caddy с сохранением его в бинарном формате в каталоге /usr/share/keyrings/
. Это необходимо сделать для того, чтобы можно было прописать репозиторий в /etc/apt/sources.list.d/
, а apt
мог проверять подлинность пакетов при установке.
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
После чего добавьте в систему репозиторий Caddy:
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Затем обновите списки пакетов, чтобы система узнала о появлении нового репозитория:
$ sudo apt update
И запустите установку непосредственно Caddy:
$ sudo apt install caddy
Чтобы убедиться в корректности установки, выведите на экран текущее состояние службы Caddy:
$ systemctl status caddy
Вывод команды не должен содержать сообщений о каких-либо ошибках:

Настройка Caddy
Если вывод предыдущей команды не содержит ошибок, откройте для редактирования конфигурационный файл Caddy:
$ sudo nano /etc/caddy/Caddyfile
Если вы планируете использовать Caddy только в качестве обратного прокси, то приведите его содержимое к следующему виду:
your-site-name.ru {
reverse_proxy localhost:9999
}
В данном случае:
your-site-name.ru
– доменное имя, по которому доступен веб-интерфейс Gopeed;9999
– номер порта, на который будут проксироваться все запросы, пришедшие на домен.
Сохраните внесённые изменения, закройте файл, после чего перезапустите службу Caddy:
$ sudo systemctl restart caddy
Затем откройте браузер и перейдите на веб-интерфейс Gopeed, используя для этого его доменное имя. Подключение к веб-странице должно быть осуществлено через протокол HTTPS. Об этом будет свидетельствовать надпись вида Подключение защищено
в навигационной строке браузера.

С этого момента порт 9999 будет использоваться только для проксирования запросов обратным прокси. А значит, доступ к серверу через данный порт можно закрыть. Сделать это можно, удалив соответствующее правило в брандмауэре UFW:
$ sudo ufw delete allow 9999
Установка парольной защиты
Gopeed не имеет встроенной авторизации, но на уровне Caddy есть возможность защитить веб-интерфейс паролем. Чтобы установить данный механизм аутентификации, необходимо внести изменения в конфигурационный файл Caddy:
$ sudo nano /etc/caddy/Caddyfile
В файл добавьте секцию route
:
your-site-name.ru {
reverse_proxy localhost:9999
route {
basic_auth * {
user-for-gopeed $abR.......pG41Zm
}
reverse_proxy 127.0.0.1:9999
}
}
В данном блоке:
basic_auth * { ... }
– встроенный модуль Caddy, который реализует HTTP Basic Auth;*
– данная настройка означает, что правило необходимо применять ко всем запросам;user-for-gopeed
– имя пользователя, которое нужно будет ввести в диалоговом окне браузера;$abR.......pG41Zm
– bcrypt-хэш пароля.
Для генерации bcrypt-хэша пароля закройте Caddy-файл с сохранением изменений и запустите команду:
$ caddy hash-password
Команда попросит вас дважды ввести пароль, при помощи которого вы будете подключаться к веб-интерфейсу Gopeed. После чего сгенерирует строку, похожую на запись вида:
$abR.......pG41Zm
Именно эту строку и необходимо скопировать и вставить в конфигурационный файл Caddy. После сохранения всех изменений перезапустите службу Caddy:
$ sudo systemctl reload caddy
В результате при подключении к веб-интерфейсу Gopeed вам нужно будет ввести имя пользователя, указанное в конфигурационном файле, и пароль, который вы набрали при выполнении команды caddy hash-password
.
