Endüstriyel IoT

MQTT DMZ Tasarımı: MQTT'yi Endüstriyel DMZ'ye Yerleştirmek

Bir MQTT DMZ, OT ağına tek bir gelen port açmadan tesis verisinin buluta ulaşmasını sağlar. Bu rehber yalnızca dışa doğru desenleri, DMZ köprü broker'larını, güvenlik duvarı kurallarını ve tasarımı zayıflatan hataları ele alıyor.

OT bölgesi ile bulut broker'ı arasında bir MQTT DMZ bulunan katmanlı fabrika ağı diyagramı
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

Bir MQTT DMZ, tesis verisinin bulut ve kurumsal sistemlere giderken operasyonel teknoloji (OT) ağından çıktığı, ancak dışarıdan hiçbir şeyin geri içeri ulaşmasına izin vermeyen ağ bölgesidir. Bu rehberde MQTT'nin bir DMZ'ye neden bu kadar iyi uyduğunu, pratikte işe yarayan üç yerleşim desenini, talep etmeniz gereken güvenlik duvarı kurallarını ve OT verisini TLS üzerinden bir bulut broker'ına ileten çalışan bir köprü (bridge) yapılandırmasını öğreneceksiniz.

MQTT Neden Endüstriyel DMZ'ye Uygundur?

Çoğu endüstriyel güvenlik mimarisi, Purdue modelinin veya IEC 62443 bölge ve kanal (zones and conduits) yaklaşımının bir varyantını izler. Seviye 0-2 sensörleri, PLC'leri ve HMI'ları barındırır; Seviye 3 SCADA ve historian gibi saha operasyonlarını barındırır; Seviye 3 ile kurumsal ağ (Seviye 4 ve üstü) arasında ise genellikle Seviye 3.5 olarak adlandırılan bir endüstriyel DMZ bulunur. DMZ'nin kuralı basittir: hiçbir trafik onun içinden doğrudan geçmez. Her akış DMZ'de sonlanır ve oradan yeni bir akış başlar.

Klasik entegrasyon protokolleri bu kuralla zorlanır. OPC DA, Modbus TCP veya bir historian sorgu arayüzü gibi sorgulama protokolleri, tüketicinin üreticiye bir bağlantı açmasını bekler. Bu da OT ağına gelen bir bağlantı anlamına gelir; güvenlik ekibinin kaçınmak istediği şey tam olarak budur.

MQTT yönü tersine çevirir. Her katılımcı, bir broker'a dışarı doğru bağlanan bir client'tır. OT tarafındaki bir gateway dışa doğru bir TCP bağlantısı açar, kimliğini doğrular ve yayın yapar. BT veya buluttaki tüketiciler de broker'a dışarı doğru bağlanıp abone olur. Kimsenin fabrika sahasında dinleyen bir port açmasına hiç gerek yoktur. Bu dışa doğru bağlantıların buluşma noktası olarak MQTT broker'ın ne yaptığını anladığınızda, DMZ tasarımı üzerine düşünmek çok daha kolaylaşır.

Üç MQTT DMZ Yerleşim Deseni

Tek bir doğru tasarım yoktur. Doğru desen, bölge politikanızın ne kadar katı olduğuna ve kaç sahanız olduğuna bağlıdır.

Desen Broker'ın bulunduğu yer OT'den akış En uygun olduğu durum
A. Doğrudan dışa doğru Yalnızca bulut OT gateway, güvenlik duvarı üzerinden bulut broker'ına dışarı doğru bağlanır Küçük sahalar, pilotlar, resmi bir DMZ'si olmayan sahalar
B. DMZ köprü broker'ı DMZ'de buluta köprülenmiş yerel broker OT gateway DMZ broker'ına bağlanır; DMZ broker'ı buluta dışarı doğru bağlanır "Hiçbir akış DMZ'yi geçemez" kuralı katı olan sahalar
C. DMZ gateway'i DMZ'de gateway yazılımı, bulut broker'ı OT gateway veya OPC UA sunucusu bir DMZ gateway'i tarafından okunur, o da buluta yayınlar Seviye 2 veya 3'e hiçbir şey kuramayan tesisler

Desen A: Bulut broker'ına yalnızca dışa doğru

