Takip et

Mosquitto MQTT Mesajlaşma Aracısının Ubuntu 18.04 Üzerine Kurulumu ve Güvenliğinin Sağlanması

Mosquitto MQTT Mesajlaşma Aracısının Ubuntu 18.04 Üzerine Kurulumu ve Güvenliğinin Sağlanması Giriş: Nesnelerin İnterneti (IoT) ve MQTT N

Mosquitto MQTT Mesajlaşma Aracısının Ubuntu 18.04 Üzerine Kurulumu ve Güvenliğinin Sağlanması

Giriş: Nesnelerin İnterneti (IoT) ve MQTT

Nesnelerin İnterneti (IoT) çağında, cihazlar arasındaki etkili ve güvenilir iletişim hayati önem taşımaktadır. Sensörlerden akıllı ev aletlerine, endüstriyel makinelere kadar milyarlarca cihazın birbirleriyle ve merkezi sistemlerle sorunsuz bir şekilde veri alışverişi yapması gerekmektedir. Bu iletişim ihtiyacını karşılamak için geliştirilen protokollerden biri de MQTT (Message Queuing Telemetry Transport)’dir. MQTT, hafif, yayıncı/abone (publish/subscribe) tabanlı bir mesajlaşma protokolüdür ve özellikle düşük bant genişliğine sahip, yüksek gecikmeli veya güvenilmez ağlarda çalışan kısıtlı cihazlar için tasarlanmıştır.

MQTT mimarisinin merkezinde bir “broker” bulunur. Yayıncılar (publishers) mesajları bu brokera gönderir, aboneler (subscribers) ise ilgilendikleri konulara (topics) abone olarak brokerdan mesajları alır. Bu sayede yayıncılar ve aboneler birbirinden bağımsız çalışabilir, doğrudan birbirleriyle iletişim kurma ihtiyacı duymazlar.

Mosquitto, açık kaynaklı, hafif ve popüler bir MQTT brokerıdır. Eclipse Vakfı tarafından geliştirilen Mosquitto, MQTT protokolünün tüm ana özelliklerini (QoS seviyeleri, kalıcı oturumlar vb.) destekler ve hem küçük ölçekli projelerde hem de büyük, endüstriyel uygulamalarda yaygın olarak kullanılır. Düşük kaynak tüketimi, yüksek performansı ve geniş güvenlik seçenekleri sayesinde IoT ekosistemlerinde tercih edilen çözümlerden biridir.

Bu makalede, Mosquitto MQTT brokerını Ubuntu 18.04 sunucusu üzerine nasıl kuracağınızı ve en önemlisi, sisteminizi dış tehditlere karşı korumak için kapsamlı güvenlik önlemlerini nasıl uygulayacağınızı adım adım inceleyeceğiz. Ubuntu 18.04, sunucu ortamlarında yaygın olarak kullanılan kararlı ve güvenilir bir işletim sistemi olduğundan, Mosquitto’nun bu platformda güvenli bir şekilde yapılandırılması, IoT projelerinizin temelini sağlam bir şekilde atmanızı sağlayacaktır.

Ön Koşullar

Mosquitto kurulumuna başlamadan önce, aşağıdaki ön koşulların yerine getirildiğinden emin olun:

* Ubuntu 18.04 Sunucusu: İnternet erişimi olan, temiz bir Ubuntu 18.04 sunucusu (fiziksel sunucu, sanal makine veya bulut VPS).
* Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için sudo yetkilerine sahip bir kullanıcı hesabı.
* Temel Linux Bilgisi: Komut satırı (terminal) kullanımı hakkında temel bilgi.

Mosquitto Kurulumu

Mosquitto’yu Ubuntu 18.04 üzerine kurmak oldukça basit bir işlemdir. En güncel ve kararlı sürümü elde etmek için Mosquitto’nun kendi PPA (Personal Package Archive) deposunu kullanmanızı öneririz.

