greenlock (let'encrypt) с экспресс и переадресацией портов - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь настроить letsencrypt (теперь, по-видимому, greenlock) для переадресации портов с помощью express.

У меня было эта первая проблема , которую я решил:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3443

Проблема в том, что теперь я получаю:

Fetching certificate for 'xxx' to use as default for HTTPS server...
[acme-v2] handled(?) rejection as errback:
Error: connect ECONNREFUSED 127.0.1.1:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14)
Error loading/registering certificate for 'xxx':
Error: connect ECONNREFUSED 127.0.1.1:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.1.1',
  port: 80
}

Мое приложение сейчас выглядит так:

require("greenlock-express")
    .create({
    server: "https://acme-staging-v02.api.letsencrypt.org/directory",
        email: "xxx@gmail.com", // The email address of the ACME user / hosting provider
        agreeTos: true, // You must accept the ToS as the host which handles the certs
        configDir: "~/.config/acme/", // Writable directory where certs will be saved
        communityMember: true, // Join the community to get notified of important updates
        telemetry: true, // Contribute telemetry data to the projec
    store: require('greenlock-store-fs'),
    approveDomains: ['xxx.xxx.xxx'],
        // Using your express app:
        // simply export it as-is, then include it here
        app: require("../app.js")

        //, debug: true
    })
    .listen(3000, 3443);

Очевидно, я не могу использовать порты 80 и 443 с nodeJS, ноЯ также не могу использовать любой другой порт с greenlock ... Какой обходной путь?

1 Ответ

1 голос
/ 15 октября 2019

Я - автор Greenlock.

Let's Encrypt против Greenlock

Let's Encrypt - это торговая марка EFF для их бесплатного сервиса SSL.

Greenlock - этофирменное наименование, которое я использую для своего клиента JavaScript, для их обслуживания.

Я изменил название, когда они начали преследовать торговую марку Let's Encrypt.

Video Tuts

Если вы подписаныБыстрый старт Greenlock, вы не можете потерпеть неудачу. :)

Также старый,но хорошо:

Keep It Stupid-Simple

  • VPS
  • netcap
  • systemd

На обычном VPS (например, Digital Ocean , Linode, Vultr или Scaleway ), где диск является постоянным, используйте «netcap». Это позволит пользователю без полномочий root связываться с привилегированными портами:

sudo setcap 'cap_net_bind_service=+ep' $(which node)

TADA! Теперь вы можете запускать node ./server.js --port 80 как обычный пользователь!

Помимо :

Вы также можете использовать systemd, чтобы остановить и запустить службу. Поскольку systemd иногда является лавашом, я написал скрипт оболочки на Go , который действительно упрощает развертывание проектов узлов:

# Install
curl https://rootprojects.org/serviceman/dist/linux/amd64/serviceman -o serviceman
chmod +x ./serviceman
sudo serviceman /usr/local/bin
# Use
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add npm start

или, если ваш сервер не'server.js' (стандарт де-факто) или дополнительные параметры:

cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add node ./my-server-thing.js -- --my-options

Все, что нужно, - это создать файл systemd для вас со стандартными значениями по умолчанию. Я бы порекомендовал вам также ознакомиться с документацией systemd, но это немного сложно, и есть, вероятно, более запутанные и в противном случае плохие учебники, чем простые и в остальном хорошие учебники.

Не делайтеt использовать AWS / EC2, если вы не являетесь экспертом

Я ответил на вопрос, который вы упомянули: https://stackoverflow.com/a/58388665/151312

Вероятно, он получит кучу отрицательных отзывов от приверженцев AWS. . но:

Не используйте AWS. Используйте VPS.

Мне действительно нравятся Digital Ocean и Vultr .

Кроме того, есть плагины Greenlock DNS-01 для обоих из них. Это сделает вашу жизнь по-настоящему легкой.

HTTP-01 против проверки DNS-01

Стандартные проверки для Greenlock ДОЛЖНЫ проходят через HTTP на порту 80. Это частьспецификацияОни НЕ МОГУТ проходить через HTTPS или через любой другой порт.

Однако, если вам нужен SSL / TLS для частных сетей (что, вероятно, не ваша проблема),Вы можете использовать плагины DNS-01. Как упомянуто выше, это действительно просто для интеграции с Digital Ocean, Vultr и рядом других:

Существует около десятка различных плагинов. У вас нет для их использования, за исключением групповых доменов и частных сетей, но если вы считаете, что управление DNS и вашим VPS в одном месте принесет вам пользу, яНастоятельно рекомендуем использовать DNS-01 вместо HTTP-01.

Переадресация портов не нужна

Не переадресация портов, если вы не эксперт и не знаете, что делаетеи почему. У вас будут тяжелые времена, и все будет работать не так, как вы ожидаете.

Как стать экспертом ... много способов (и это не сложно )... но, насколько я понимаю, это на самом деле не поможет вам достичь вашей самой непосредственной цели.

Извините, я не могу быть более полезным, но это большая тема.

...