Gateway Seviye 3'te bulunur ve 8883 portunda doğrudan bir bulut MQTT broker'ına TLS bağlantısı açar. Güvenlik duvarı tek bir dış hedefe ve tek bir porta izin verir. Dönüş trafiği yalnızca bu kurulmuş oturum üzerinden akar. Bu desen hızlı devreye alınır ve birçok tesis için tamamen kabul edilebilirdir; ancak teknik olarak bir oturumun DMZ'yi geçmesine izin verir ve bazı politikalar bunu yasaklar.

Desen B: DMZ'de bir köprü broker'ı

Mosquitto gibi küçük bir broker, DMZ'deki sıkılaştırılmış bir sunucuda çalışır. OT gateway'leri ona aşağıdan bağlanır ve DMZ broker'ı buluta kendi dışa doğru köprü bağlantısını açar. İki ayrı oturum, iki ayrı kimlik bilgisi seti vardır ve internetle konuşan tek makine DMZ sunucusudur. Bulut bağlantısı koparsa köprü QoS 1 mesajlarını yerel olarak kuyruğa alır; bu da gateway'lerdeki MQTT store-and-forward ile doğal olarak eşleşir.

Desen C: DMZ'de bir protokol gateway'i

Bazen OT bölgesine yeni hiçbir şey kurulamaz. Bu durumda DMZ'deki bir gateway mevcut bir arayüzü okur; örneğin dar bir kuralla DMZ'ye açılmış bir OPC UA sunucusunu. Ardından MQTT'yi yukarıya yayınlar. Bu en zarif olmayan desendir, çünkü artık DMZ OT'ye doğru bir bağlantı başlatır; yine de bulutu tesisten tamamen yalıtılmış tutar. IIoT edge gateway rehberimiz bu gateway'in nasıl seçileceğini ele alıyor.

MQTT DMZ İçin Güvenlik Duvarı Kuralları

Hangi deseni seçerseniz seçin, değişiklik talebinden önce kuralları yazıya dökün. Güvenlik duvarı ekipleri kesin kuralları belirsiz olanlardan daha hızlı onaylar.

Kural Kaynak Hedef Port Yön
1 OT gateway (Seviye 3) DMZ broker'ı TCP 8883 (veya güvenilir bir segment içinde 1883) OT'den DMZ'ye
2 DMZ broker'ı Bulut broker host adı TCP 8883 DMZ'den internete
3 BT tüketicileri Bulut broker host adı TCP 8883 veya 8084 (WSS) Kurumsal ağdan internete
4 Herhangi OT bölgesi Herhangi Reddet
5 İnternet DMZ broker'ı Herhangi Reddet

Birkaç pratik not:

  1. Dışa doğru kuralda IP adresi değil broker host adını kullanın ya da güvenlik duvarınız destekliyorsa bir FQDN nesnesi kullanın. Bulut IP'leri değişebilir.
  2. DMZ sunucusu için DNS çözümlemesine izin verin; dahili bir çözümleyiciye ya da belirli bir üst sunucuya.
  3. Şifresiz 1883 portunu internetten tamamen uzak tutun. Sahadan çıkan her şey için TLS ile 8883 kullanın.
  4. Yolda TLS denetimi yapan bir proxy varsa broker host adını hariç tutun. Denetim, sertifika doğrulamasını ve uzun ömürlü MQTT oturumlarını bozar.
  5. Uzun boşta kalma zaman aşımları önemlidir. Bazı güvenlik duvarları boştaki TCP oturumlarını birkaç dakika sonra düşürür; bu yüzden MQTT keepalive değerini güvenlik duvarının boşta kalma zaman aşımının altına, örneğin 60 saniyeye ayarlayın.

Örnek: DMZ'den Bulut Broker'ına Mosquitto Köprüsü

Aşağıdaki yapılandırma Desen B'yi uygular. DMZ broker'ı yalnızca OT'ye bakan arayüzünde dinler ve seçilmiş topic'leri TLS üzerinden bir ConnectMQ broker'ına köprüler. Kimlik bilgilerini portalda üretilen kullanıcı adı, parola ve client ID ile değiştirin.

# /etc/mosquitto/conf.d/dmz.conf

# Yalnızca OT bölgesine bakan arayüzde dinle
listener 8883 10.20.0.5
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/dmz-broker.crt
keyfile /etc/mosquitto/certs/dmz-broker.key
allow_anonymous false
password_file /etc/mosquitto/passwd