Sistem Güncellemesi

Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin paket listesini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, olası bağımlılık sorunlarını önler ve en son güvenlik yamalarına sahip olmanızı sağlar.

sudo apt update
sudo apt upgrade -y

Mosquitto PPA Deposu Ekleme

Ubuntu’nun varsayılan depoları genellikle Mosquitto’nun daha eski bir sürümünü içerir. En yeni özellikleri ve güvenlik düzeltmelerini içeren en güncel kararlı sürümü almak için Mosquitto geliştiricilerinin PPA deposunu ekleyeceğiz.

Öncelikle, PPA depolarını yönetmek için gerekli olan software-properties-common paketini kurun:

sudo apt install -y software-properties-common

Şimdi Mosquitto PPA deposunu ekleyin ve paket listenizi tekrar güncelleyin:

sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt update

Mosquitto ve İstemcilerini Kurma

Depo eklendikten ve güncellendikten sonra, Mosquitto brokerını ve Mosquitto istemci araçlarını (test amaçlı kullanacağımız mosquitto_pub ve mosquitto_sub) kurabilirsiniz:

sudo apt install -y mosquitto mosquitto-clients

Mosquitto Servis Durumunu Kontrol Etme

Kurulum tamamlandığında, Mosquitto servisi otomatik olarak başlatılmalıdır. Servisin durumunu kontrol etmek için aşağıdaki komutu kullanın:

sudo systemctl status mosquitto

Çıktıda active (running) ibaresini görmelisiniz. Eğer servis çalışmıyorsa, sudo systemctl start mosquitto komutuyla başlatabilir ve sudo systemctl enable mosquitto komutuyla sistem başlangıcında otomatik olarak başlamasını sağlayabilirsiniz.

Güvenlik Duvarı Ayarları (UFW)

Sunucunuzun güvenliği için bir güvenlik duvarı kullanmak esastır. Ubuntu’da yaygın olarak kullanılan UFW (Uncomplicated Firewall) ile Mosquitto’nun kullandığı portlara izin vermeniz gerekmektedir.

* 1883/tcp: Standart, şifrelenmemiş MQTT portu.
* 8883/tcp: SSL/TLS üzerinden güvenli MQTT portu.

Eğer UFW etkin değilse, öncelikle etkinleştirin:

sudo ufw enable

Not: Bu komut SSH bağlantınızı kesebilir. Eğer uzaktan bağlanıyorsanız, önce SSH portuna (varsayılan 22) izin vermeniz gerekebilir: sudo ufw allow ssh veya sudo ufw allow 22/tcp.

Şimdi Mosquitto portlarına izin verin:

sudo ufw allow 1883/tcp
sudo ufw allow 8883/tcp

Güvenlik duvarı kurallarınızı kontrol edin:

sudo ufw status

Temel Mosquitto Yapılandırması

Mosquitto’nun ana yapılandırma dosyası /etc/mosquitto/mosquitto.conf konumunda bulunur. Güvenlik ayarlarını yapmadan önce, bu dosyanın bir yedeğini almanız her zaman iyi bir fikirdir.

sudo cp /etc/mosquitto/mosquitto.conf /etc/mosquitto/mosquitto.conf.bak

Varsayılan mosquitto.conf dosyası genellikle boş veya yorum satırlarıyla doludur. Mosquitto, yapılandırma dosyasında belirtilmeyen tüm ayarlar için dahili varsayılan değerleri kullanır. Temel olarak, Mosquitto’nun varsayılan olarak anonim bağlantılara izin verdiğini bilmek önemlidir. Bu, güvenlik açısından büyük bir risktir ve ilk yapmamız gereken değişikliklerden biri olacaktır.

Bir metin düzenleyici (örneğin nano) ile yapılandırma dosyasını açın:

sudo nano /etc/mosquitto/mosquitto.conf

Dosyanın içine aşağıdaki satırı ekleyerek anonim bağlantıları devre dışı bırakın:

