Node-RED

Node-RED Nasıl Güvenceye Alınır: Pratik Bir Kontrol Listesi

Dışarıya açık bir Node-RED editörü, gerçekleşmeyi bekleyen bir uzaktan kod çalıştırma açığıdır. Bu kontrol listesi Node-RED'i yönetici kimlik doğrulaması, HTTPS, açık bir credential secret, korumalı HTTP uç noktaları, ağ denetimleri ve MQTT broker'ınıza TLS ile nasıl güvenceye alacağınızı gösteriyor.

Node-RED'in kimlik doğrulama ve TLS ile nasıl güvenceye alınacağını gösteren, Node-RED editörü üzerinde bir asma kilit
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Node-RED'i güvenceye almak için üç şeyi kilitlemeniz gerekir: editörü kimin açabileceği, ona giden trafiğin nasıl şifrelendiği ve flow'larınızın MQTT broker gibi dış sistemlerle nasıl konuştuğu. Bu kontrol listesi settings.js içindeki her ayarı kopyalayabileceğiniz komutlarla adım adım ele alıyor; sonunda bir ağ üzerinde çalışır bırakılması güvenli bir örneğe sahip olacaksınız.

Node-RED Neden Sağlamlaştırılmalı?

Yeni bir Node-RED kurulumunda kutudan çıktığı hâliyle editörde oturum açma yoktur ve 1880 portunda düz HTTP sunulur. Bu varsayılan bir dizüstü bilgisayarda kullanışlı, başka her yerde ise tehlikelidir. Editöre erişebilen herkes bir function node'u veya exec node'u deploy edebilir; bu da sunucuda Node-RED'in izinleriyle istediği komutu çalıştırabileceği anlamına gelir. Dışarıya açık, kimlik doğrulamasız Node-RED editörleri internet tarayıcıları tarafından düzenli olarak bulunur; bu yüzden editöre bir web sayfası gibi değil, bir yönetim konsolu gibi davranın.

Node-RED gizli bilgiler de tutar: broker parolaları, API token'ları, veritabanı kimlik bilgileri. Ayrıca çoğu zaman operasyonel teknoloji (OT) ile BT ağları arasında köprü kurduğu için ele geçirilmiş bir örnek, saldırganların asla ulaşmaması gereken yerlere bir basamak olabilir.

İşte kontrol listesinin tamamı; aşağıdaki bölümler her maddeyi açıklıyor.

# Denetim Nerede
1 Editör için oturum açmayı zorunlu kılın (adminAuth) settings.js
2 Editörü HTTPS üzerinden sunun settings.js veya reverse proxy
3 Açık bir credentialSecret belirleyin settings.js
4 HTTP uç noktalarını ve panoları koruyun settings.js / pano yapılandırması
5 Ağ erişimini sınırlayın Bağlanma adresi, güvenlik duvarı, VPN
6 En az ayrıcalıkla çalıştırın İşletim sistemi kullanıcısı, container
7 Kurulu node'ları ve modülleri denetleyin settings.js, palette
8 MQTT için TLS ve benzersiz kimlik bilgileri kullanın Broker config node
9 Node-RED'i ve node'ları güncel tutun Güncelleme rutini
10 Gizli bilgileri flow'ların ve git'in dışında tutun Kimlik bilgileri, ortam, projeler

1. Editör İçin Oturum Açmayı Zorunlu Kılın

Node-RED yönetim aracıyla güçlü bir parolanın bcrypt hash'ini oluşturun:

npx node-red admin hash-pw
# Password: ********
# $2b$08$wuAqPiKJlVN27eF5qJp.RuQYuy6ZYONW7a/UWYxDTtwKFCdB8F19y