# Bulut broker'ına dışa doğru köprü
connection connectmq-cloud
address broker.connectmq.com:8883
bridge_protocol_version mqttv311
bridge_capath /etc/ssl/certs
bridge_insecure false
remote_clientid YOUR_CLIENT_ID
remote_username YOUR_USERNAME
remote_password YOUR_PASSWORD
cleansession false
try_private false
keepalive_interval 60
restart_timeout 10 120

# Yalnızca tesis telemetrisini, yalnızca yukarı yönde ilet
topic factory1/# out 1 "" connectmq/

DMZ politikasının yazılımda uygulandığı yer topic satırıdır: out, mesajların yalnızca DMZ broker'ından buluta aktığı, asla geri aşağı inmediği anlamına gelir. Yerel factory1/line1/cnc1/telemetry topic'i bulutta connectmq/factory1/line1/cnc1/telemetry olarak ulaşır. Uzak taraf başka bir Mosquitto örneği olmadığı için try_private false kullanın ve bulut uç noktasının Let's Encrypt sertifikasının sistem CA deposuna karşı doğrulanması için bridge_insecure false değerini koruyun.

Herhangi bir PLC verisini işin içine katmadan önce yolu DMZ sunucusundan test edin:

# DMZ sunucusunda: yerel bir test mesajı yayınla
mosquitto_pub -h 10.20.0.5 -p 8883 --cafile /etc/mosquitto/certs/ca.crt \
  -u gateway01 -P 'local-secret' -i dmz-test-01 \
  -t factory1/test/hello -m '{"status":"ok"}' -q 1

# Bulut broker'ına erişimi olan herhangi bir makineden: ulaştığını doğrula
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID-reader \
  -t 'connectmq/factory1/#' -v

ConnectMQ'nun client ID'leri verilen kimlik bilgilerine bağladığını unutmayın; bu yüzden ikinci client'ın uydurma bir ID yerine portaldan alınmış kendi kimlik bilgisi setine ihtiyacı vardır. Kimlik bilgileriniz olmadan önce deneme yapmak için köprüyü, connectmq/demo/<random-id>/ gibi benzersiz bir önekle 1883 portundaki genel MQTT test broker'ına yönlendirebilirsiniz; ancak gerçek tesis verisini asla genel bir alana göndermeyin.

Komutlar Hiç Aşağı Akmalı mı?

Telemetrinin yukarı gitmesi işin kolay kısmıdır. Daha zor soru, herhangi bir şeyin geri aşağı gelmesi gerekip gerekmediğidir: set değeri değişiklikleri, reçete indirmeleri, onaylar. İlk kurulum için iyi bir varsayılan cevap hayırdır. Köprüyü yalnızca out olarak tutun ve operatörlerin set değerlerini mevcut HMI veya SCADA üzerinden değiştirmesine izin verin.

Aşağı yönlü iletişime gerçekten ihtiyacınız varsa bunu açıkça tasarlayın:

  • Tüm ağaç üzerinde bir wildcard değil, connectmq/factory1/line1/cmd/+ gibi tek ve dar bir komut topic'ini in olarak köprüleyin.
  • Seviye 3'teki bir gateway'in her komutu PLC'ye yazmadan önce tag'lerden ve değer aralıklarından oluşan bir izin listesine göre doğrulamasını sağlayın.
  • Her komutun kayıt altına alınmış bir onay üretmesi için bir response topic ve correlation data (bir MQTT 5 özelliği) zorunlu tutun.
  • Emniyet kilitlemelerinin sorumluluğunu PLC'de bırakın. Bir bulut komutu mantığı atlamamalı, yalnızca bir değişiklik talep etmelidir.

Yaygın MQTT DMZ Hataları

DMZ broker'ını anonim erişimle çalıştırmak. DMZ yine de paylaşımlı bir bölgedir. OT'ye bakan dinleyicide kullanıcı adı ve parola, ideal olarak da client sertifikaları zorunlu tutun.

# topic'ini iki yönde de köprülemek. Bu, özenle tasarlanmış bir DMZ'yi uygulama katmanında düz bir ağa dönüştürmenin en hızlı yoludur. Yalnızca ihtiyacınız olan alt ağaçları ve yalnızca ihtiyacınız olan yönde köprüleyin.

