Lorawan-stack: 同じマシン上のapache + ttnスタック+ letsencryptacme証明書に問題が発生する

作成日 2019年12月19日  ·  5コメント  ·  ソース: TheThingsNetwork/lorawan-stack

バグレポートを提出していただきありがとうございます。 以下のテンプレートに記入してください。記入しないと、このバグレポートを処理できません。

概要

ttnマシンにApacheがインストールされて有効になっている(80/443をリッスンしている)場合の問題。
TTNコンソールは80/443ポートでブロックされ、1885,8885ポートで動作しています。

この場合、ttnは証明書を取得/更新できません。
誰かがTTNスタックといくつかのDB / Webアプリを同じデバイスに配置したい場合の非常に一般的な状況。

https://github.com/TheThingsNetwork/lorawan-stack/issues/1731

TTNにエラーが表示されます:証明書が見つからないか、ホストがホワイトリストにありません。

再現する手順

どうすれば問題を再現できますか?

1)Apacheがアクティブな場合(80、443をリッスン)ポート構成-ttnスタックは80、443ポートを有効にすることを許可しません(80,443はdocker-compose.ymlで#でなければなりません-ポート1885、8885が使用されます)。 これでは(docker-composeはletsencrypt証明書を取得しません)。

docker-compose.ymlファイル:

   ports:
(hashed)      - '80:1885'
(hashed)     - '443:8885'
      - '1882:1882'
      - '8882:8882'
      - '1883:1883'
      - '8883:8883'
      - '1884:1884'
      - '8884:8884'
      - '1885:1885'
      - '8885:8885'
      - '8886:8886'
      - '1887:1887'
      - '8887:8887'
      - '1700:1700/udp'
    env_file: '.env'

.envファイルはポートを443ではなく8885に移動しました:

TTN_LW_IS_EMAIL_NETWORK_CONSOLE_URL=https://subdomain.example.com:8885/console
TTN_LW_IS_EMAIL_NETWORK_IDENTITY_SERVER_URL=https://subdomain.example.com:8885/oauth

TTN_LW_IS_OAUTH_UI_CANONICAL_URL=https://subdomain.example.com:8885/oauth
TTN_LW_IS_OAUTH_UI_IS_BASE_URL=https://subdomain.example.com:8885/api/v3

TTN_LW_CONSOLE_OAUTH_AUTHORIZE_URL=https://subdomain.example.com:8885/oauth/authorize
TTN_LW_CONSOLE_OAUTH_TOKEN_URL=https://subdomain.example.com:8885/oauth/token

TTN_LW_CONSOLE_UI_CANONICAL_URL=https://subdomain.example.com:8885/console
TTN_LW_CONSOLE_UI_AS_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_GS_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_IS_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_JS_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_NS_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_EDTC_BASE_URL=https://subdomain.example.com:8885/api/v3
TTN_LW_CONSOLE_UI_QRG_BASE_URL=https://subdomain.example.com:8885/api/v3

2)私たちが:
Apacheを停止します(service apache2 stop)
ttn-stackを再構成して有効にします(80、443ポート-削除(ハッシュ))
Webブラウザでメインサブドメインに接続すると、証明書が正常に取得されます(80/443ポート)

docker-compose.ymlファイル:

  ports:
      - '80:1885'
      - '443:8885'
      - '1882:1882'
      - '8882:8882'
      - '1883:1883'
      - '8883:8883'
      - '1884:1884'
      - '8884:8884'
(hashed)      - '1885:1885'
(hashed)     - '8885:8885'
      - '8886:8886'
      - '1887:1887'
      - '8887:8887'
      - '1700:1700/udp'
    env_file: '.env'

.envファイルの標準ポートは443を使用しました-この場合、ttnはletsencrypt証明書を取得します

TTN_LW_IS_EMAIL_NETWORK_CONSOLE_URL=https://subdomain.example.com/console
TTN_LW_IS_EMAIL_NETWORK_IDENTITY_SERVER_URL=https://subdomain.example.com/oauth


TTN_LW_IS_OAUTH_UI_CANONICAL_URL=https://subdomain.example.com/oauth
TTN_LW_IS_OAUTH_UI_IS_BASE_URL=https://subdomain.example.com/api/v3

TTN_LW_CONSOLE_OAUTH_AUTHORIZE_URL=https://subdomain.example.com/oauth/authorize
TTN_LW_CONSOLE_OAUTH_TOKEN_URL=https://subdomain.example.com/oauth/token

TTN_LW_CONSOLE_UI_CANONICAL_URL=https://subdomain.example.com/console
TTN_LW_CONSOLE_UI_AS_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_GS_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_IS_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_JS_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_NS_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_EDTC_BASE_URL=https://subdomain.example.com/api/v3
TTN_LW_CONSOLE_UI_QRG_BASE_URL=https://subdomain.example.com/api/v3

3)証明書を更新した場合は、最初の構成(apacheで使用されるポート80/443、コンソールに1885/8885を使用)に戻すことができます。https ://subdomain.domain.com:8885でコンソールを正常に開き

あなたは今何を見ていますか?

