MQTT portları, cihazlarınızın bir broker'a nasıl ulaştığını, trafiğin şifrelenip şifrelenmediğini ve bir kurumsal güvenlik duvarının trafiğe izin verip vermediğini belirler. Bu rehber pratikte karşılaşacağınız dört portu (1883, 8883, 8083 ve 8084), her birinin ne zaman kullanılacağını ve hepsinin canlı bir broker'a karşı birkaç dakika içinde nasıl test edileceğini açıklıyor.
Kısa Cevap: Dört Yaygın MQTT Portu
MQTT'nin kendisi güvenilir bir bayt akışı üzerinde çalışan bir uygulama protokolüdür. Bu akışın nasıl taşındığı portu belirler (neden her zaman TCP olduğundan emin değilseniz MQTT TCP mi UDP mi yazısını okuyun). IANA, MQTT için 1883'ü ve TLS üzerinden MQTT için 8883'ü kaydetmiştir. WebSocket portları bir kayıttan çok bir gelenektir ve broker'a göre değişir; ConnectMQ 8083 ve 8084'ü kullanır.
| Port | Taşıma | Şifreli | Tipik client'lar | Üretimde kullanılır mı? |
|---|---|---|---|---|
| 1883 | TCP üzerinden MQTT | Hayır | CLI araçları, laboratuvar cihazları, yerel ağlar | Yalnızca güvenilir, izole ağlarda |
| 8883 | TCP üzerinde TLS üzerinden MQTT | Evet | Cihazlar, gateway'ler, arka uç servisleri | Evet, varsayılan seçim |
| 8083 | WebSocket üzerinden MQTT (ws://) |
Hayır | Tarayıcı demoları, yerel testler | Nadiren |
| 8084 | Güvenli WebSocket üzerinden MQTT (wss://) |
Evet | Tarayıcılar, mobil web uygulamaları, kısıtlayıcı ağlar | Evet, web client'ları için |
ConnectMQ'da her iki WebSocket uç noktası da /mqtt yolunu kullanır; bu yüzden tam tarayıcı URL'si wss://broker.connectmq.com:8084/mqtt olur. TLS portları, neredeyse tüm işletim sistemleri ve tarayıcılarda varsayılan olarak güvenilen bir Let's Encrypt sertifikası sunar.
Port 1883: TCP Üzerinden Düz MQTT
Port 1883 ham MQTT paketlerini şifrelemeden taşır. Kullanıcı adları, parolalar ve payload'lar ağı açık metin olarak geçer ve yol boyunca trafiği yakalayabilen herkes tarafından okunabilir. Bu da 1883'ü şunlar için uygun kılar:
- Bir genel MQTT test broker'ı üzerinde öğrenme ve hızlı deneyler.
- İzole bir laboratuvar ağı içindeki yerel bir broker.
- Kontrolünüzdeki bir segmentte yakındaki bir gateway ile konuşan çok kısıtlı cihazlar.
İnternet üzerinden giden kimlik bilgileri için uygun değildir. 1883 üzerinde çalışan bir üretim filosu görürseniz bunu düzeltilmesi gereken bir bulgu olarak değerlendirin.
Port 8883: TLS Üzerinden MQTT
Port 8883 aynı MQTT paketlerini bir TLS oturumuna sarar. Client broker'ın sertifikasını güvenilir bir sertifika otoritesine karşı doğrular, anahtarları müzakere eder ve ancak bundan sonra kimlik bilgileriyle birlikte CONNECT paketini gönderir. Bu, cihazlar, gateway'ler ve arka uç servisleri için standart seçimdir.
8883'ün client'tan istedikleri:
- Bir TLS kütüphanesi (ESP32'de mbedTLS, çoğu Linux aracında OpenSSL, .NET ve Java'da platform yığını).
- Broker sertifikasının doğrulanabilmesi için güvenilir bir CA paketi. Üretimde doğrulamayı asla devre dışı bırakmayın.
- Makul derecede doğru bir saat, çünkü sertifika geçerliliği zamana bağlıdır. Gerçek zamanlı saati olmayan cihazlar bağlanmadan önce NTP ile senkronize olmalıdır.
- Broker ana bilgisayar adına ayarlanmış Server Name Indication (SNI). Çoğu kütüphane ana bilgisayar adıyla bağlandığınızda bunu otomatik yapar.
Ek maliyet, bağlanırken bir el sıkışma ve biraz daha büyük paketlerdir. MQTT uzun ömürlü tek bir bağlantı tuttuğu için bu el sıkışma nadiren gerçekleşir; dolayısıyla kararlı durumdaki ek yük küçüktür. MQTT güvenliği en iyi uygulamaları rehberimiz sıkılaştırma listesinin geri kalanını ele alır.
Port 8083 ve 8084: WebSocket Üzerinden MQTT
Tarayıcılar ham TCP soketleri açamaz; bu yüzden web uygulamaları MQTT'yi WebSocket çerçeveleri içinde tüneller. Client önce bir yola (burada /mqtt) HTTP upgrade isteği gönderir ve ardından yükseltilmiş bağlantı üzerinden ikili MQTT paketleri alışverişi yapar.
- 8083 (
ws://) şifresizdir. Modern tarayıcılar HTTPS üzerinden sunulan sayfalarda bunu engeller (karışık içerik); bu yüzden çoğunlukla yerel testler için kullanışlıdır. - 8084 (
wss://) TLS üzerinden WebSocket'tir ve üretimdeki bir web dashboard'u için tek gerçekçi seçenektir.
WebSocket'in ikinci bir faydası daha vardır: Birçok proxy ve güvenlik duvarına sıradan HTTPS trafiği gibi görünür. Bir fabrika veya otel ağı 8883'ü engellediğinde, 8084 üzerindeki wss:// bazen ham TLS'in geçemediği yerden geçebilir. Tarayıcı kodu ve proxy uyarıları için WebSocket üzerinden MQTT yazısına bakın.
Güvenlik Duvarı Açısından Etkileri
MQTT client'ları bağlantıyı her zaman broker'a doğru dışarıya doğru başlatır ve broker veriyi aynı bağlantı üzerinden geri iter. Bu, güvenlik duvarı kurallarını oldukça basitleştirir:
- Cihaz ağlarından broker ana bilgisayar adına 8883 (ve web client'larınız varsa 8084) üzerinden giden TCP'ye izin verin.
- Cihaz tarafında gelen kurala gerek yoktur. Cihazlar hiçbir MQTT portunu dinlemez.
- Uzun ömürlü bağlantılara izin verin. Bazı güvenlik duvarları ve NAT gateway'leri boşta kalan TCP oturumlarını birkaç dakika sonra sessizce düşürür. MQTT keep-alive aralığını bu zaman aşımından kısa tutun (60 saniye yaygın bir seçimdir); böylece PINGREQ paketleri eşlemeyi canlı tutar.
- MQTT için TLS denetiminden (interception) kaçının. Sertifikaları yeniden imzalayan ara cihazlar, cihazlardaki sertifika doğrulamasını bozar. Broker ana bilgisayar adını denetimden muaf tutun.
- Güvenlik duvarınız destekliyorsa IP izin listeleri yerine ana bilgisayar adlarını tercih edin, çünkü bulut uç noktalarının adresleri değişebilir.
Yalnızca bir port açtırabiliyorsanız 8883'ü isteyin. O bile mümkün değilse 8084'ü isteyin ve client'larınızı güvenli WebSocket üzerinden çalıştırın.
Her MQTT Portunu Beş Dakikada Test Edin
Aşağıdaki komutlar broker.connectmq.com adresindeki anonim genel uç noktayı kullanır. Benzersiz bir client ID ve topic öneki kullanın ve genel topic'lerin herkese görünür olduğunu unutmayın.
TCP erişilebilirliğini kontrol edin
# Linux / macOS
nc -vz broker.connectmq.com 1883
nc -vz broker.connectmq.com 8883
nc -vz broker.connectmq.com 8084
Windows PowerShell'de Test-NetConnection broker.connectmq.com -Port 8883 kullanın ve TcpTestSucceeded : True satırını arayın.
8883'teki TLS sertifikasını inceleyin
openssl s_client -connect broker.connectmq.com:8883 \
-servername broker.connectmq.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
Let's Encrypt yayıncısını ve geçerli tarihleri görmelisiniz. Yayıncı bunun yerine şirketinizin proxy'si ise yolda TLS denetimi var demektir.
1883 ve 8883 üzerinde yayınlayın ve abone olun
# Terminal A: TLS üzerinden abone olun (bir CA yolu verildiğinde mosquitto TLS'i etkinleştirir)
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-i ports-sub-91c2 -t "connectmq/demo/91c2/#" -v
# Terminal B: düz TCP üzerinden yayınlayın
mosquitto_pub -h broker.connectmq.com -p 1883 -i ports-pub-91c2 \
-t "connectmq/demo/91c2/hello" -m "sent on 1883, received on 8883"
Mesaj bir porttan diğerine geçer; bu da portların aynı broker'a açılan giriş noktalarından ibaret olduğunu gösterir.
Node.js ile 8084 üzerinde güvenli WebSocket'i test edin
// npm install mqtt
const mqtt = require("mqtt");
const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
clientId: "ports-wss-91c2",
protocolVersion: 5,
});
client.on("connect", () => {
console.log("Connected over wss on 8084");
client.subscribe("connectmq/demo/91c2/#", () => {
client.publish("connectmq/demo/91c2/wss", "hello from WebSocket");
});
});
client.on("message", (topic, payload) => {
console.log(topic, payload.toString());
client.end();
});
client.on("error", (err) => console.error("Error:", err.message));
Node'dan ham TLS için URL'yi mqtts://broker.connectmq.com:8883 ile değiştirin.
Port Sorunlarını Giderme
| Belirti | Olası neden | Çözüm |
|---|---|---|
| 8883'te bağlantı zaman aşımı, 1883 çalışıyor | Güvenlik duvarı yalnızca yaygın portlara izin veriyor | Giden 8883 isteyin veya 8084 kullanın |
| TLS el sıkışması başarısız, sertifika bilinmiyor | Eksik CA paketi veya TLS denetimi | CA sertifikalarını kurun, broker ana bilgisayarını denetimden muaf tutun |
| Sertifika henüz geçerli değil | Cihaz saati yanlış | Bağlanmadan önce NTP ile senkronize edin |
| WebSocket 404 döndürüyor | Yanlış yol | /mqtt kullanın |
Tarayıcı ws:// bağlantısını reddediyor |
HTTPS sayfasında karışık içerik | 8084 üzerinde wss:// kullanın |
| Birkaç dakikada bir bağlantı kopuyor | NAT boşta kalma zaman aşımı | Keep-alive'ı zaman aşımının altına indirin |
Test Portlarından Üretime Geçiş
Genel broker'da anonim bağlanırsınız; özel bir broker'da kimlik bilgileri eklersiniz. ConnectMQ portalında bir broker oluşturduğunuzda bir kullanıcı adı, parola ve bu kimlik bilgilerine bağlı bir client ID alırsınız; aynı dört port geçerlidir. Tipik bir üretim kurulumunda cihazlar ve gateway'ler için 8883, web dashboard'u için 8084 kullanılır; 1883 ve 8083 yerel hata ayıklamaya bırakılır. ConnectMQ bir barındırılan MQTT broker olduğundan sertifikalar sizin için yenilenir ve bakımını yapmanız gereken bir listener yapılandırması yoktur. Bulut MQTT broker rehberi barındırma seçeneklerini daha ayrıntılı karşılaştırır, yeni başlayanlar için MQTT eğitimi ise ilk bağlantınızı uçtan uca anlatır.
ConnectMQ ile Başlayın
app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun ve portalın oluşturduğu kimlik bilgileriyle 8883 veya 8084 üzerinden bağlanın. ConnectMQ'nun tarayıcı içi client'ı, herhangi bir firmware'e dokunmadan önce bağlantıyı doğrulamanızı sağlar.
Sık Sorulan Sorular
Varsayılan MQTT portu nedir?
Varsayılan MQTT portu şifresiz TCP için 1883, TLS üzerinden MQTT için 8883'tür. Her ikisi de IANA'ya kayıtlıdır.
Üretimde hangi MQTT portunu kullanmalıyım?
Cihazlar ve servisler için 8883'ü, tarayıcılar için 8084'ü (güvenli WebSocket) kullanın. Kimlik bilgileri açık metin olarak taşındığı için internet üzerinden 1883'ten kaçının.
MQTT'yi 443 portunda çalıştırabilir miyim?
Bazı broker'lar katı güvenlik duvarlarını aşmak için 443 üzerinde WebSocket veya TLS üzerinden MQTT sunar. broker.connectmq.com 8883 ve 8084'ü kullanır; bu yüzden ağ ekibinizden bu portlara giden trafiğe izin vermesini isteyin.
TCP çalışırken WebSocket bağlantım neden başarısız oluyor?
En yaygın nedenler eksik /mqtt yolu, bir HTTPS sayfasından ws:// kullanmak ya da WebSocket upgrade'lerini desteklemeyen bir proxy'dir.