Oturumu unutmak. cleansession false ile bulut tarafı, kısa kopmalar boyunca köprünün aboneliklerini ve kuyruktaki QoS 1 mesajlarını korur. Temiz bir oturumla, yeniden bağlanma penceresi sırasında yayınlanan her şey kaybolabilir.

Broker tarafındaki sınırları göz ardı etmek. Bir kesintiden sonra gelen tarihsel veri patlaması client başına kotaları aşabilir. Yeniden oynatmayı gateway'de hız sınırına tabi tutun ve broker'ın döndürdüğü reason code'ları okuyun.

Yönetilen Bir Broker'ın Yeri

Hem Desen A'da hem de Desen B'de bulut uç noktası, aksi halde kendiniz kurmanız, dışarı açmanız, yamalamanız ve izlemeniz gereken bir bileşendir. Yönetilen bir MQTT broker kullanmak, internete açık bu yüzeyi veri merkezinizin dışına taşır. ConnectMQ, 8883'te TLS, çok kiracılı izolasyon, flood koruması ve tekrarlanan başarısız girişlerden sonra IP engelleme sağlar; böylece DMZ'nizin ihtiyaç duyduğu tek şey bir dışa doğru kuraldır. Broker'ı kendi bulut hesabında isteyen kuruluşlar için sizin adınıza yönetilen bir BYOC seçeneği de sunar.

DMZ'nin gateway'ler, Sparkplug B ve Unified Namespace ile nasıl bir araya geldiğine dair büyük resim için MQTT ile Endüstriyel IoT'ye kapsamlı rehberimize göz atın. Sahalarınız bir fabrika güvenlik duvarı yerine mobil ağlar üzerinden bağlanıyorsa hücresel ağ üzerinden MQTT yazısını da okuyun.

ConnectMQ ile Başlayın

app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun. Dakikalar içinde üretilmiş bir kullanıcı adı, parola ve client ID alırsınız; bir DMZ köprüsünü buluta yönlendirmek ve tesis topic'lerinizin canlı topic gezgininde belirmesini izlemek için ihtiyacınız olan her şey budur. Ücretsiz katmanın ötesine geçtiğinizde ücretli Serverless, Dedicated ve BYOC planları DMZ'yi yeniden tasarlamadan ölçeklenmenizi sağlar.

Sık Sorulan Sorular

MQTT, OT ağına gelen yönde güvenlik duvarı portları gerektirir mi?

Hayır. Her MQTT katılımcısı bir broker'a dışarı doğru bağlanan bir client'tır; dolayısıyla OT ağının yalnızca DMZ broker'ına veya bulut broker'ına giden bir kurala ihtiyacı vardır. İnternetteki hiçbir şey tesise doğru bağlantı başlatmaz.

Bir MQTT DMZ için 1883 mü yoksa 8883 portu mu kullanmalıyım?

Sahadan çıkan veya bir bölge sınırını geçen her bağlantı için TLS ile 8883 kullanın. Şifresiz 1883 yalnızca tek bir güvenilir segment içinde kabul edilebilir ve orada bile TLS önerilir.

DMZ içinde bir broker'a ihtiyacım var mı?

Her zaman değil. Seviye 3'teki bir gateway'den bulut broker'ına doğrudan dışa doğru bir bağlantı çoğu zaman kabul edilebilirdir. Politikanız herhangi bir oturumun DMZ'yi geçmesini yasaklıyorsa veya yerel tamponlama istiyorsanız DMZ köprü broker'ı daha iyi bir seçimdir.

Bulut uygulamaları DMZ üzerinden PLC'lere geri komut gönderebilir mi?

Gönderebilir, ancak yalnızca dar ve açıkça köprülenmiş bir komut topic'i ve her komutu PLC'ye yazmadan önce doğrulayan bir gateway üzerinden. Pek çok tesis yalnızca yukarı yönlü telemetriyle başlar ve aşağı yönlü iletişimi sonradan ekler.

İlgili yazılar

CODESYS MQTT Client: PLC Değişkenlerini Bir Broker'a Yayınlama

CODESYS IIoT MQTT Client kütüphanesini PLC değişkenlerini JSON olarak yayınlayacak şekilde yapılandırın, broker.connectmq.com üzerinde doğrulayın, ardından kimlik bilgileri ve TLS içeren özel bir broker'a geçin.

6 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.