ターミナル出力を貼り付けるか、ログをアップロードするか(.txtとして)、スクリーンショットをアップロードしてください。

..。

代わりに何を見たいですか?

該当する場合は、いくつかの例またはモックアップを追加してください。

..。

環境

お使いの環境:OS /ブラウザ/ゲートウェイ/デバイス/ ...? バージョン? ID / EUI? 該当する場合は、「ttn-lw-cliversion」または「ttn-lw-stackversion」の出力を貼り付けます。

..。

これをどのように実装することを提案しますか?

同じマシンでttnとapacheの両方を構成する方法はありますか?または強制的に暗号化して別のポートで認証を取得しますか?

これを自分で行い、プルリクエストを送信できますか?

これについてサポートが必要な場合は、専門家に@メンションすることもできます。

..。

documentation

最も参考になるコメント

リバースプロキシの背後でThingsStackを実行する場合は、構成でTLSを完全に無効にし、すべてのTLS接続(HTTPだけでなく、gRPC、MQTTなど)の終了をプロキシに任せる必要があります。 The Things StackのすべてのTLSリスナーを無効にする方法と、リバースプロキシでマップする必要のあるポートを文書化できると思います。

これを行う人は、プロキシがどのように機能するかをすでに知っていると期待できると思います。したがって、apache / nginx / haproxy / envoy / etcを使用してこれを具体的に行う方法を文書化する必要はないと思います。

全てのコメント5件

リバースプロキシの背後でThingsStackを実行する場合は、構成でTLSを完全に無効にし、すべてのTLS接続(HTTPだけでなく、gRPC、MQTTなど)の終了をプロキシに任せる必要があります。 The Things StackのすべてのTLSリスナーを無効にする方法と、リバースプロキシでマップする必要のあるポートを文書化できると思います。

これを行う人は、プロキシがどのように機能するかをすでに知っていると期待できると思います。したがって、apache / nginx / haproxy / envoy / etcを使用してこれを具体的に行う方法を文書化する必要はないと思います。

こんにちは@htdvisser 、応答をありがとう。

パブリック/スタティックIPアドレス(LTEベース)を使用してローカルコンピューターでテストしました-ネットワークの構造がわかりません。
また、インターネット側で直接VPS(ovh.eu)でテストしました。プロバイダーによると、プロキシとファイアウォールはありません(一部のDoSのみ)。

どちらのバリアントも同じものを必要とします(各クライアント/ IPステーションの標準80/443ポートでの証明書の初期化)。
後でコンソールを他のポート(1885/8885)に切り替えることができます。

ネットワークの構造に関係なく、 VPSまたはパブリック/スタティックIPデバイスに関して別の問題があります。

しばらくの間「コンソールログ画面」を見ると、TTNスタックによって報告された「ハッカー活動の試行」がたくさんあります(画面上の標準のhttp / httsポートでのWeb攻撃のみが表示されます)。 ドメイン/サブドメインにはDNSレコードのみがあり、ロボット/検索エンジンが検出する可能性のあるWebページには使用されていません。 ハッカーロボットがすべての静的IP4アドレスで応答デバイスを検索すると、遅かれ早かれデバイスがハッカーマシンによって検出され、攻撃されると思います。 そのため、100%安全であっても、既知のhttp / httpsポートに対する大量の攻撃でサーバーをビジーにするのは非常に簡単です。

コンソール/ Webインターフェイスに80/443ポートを使用せず、TTNスタックコンソール用に変更する可能性があることは非常に合理的だと思います。 これは管理目的(公開ではありません)であり、管理者はこの設定を認識しています。

唯一の質問は次のとおりです。
プランA)異なるポートでacme / letsencrypt証明書を自動的に作成/更新するにはどうすればよいですか?
プランB)少なくとも管理用のいくつかの既知のホスト(静的IPなど)について、ここで説明する上記の手動手順を自動化することは可能ですか?

ACMEのHTTP-01およびTLS-ALPN-01チャレンジの仕様では、ポート80/443を使用する必要があります。 別のポートを使用している場合、これらのチャレンジを使用して証明書を取得または更新することはできません。

certbotなどのツール(これはドキュメントの範囲外です)または有料の認証局(これもドキュメントの範囲外)でDNS-01チャレンジを使用してACME証明書を要求してみてください。

このような証明書がある場合は、「カスタム証明書」の手順に従ってThings Stackを構成できます: https ://thethingsstack.io/v3.3.2/guides/getting-started/certificates/#custom-certificatesおよび次の環境:

TTN_LW_TLS_SOURCE=file
TTN_LW_TLS_CERTIFICATE=/path/to/cert-chain.pem
TTN_LW_TLS_CERTIFICATE=/path/to/key.pem

TLS終了プロキシの背後で実行するようにThingsStackを構成する方法を文書化するために、問題https://github.com/TheThingsNetwork/lorawan-stack/issues/1760を作成しました。

The Things Stackで外部から要求された証明書を構成する方法を文書化するために、問題https://github.com/TheThingsNetwork/lorawan-stack/issues/1761を作成しました。

ありがとう

このページは役に立ちましたか?
0 / 5 - 0 評価