Ardından settings.js dosyasına (~/.node-red/settings.js veya Docker'da /data/settings.js) adminAuth ekleyin:

adminAuth: {
    type: "credentials",
    users: [
        {
            username: "admin",
            password: "$2b$08$REPLACE_WITH_YOUR_HASH",
            permissions: "*"
        },
        {
            username: "viewer",
            password: "$2b$08$REPLACE_WITH_ANOTHER_HASH",
            permissions: "read"
        }
    ]
},

Node-RED'i yeniden başlattığınızda editör bir giriş ekranı gösterir. read izni, bir kişinin deploy etmeden flow'ları görüntülemesini sağlar; bu da operatörlere ve denetçilere uygundur. Tek bir yönetici parolasını paylaşmak yerine her kişiye kendi hesabını verin; böylece biri ayrıldığında erişimini kaldırabilirsiniz. Daha büyük ekipler için adminAuth, Passport aracılığıyla OAuth ve OpenID Connect stratejilerini de destekler; böylece mevcut kimlik sağlayıcınızı kullanabilirsiniz.

2. Editörü HTTPS Üzerinden Sunun

Düz HTTP üzerinden oturum açmak oturum token'ını ağ üzerinden açık metin olarak gönderir. HTTPS'yi ya doğrudan Node-RED'de etkinleştirin ya da TLS'yi bir reverse proxy'de sonlandırın.

Doğrudan settings.js içinde:

// settings.js dosyasının başına yakın
const fs = require("fs");

module.exports = {
    https: {
        key: fs.readFileSync("/home/nodered/certs/privkey.pem"),
        cert: fs.readFileSync("/home/nodered/certs/fullchain.pem")
    },
    requireHttps: true,
    // ...
};

Nginx, Caddy veya Traefik gibi bir reverse proxy arkasında Node-RED'i localhost'a bağlı HTTP üzerinde tutun ve sertifikaları ve yenilemeyi proxy'ye bırakın. Editör canlı durum ve debug mesajları için /comms üzerinde bir WebSocket kullandığından proxy'nin WebSocket yükseltmelerini (upgrade) ilettiğinden emin olun.

3. Açık Bir Credential Secret Belirleyin

Node-RED, MQTT broker parolanız gibi node kimlik bilgilerini flows_cred.json içinde şifreler. Bir anahtar belirlemezseniz bir tane oluşturur ve kullanıcı dizinindeki bir çalışma zamanı dosyasına kaydeder. Tercihen bir ortam değişkeninden kendi anahtarınızı belirleyin:

credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET,

Bu anahtarı parola yöneticinizde veya gizli bilgi deponuzda saklayın. Anahtar olmadan şifreli kimlik bilgisi dosyası işe yaramaz; amaç da budur: flow dosyalarınızı kopyalayan biri broker parolasını okuyamaz. Anahtarı daha sonra değiştirirseniz Node-RED kimlik bilgilerini bir sonraki deploy'da yeniden şifreler.

4. HTTP Uç Noktalarını ve Panoları Koruyun

adminAuth yalnızca editörü ve yönetim API'sini korur. http in node'larıyla oluşturulan flow'lar ve statik dosyalar ayrı bir saldırı yüzeyidir. Bunlar için temel kimlik doğrulama ekleyin:

httpNodeAuth: { user: "api", pass: "$2b$08$REPLACE_WITH_HASH" },
httpStaticAuth: { user: "static", pass: "$2b$08$REPLACE_WITH_HASH" },

Paylaşılan bir paroladan daha kapsamlı her şey için önüne düzgün kimlik doğrulamalı bir proxy koyun veya flow'un içinde bir token kontrol edin. Dashboard 2.0 kullanıyorsanız kendi erişim seçeneklerini gözden geçirin ve onu aynı kimlik doğrulamalı proxy üzerinden sunmayı düşünün. Salt okunur bir pano bile gizli tutmayı tercih edeceğiniz tesis verilerini açığa çıkarabilir.

5. Ağ Erişimini Sınırlayın

En iyi saldırı yüzeyi, hiç olmayanıdır. Node-RED'i localhost'a bağlayın ve ona bir VPN, SSH tüneli veya kimlik doğrulamalı bir proxy üzerinden erişin:

uiHost: "127.0.0.1",
uiPort: process.env.PORT || 1880,

Docker'da portu yalnızca loopback adresinde yayınlayın; örneğin Node-RED Docker rehberimizde gösterildiği gibi 127.0.0.1:1880:1880. Bir router'da 1880 portunu asla internete yönlendirmeyin. Bir örnek bir edge gateway üzerinde çalışıyorsa editöre yalnızca yönetim ağının erişebilmesi için güvenlik duvarıyla koruyun.

Çalışma anında asla değişmemesi gereken üretim sistemleri için daha ileri gidip disableEditor: true ayarlayabilirsiniz. Flow'lar çalışmaya devam eder ama editör ve yönetim API'si ortadan kalkar; değişiklikleri dosyaları güncelleyip yeniden başlatarak deploy edersiniz.

6. En Az Ayrıcalıkla Çalıştırın

Node-RED'i root olarak çalıştırmayın. Yalnızca Node-RED dizinine sahip, özel bir sistem kullanıcısı kullanın. Resmi Docker imajı zaten root olmayan bir kullanıcı olarak çalışır. Flow'larınız ihtiyaç duymuyorsa exec gibi sistem komutları çalıştıran node'ları nodesExcludes ayarıyla kaldırın veya kısıtlayın.

7. Kurulu Node'ları ve Modülleri Denetleyin

Katkıda bulunulan her node, Node-RED'in izinleriyle çalışan koddur. Yalnızca gerçekten ihtiyaç duyduğunuz, bakımı yapılan node'ları kurun ve üretime eklemeden önce gözden geçirin. Palette'ten nelerin kurulabileceğini kısıtlayabilirsiniz:

externalModules: {
    palette: {
        allowInstall: true,
        allowList: ["@flowfuse/node-red-dashboard", "node-red-contrib-modbus"]
    },
    modules: {
        allowInstall: false
    }
},

modules.allowInstall değerini false yapmak, function node'larının çalışma anında rastgele npm paketleri çekmesini engeller.

8. MQTT İçin TLS ve Benzersiz Kimlik Bilgileri Kullanın

Güvenli bir Node-RED örneği daha sonra broker'ıyla açık metin olarak konuşmamalıdır. MQTT broker config node'unda:

  1. 8883 portunu kullanın ve sertifika doğrulaması etkin kalacak şekilde Use TLS kutusunu işaretleyin.
  2. Node-RED için cihazlardan ayrı, özel bir kullanıcı adı, parola ve client ID kullanın. ConnectMQ'da client ID'ler verildikleri kimlik bilgilerine bağlıdır; bu yüzden sızan bir cihaz kimlik bilgisi Node-RED örneğinizi taklit edemez.
  3. Gerçek verileri asla herkese açık bir test broker'ında publish etmeyin. Herkese açık MQTT test broker'ı öğrenmek için idealdir, ancak herkese açık alanındaki her topic herkes tarafından okunabilir.

Özel CA dosyaları dahil tam kurulum Node-RED MQTT TLS rehberimizde yer alır; MQTT güvenliği en iyi uygulamaları yazımız ise broker tarafını ele alır.

9. Node-RED'i ve Node'ları Güncel Tutun

Güvenlik düzeltmeleri Node-RED sürümleri, Node.js sürümleri ve katkıda bulunulan node güncellemeleriyle gelir. Node güncellemeleri için Manage palette bölümünü kontrol edin, Node-RED sürüm notlarını takip edin ve Node.js'i desteklenen bir LTS hattına yükseltin. Önce kullanıcı dizininizi yedekleyin ve güncellemeleri üretimden önce bir kopya üzerinde test edin.

10. Gizli Bilgileri Flow'ların ve Git'in Dışında Tutun

Kimlik bilgilerinin yeri function kodu veya inject node'ları değil, şifrelenen config node kimlik bilgisi alanlarıdır. Function node'larında API anahtarlarını ortam değişkenlerinden env.get() ile okuyun. Flow'ları git ile sürümlüyorsanız Node-RED projeleri özelliği kimlik bilgisi dosyasını depoya hiç girmeyen bir proje anahtarıyla şifreler.

Resmi Node-RED güvenlik belgeleri burada bahsedilen her seçeneği listeler. Flow oluşturmaya daha geniş bir giriş için Node-RED MQTT eğitimine bakın.

Güvenceye Alınmış Node-RED'i ConnectMQ'ya Bağlayın

Sağlamlaştırılmış bir Node-RED aynı standartlara sahip bir broker'ı hak eder. ConnectMQ; Let's Encrypt sertifikasıyla 8883'te TLS, verilen kimlik bilgilerine bağlı client ID'ler, çok kiracılı (multi-tenant) yalıtım, flood koruması ve tekrarlanan başarısız girişlerden sonra otomatik IP engelleme sunan tam yönetilen bir MQTT hizmetidir. app.connectmq.com adresinde kredi kartı gerektirmeyen ücretsiz Serverless planla bir broker oluşturun ve Node-RED'e kendi oluşturulmuş kimlik bilgilerini verin. Barındırma modellerini karşılaştırıyorsanız bulut MQTT broker rehberimizi okuyun.

Sık Sorulan Sorular

Node-RED varsayılan olarak güvenli mi?

Hayır. Varsayılan kurulumda editör girişi yoktur ve düz HTTP sunulur. Kendi makinenizin ötesine açmadan önce adminAuth'u etkinleştirmeli, HTTPS eklemeli ve ağ erişimini kısıtlamalısınız.

Node-RED editörü için nasıl parola belirlerim?

node-red admin hash-pw ile bir bcrypt hash'i oluşturun, bunu settings.js içindeki adminAuth bölümüne ekleyin ve Node-RED'i yeniden başlatın.

adminAuth panolarımı ve HTTP uç noktalarımı korur mu?

Hayır. Editörü ve yönetim API'sini kapsar. Flow uç noktaları için httpNodeAuth, httpStaticAuth, panonun kendi seçeneklerini veya kimlik doğrulama yapan bir reverse proxy kullanın.

Credential secret'ı kaybedersem ne olur?

Node-RED flows_cred.json dosyasının şifresini çözemez; bu yüzden saklanan kimlik bilgileri kaybolur. Flow'larınız yine yüklenir, ancak MQTT broker kimlik bilgileriniz gibi parolaları yeniden girmeniz gerekir.

İlgili yazılar

ISA-95 Topic'leriyle Node-RED OPC UA İstemcisinden MQTT'ye

Bir PLC veya simülasyon sunucusundaki OPC UA değişkenlerine node-red-contrib-opcua ile abone olun, node ID'lerini ISA-95 tarzı MQTT topic'lerine eşleyin ve değerleri kalite bilgisi ve zaman damgalarıyla yayınlayın.

8 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.