allow_anonymous false

Bu ayar, Mosquitto’ya bağlanmaya çalışan her istemcinin bir kullanıcı adı ve şifre sağlamasını zorunlu kılar. Bu, temel bir güvenlik katmanı oluşturur.

Değişiklikleri kaydedin (nano için Ctrl+X, Y, Enter) ve Mosquitto servisini yeniden başlatın:

sudo systemctl restart mosquitto

Mosquitto Güvenliğinin Sağlanması

Mosquitto’nun temel kurulumu tamamlandıktan sonra, en kritik aşama olan güvenlik yapılandırmasına geçebiliriz. Bir IoT brokerı, genellikle hassas verileri işlediği ve birçok farklı cihazla iletişim kurduğu için dış tehditlere karşı çok iyi korunmalıdır.

1. Kullanıcı Adı ve Şifre ile Kimlik Doğrulama

Daha önce allow_anonymous false ayarını yaparak anonim bağlantıları engelledik. Şimdi, yetkili kullanıcılar için kullanıcı adı ve şifre tanımlamamız gerekiyor. Mosquitto, şifreleri güvenli bir şekilde saklamak için özel bir araç olan mosquitto_passwd‘i kullanır.

İlk kullanıcıyı oluştururken -c (create) bayrağını kullanın. Bu, yeni bir şifre dosyası oluşturur.

sudo mosquitto_passwd -c /etc/mosquitto/passwd 

Örnek:

sudo mosquitto_passwd -c /etc/mosquitto/passwd admin_user

Sizden bu kullanıcı için bir şifre girmeniz ve onaylamanız istenecektir.

Daha sonraki kullanıcıları eklerken -c bayrağını kullanmayın, aksi takdirde mevcut dosyanın üzerine yazılır:

sudo mosquitto_passwd /etc/mosquitto/passwd 

Örnek:

sudo mosquitto_passwd /etc/mosquitto/passwd sensor_user

Şifre dosyasının izinlerini Mosquitto servisi için doğru şekilde ayarlamak önemlidir:

sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
sudo chmod 600 /etc/mosquitto/passwd

Bu, sadece mosquitto kullanıcısının dosyayı okuyabilmesini sağlar.

Şimdi Mosquitto yapılandırma dosyasını (/etc/mosquitto/mosquitto.conf) düzenleyerek bu şifre dosyasını kullanmasını söyleyin:

sudo nano /etc/mosquitto/mosquitto.conf

Dosyaya aşağıdaki satırı ekleyin (veya mevcutsa güncelleyin):

password_file /etc/mosquitto/passwd
allow_anonymous false

Değişiklikleri kaydedin ve Mosquitto servisini yeniden başlatın:

sudo systemctl restart mosquitto

Test:
Şimdi mosquitto_pub veya mosquitto_sub kullanarak kullanıcı adı ve şifre ile bağlantı kurmayı deneyin:

# Abone olma
mosquitto_sub -h localhost -t "test/topic" -u admin_user -P 

Yayın yapma

mosquitto_pub -h localhost -t "test/topic" -m "Merhaba, güvenli MQTT!" -u admin_user -P

Eğer kullanıcı adı ve şifre yanlışsa veya belirtilmezse, bağlantı başarısız olacaktır.

2. ACL (Erişim Kontrol Listeleri) Kullanımı

Kullanıcı adı ve şifre kimlik doğrulaması, Mosquitto’ya kimlerin bağlanabileceğini kontrol eder, ancak hangi kullanıcıların hangi konulara (topics) yayın yapabileceğini veya abone olabileceğini kontrol etmez. Bu noktada ACL’ler (Access Control Lists – Erişim Kontrol Listeleri) devreye girer. ACL’ler, belirli kullanıcılara belirli konular üzerinde okuma, yazma veya her ikisini birden yapma yetkisi vermenizi sağlar.

Öncelikle, ACL dosyasını oluşturun:

sudo nano /etc/mosquitto/aclfile.conf

Bu dosyanın içine aşağıdaki gibi kurallar ekleyebilirsiniz:

# Varsayılan olarak tüm kullanıcılara erişimi kısıtla

Bu, herhangi bir "user" kuralıyla eşleşmeyen tüm kullanıcıların varsayılan olarak erişimini engeller.

Eğer sadece belirli kullanıcılara belirli yetkiler vermek istiyorsanız bu satırı ekleyin.

Veya daha spesifik kurallar tanımlayabilirsiniz.

Örneğin, tüm kullanıcılara her şeye erişim vermek için:

topic readwrite #

'admin_user' kullanıcısına tüm konular üzerinde okuma ve yazma yetkisi ver

user admin_user topic readwrite #

'sensor_user' kullanıcısına sadece 'sensor/data' konusuna yazma (veri gönderme) yetkisi ver

user sensor_user topic write sensor/data

'monitor_user' kullanıcısına 'sensor/data' ve 'alerts/#' konularına okuma yetkisi ver

user monitor_user topic read sensor/data topic read alerts/#

$SYS konularına erişimi kısıtla (Mosquitto'nun dahili istatistikleri)

Genellikle sadece admin kullanıcısının erişmesi önerilir.

user admin_user topic read $SYS/#

ACL dosyasını kaydedin ve izinlerini ayarlayın:

sudo chown mosquitto:mosquitto /etc/mosquitto/aclfile.conf
sudo chmod 600 /etc/mosquitto/aclfile.conf

Şimdi Mosquitto yapılandırma dosyasını (/etc/mosquitto/mosquitto.conf) düzenleyerek bu ACL dosyasını kullanmasını söyleyin:

sudo nano /etc/mosquitto/mosquitto.conf

Dosyaya aşağıdaki satırı ekleyin:

password_file /etc/mosquitto/passwd
allow_anonymous false
acl_file /etc/mosquitto/aclfile.conf

Değişiklikleri kaydedin ve Mosquitto servisini yeniden başlatın:

sudo systemctl restart mosquitto

Test:
ACL kurallarını test etmek için farklı kullanıcılarla farklı konulara yayın yapmaya veya abone olmaya çalışın. Örneğin, sensor_user ile sensor/data dışındaki bir konuya yayın yapmaya çalışırsanız erişim reddedilmelidir.

# sensor_user ile izin verilen konuya yayın
mosquitto_pub -h localhost -t "sensor/data" -m "Temp: 25C" -u sensor_user -P 

sensor_user ile izin verilmeyen konuya yayın (başarısız olmalı)

mosquitto_pub -h localhost -t "other/data" -m "Unauthorized" -u sensor_user -P

monitor_user ile izin verilen konuya abone olma

mosquitto_sub -h localhost -t "alerts/#" -u monitor_user -P

3. SSL/TLS ile Güvenli İletişim

Kullanıcı adı/şifre ve ACL’ler, kimlik doğrulama ve yetkilendirme sağlar, ancak ağ üzerinden gönderilen mesajları şifrelemezler. Bu, özellikle hassas verilerle uğraşırken veya güvensiz ağlarda (örneğin internet) iletişim kurarken büyük bir güvenlik açığıdır. SSL/TLS (Secure Sockets Layer/Transport Layer Security) kullanarak Mosquitto ile istemciler arasındaki tüm iletişimi şifreleyebilirsiniz.

SSL/TLS uygulamak için sertifikalara ihtiyacımız var. Üretim ortamlarında Let’s Encrypt gibi güvenilir bir sertifika sağlayıcısından sertifika almanız önerilir. Ancak bu makalede, test amaçlı olarak kendi imzalı (self-signed) sertifikalarımızı oluşturacağız.

Öncelikle sertifikaları saklamak için bir dizin oluşturalım:

sudo mkdir /etc/mosquitto/certs
sudo chown mosquitto:mosquitto /etc/mosquitto/certs

Kök Sertifika Yetkilisi (CA) Oluşturma:
Kendi sertifikalarımızı imzalamak için bir Kök Sertifika Yetkilisi (CA) oluşturacağız.

cd /etc/mosquitto/certs
sudo openssl req -new -x509 -days 3650 -extensions v3_ca -keyout ca.key -out ca.crt

Bu komut sizden bazı bilgiler isteyecektir (ülke, şehir, kuruluş adı vb.). “Common Name” (Ortak Ad) alanına herhangi bir şey girebilirsiniz, örneğin “My Mosquitto CA”. days 3650 sertifikanın 10 yıl geçerli olmasını sağlar.

Sunucu Anahtarı ve Sertifika İsteği Oluşturma:
Şimdi Mosquitto brokerı için bir özel anahtar (private key) ve bir sertifika imzalama isteği (CSR) oluşturacağız.

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -out server.csr -key server.key

Burada Common Name (Ortak Ad) olarak Mosquitto sunucunuzun IP adresini veya alan adını (örneğin mqtt.example.com veya 192.168.1.100) girmek çok önemlidir. Aksi takdirde istemciler sertifikayı doğrularken hata alabilir.

Sunucu Sertifikasını CA ile İmzalama:
Oluşturduğumuz CSR’yi, az önce oluşturduğumuz CA ile imzalayarak sunucu sertifikasını oluşturacağız.

sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650

İzinleri Ayarlama:
Sertifika dosyalarının doğru izinlere sahip olması kritik öneme sahiptir. Özel anahtar dosyaları (key files) sadece Mosquitto kullanıcısı tarafından okunabilir olmalıdır.

sudo chown mosquitto:mosquitto ca.crt server.crt server.key
sudo chmod 400 server.key
sudo chmod 444 ca.crt server.crt

Mosquitto Yapılandırması (SSL/TLS):
Şimdi Mosquitto’ya bu sertifikaları kullanmasını söyleyeceğiz. mosquitto.conf dosyasını tekrar düzenleyin:

sudo nano /etc/mosquitto/mosquitto.conf

Dosyanın sonuna aşağıdaki satırları ekleyin:

# SSL/TLS için dinleyici (listener)
listener 8883
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

require_certificate false # İstemci sertifikası kimlik doğrulaması için (şimdilik false bırakalım)

listener 8883 satırı, Mosquitto’nun 8883 numaralı portta SSL/TLS üzerinden bağlantıları dinlemesini sağlar. protocol mqtt ise bu dinleyicinin MQTT protokolünü kullanacağını belirtir.

Değişiklikleri kaydedin ve Mosquitto servisini yeniden başlatın:

sudo systemctl restart mosquitto

Test:
Şimdi Mosquitto’ya SSL/TLS üzerinden bağlanmayı deneyin. İstemcilerin CA sertifikasını bilmesi gerekecektir. CA sertifikasını (ca.crt) istemcinin bulunduğu makineye kopyalamanız gerekecektir.

# Abone olma (SSL/TLS ile)
mosquitto_sub -h  -p 8883 --tls-version tlsv1.2 --cafile /path/to/client/ca.crt -t "secure/topic" -u admin_user -P 

Yayın yapma (SSL/TLS ile)

mosquitto_pub -h -p 8883 --tls-version tlsv1.2 --cafile /path/to/client/ca.crt -t "secure/topic" -m "Güvenli mesaj!" -u admin_user -P

--cafile parametresi, istemcinin sunucunun sertifikasını doğrulamak için kullanacağı CA sertifikasının yolunu belirtir. Eğer sunucu IP adresi veya alan adı sertifikadaki Common Name ile eşleşmezse, bağlantı başarısız olabilir.

4. İstemci Sertifikası Kimlik Doğrulaması (Opsiyonel ama Yüksek Güvenlik)

SSL/TLS ile sunucu, istemciye kimliğini kanıtlar. İstemci sertifikası kimlik doğrulaması (mutual TLS veya two-way TLS), istemcinin de sunucuya kimliğini kanıtlamasını sağlar. Bu, en yüksek güvenlik seviyelerinden biridir ve sadece belirli sertifikalara sahip istemcilerin bağlanmasına izin verir.

Bu adımı uygulamak için, her istemci için ayrı bir anahtar ve sertifika oluşturmanız ve bunları CA’nızla imzalamanız gerekir.

İstemci Anahtarı ve Sertifika İsteği Oluşturma:

cd /etc/mosquitto/certs
sudo openssl genrsa -out client.key 2048
sudo openssl req -new -out client.csr -key client.key

Bu sefer Common Name olarak istemcinin adını girebilirsiniz, örneğin “my_sensor_client”.

İstemci Sertifikasını CA ile İmzalama:

sudo openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650

İzinleri Ayarlama:

sudo chown mosquitto:mosquitto client.key client.crt
sudo chmod 400 client.key
sudo chmod 444 client.crt

Mosquitto Yapılandırması (İstemci Sertifikası Doğrulaması):
mosquitto.conf dosyasında listener 8883 bloğunun altına require_certificate true satırını ekleyin:

sudo nano /etc/mosquitto/mosquitto.conf
listener 8883
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
require_certificate true # Bu satırı ekleyin

Değişiklikleri kaydedin ve Mosquitto servisini yeniden başlatın:

sudo systemctl restart mosquitto

Test:
Şimdi istemcinin kendi sertifikası ve anahtarı olmadan bağlanmaya çalışırsanız bağlantı reddedilecektir. Bağlantı kurmak için istemcinin CA sertifikasına ek olarak kendi istemci sertifikasına ve özel anahtarına ihtiyacı olacaktır. Bu dosyaları (ca.crt, client.crt, client.key) istemcinin bulunduğu makineye kopyalamanız gerekir.

# Abone olma (İstemci Sertifikası ile)
mosquitto_sub -h  -p 8883 --tls-version tlsv1.2 --cafile /path/to/client/ca.crt --cert /path/to/client/client.crt --key /path/to/client/client.key -t "secure/topic" -u admin_user -P 

Bu, Mosquitto güvenlik seviyesini önemli ölçüde artırır, ancak her istemci için sertifika yönetimi gerektirdiğinden daha karmaşık olabilir.

5. Güvenli Dinleme Portları

Varsayılan olarak Mosquitto, 1883 (şifrelenmemiş) ve 8883 (SSL/TLS şifreli) portlarını dinler. Eğer tüm istemcilerinizin SSL/TLS kullanabilme yeteneği varsa, şifrelenmemiş 1883 portunu tamamen kapatmayı düşünebilirsiniz. Bu, broker’ın güvenliğini artırır.

Eğer 1883 portunu kapatmak istemiyorsanız ancak yine de güvenliğini sağlamak istiyorsanız, bu dinleyici için de ayrı bir kimlik doğrulama ve yetkilendirme yapılandırması yapabilirsiniz.

mosquitto.conf dosyasında 1883 dinleyicisi için aşağıdaki gibi ayrı bir blok tanımlayabilirsiniz:

sudo nano /etc/mosquitto/mosquitto.conf
# Şifrelenmemiş dinleyici (isteğe bağlı)
listener 1883
protocol mqtt
allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/aclfile.conf

SSL/TLS dinleyici

listener 8883 protocol mqtt cafile /etc/mosquitto/certs/ca.crt certfile /etc/mosquitto/certs/server.crt keyfile /etc/mosquitto/certs/server.key require_certificate false # veya true

Eğer 1883 portunu tamamen kapatmak isterseniz, listener 1883 ile başlayan bloğu tamamen silebilir veya yorum satırı haline getirebilirsiniz. Unutmayın, bu durumda UFW’den de 1883 portuna verilen izni kaldırmanız gerekir: sudo ufw delete allow 1883/tcp.

6. Diğer Güvenlik Önlemleri

Yukarıdaki temel önlemlerin yanı sıra, Mosquitto kurulumunuzun genel güvenliğini artırmak için ek adımlar atabilirsiniz:

* bind_address Kullanımı: Mosquitto’nun sadece belirli bir ağ arayüzündeki bağlantıları dinlemesini sağlayabilirsiniz. Örneğin, sadece yerel ağdan veya belirli bir IP adresinden gelen bağlantılara izin vermek için:

bind_address 192.168.1.100

Bu, broker’ın dışarıdan erişilebilir olmasını engellerken, dahili ağınızdaki cihazların iletişim kurmasına izin verir. Eğer her yerden erişilebilir olmasını istiyorsanız, bind_address 0.0.0.0 kullanabilirsiniz, ancak bu durumda güvenlik duvarı kurallarınız daha da kritik hale gelir.

* Güncel Tutma: İşletim sisteminizi ve Mosquitto paketini düzenli olarak güncelleyin. Güvenlik açıkları sürekli olarak keşfedilir ve yamalar yayınlanır.

sudo apt update && sudo apt upgrade -y

* Loglama: Mosquitto’nun olayları ve hataları kaydetmesini sağlayın. Bu, güvenlik olaylarını izlemenize ve sorunları gidermenize yardımcı olur.

log_dest file /var/log/mosquitto/mosquitto.log
    log_type error
    log_type warning
    log_type notice
    log_type information
    # log_type debug # Daha detaylı hata ayıklama için

Log dosyasının var olduğundan ve Mosquitto kullanıcısının yazma izinlerine sahip olduğundan emin olun:

sudo mkdir -p /var/log/mosquitto
    sudo touch /var/log/mosquitto/mosquitto.log
    sudo chown mosquitto:mosquitto /var/log/mosquitto/mosquitto.log

Logları düzenli olarak gözden geçirin veya bir log yönetim sistemine (ELK Stack, Graylog vb.) entegre edin.

* Sınırlı Kullanıcı ile Çalışma: Mosquitto varsayılan olarak mosquitto adlı ayrıcalıksız bir kullanıcı altında çalışır. Bu, eğer broker bir şekilde tehlikeye atılırsa, saldırganın sistem üzerinde tam kontrole sahip olmasını engellediği için iyi bir güvenlik uygulamasıdır. Bu ayarı değiştirmeyin.

* SSH ile Güvenli Yönetim: Mosquitto sunucunuza her zaman SSH üzerinden bağlanın. Mümkünse SSH anahtar tabanlı kimlik doğrulamasını kullanın ve şifre kimlik doğrulamasını devre dışı bırakın.

* Fiziksel Güvenlik: Sunucunun fiziksel güvenliğini sağlayın. Yetkisiz erişim, tüm yazılım güvenlik önlemlerini geçersiz kılabilir.

Mosquitto’yu Test Etme

Tüm bu yapılandırmaları yaptıktan sonra, Mosquitto’nun beklediğiniz gibi çalıştığından ve güvenlik önlemlerinin etkin olduğundan emin olmak için kapsamlı testler yapmanız önemlidir.

* Anonim Bağlantı Testi: Kullanıcı adı ve şifre belirtmeden bağlanmaya çalışın. Başarısız olmalıdır.

mosquitto_sub -h  -t "test/topic"

* Yanlış Kimlik Bilgileriyle Bağlantı Testi: Yanlış kullanıcı adı veya şifre ile bağlanmaya çalışın. Başarısız olmalıdır.

mosquitto_sub -h  -t "test/topic" -u wrong_user -P wrong_pass

* ACL Testi: ACL kurallarınıza göre farklı kullanıcılarla farklı konulara yayın yapmayı/abone olmayı deneyin. İzin verilenler çalışmalı, izin verilmeyenler reddedilmelidir.

* SSL/TLS Bağlantı Testi: CA sertifikası ile SSL/TLS portu (8883) üzerinden bağlanmayı deneyin.

mosquitto_sub -h  -p 8883 --tls-version tlsv1.2 --cafile /path/to/client/ca.crt -t "secure/topic" -u admin_user -P 

* İstemci Sertifikası Testi (eğer etkinse): İstemci sertifikası ve anahtarı ile bağlanmayı deneyin. Hem doğru kimlik bilgileriyle hem de yanlış veya eksik sertifika bilgileriyle test edin.

Sorun Giderme İpuçları

Kurulum veya yapılandırma sırasında sorunlarla karşılaşmanız durumunda aşağıdaki adımları izleyebilirsiniz:

* Mosquitto Loglarını Kontrol Edin: En önemli sorun giderme aracıdır.

sudo tail -f /var/log/mosquitto/mosquitto.log
    # Veya
    sudo journalctl -u mosquitto -f

Bu loglar, bağlantı hataları, kimlik doğrulama sorunları veya sertifika hataları hakkında değerli bilgiler sağlar.

* Yapılandırma Dosyasını Doğrulayın: Mosquitto yapılandırma dosyasının sözdizimini kontrol etmek için Mosquitto’yu test modunda çalıştırabilirsiniz:

mosquitto -c /etc/mosquitto/mosquitto.conf -v

Bu, herhangi bir yapılandırma hatasını terminale yazdıracaktır.

* Güvenlik Duvarı Kurallarını Kontrol Edin: sudo ufw status komutuyla Mosquitto portlarına (1883, 8883) izin verildiğinden emin olun.

* Sertifika ve Anahtar İzinlerini Kontrol Edin: Sertifika ve özel anahtar dosyalarının doğru izinlere ve sahipliğe sahip olduğundan emin olun (sudo ls -l /etc/mosquitto/certs). Özel anahtarların sadece Mosquitto kullanıcısı tarafından okunabilir olması gerektiğini unutmayın.

* Sertifika Common Name: SSL/TLS bağlantı sorunları yaşıyorsanız, sunucu sertifikasının Common Name’inin istemcinin bağlanmaya çalıştığı IP adresi veya alan adıyla eşleştiğinden emin olun.

* Mosquitto Servisini Yeniden Başlatın: Herhangi bir yapılandırma değişikliğinden sonra Mosquitto servisini yeniden başlattığınızdan emin olun: sudo systemctl restart mosquitto.

Sonuç

Bu makalede, Mosquitto MQTT mesajlaşma brokerını Ubuntu 18.04 üzerine nasıl kuracağınızı ve kapsamlı güvenlik önlemleriyle nasıl yapılandıracağınızı adım adım öğrendiniz. MQTT’nin IoT dünyasındaki önemi ve Mosquitto’nun bu alandaki rolü göz önüne alındığında, brokerınızın güvenliğini sağlamak projenizin başarısı için kritik bir adımdır.

Kullanıcı adı ve şifre kimlik doğrulaması, erişim kontrol listeleri (ACL) ve SSL/TLS şifrelemesi gibi temel güvenlik katmanlarını uygulayarak, Mosquitto brokerınızı yetkisiz erişime ve veri ihlallerine karşı önemli ölçüde korumuş olursunuz. İstemci sertifikası kimlik doğrulaması gibi ileri düzey önlemler, daha da yüksek bir güvenlik seviyesi sağlayabilir.

Unutmayın ki güvenlik sürekli bir süreçtir. Sunucunuzu ve Mosquitto’yu düzenli olarak güncel tutmak, logları izlemek ve güvenlik yapılandırmalarını periyodik olarak gözden geçirmek, sisteminizin zaman içinde güvende kalmasını sağlayacaktır. Bu rehberdeki adımları takip ederek, IoT projeleriniz için sağlam, güvenli ve güvenilir bir MQTT altyapısı oluşturmuş olacaksınız.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version