Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sunucuları izlemeye almak

Bu sayfa bir sunucu filosunu baştan sona izlemeye almayı adım adım anlatır. Örneklerde helmsight’ın çalıştığı makinenin adresi 10.0.0.5, izleme hesabının adı monitor’dür.

1. helmsight için bir anahtar oluşturun

Kurulum betiğini veya helmsight init --generate-key komutunu kullandıysanız anahtar zaten vardır (/etc/helmsight/id_ed25519); 2. adımla devam edin.

helmsight’ın çalıştığı makinede (komutlar Kurulum sayfasındaki helmsight sistem kullanıcısının oluşturulduğunu varsayar):

sudo install -d -m 0750 -o root -g helmsight /etc/helmsight
sudo ssh-keygen -t ed25519 -f /etc/helmsight/id_ed25519 -N "" -C helmsight
sudo chgrp helmsight /etc/helmsight/id_ed25519
sudo chmod 0640 /etc/helmsight/id_ed25519

Yalnızca helmsight’a ayrılmış bir ed25519 anahtarı kullanın. RSA anahtarları da çalışır; ancak kullanılan RSA kütüphanesinde bilinen bir zamanlama yan kanalı bulunduğu için ed25519 tercih edilmelidir (ayrıntılar güvenlik modelinde). Parolalı anahtarlar ssh-agent’a yüklenmelidir (ssh.use_agent = true).

2. Her sunucuda izleme hesabını oluşturun

helmsight hosts bootstrap ile

helmsight, aşağıdaki adımların hepsini bir sunucuda yapan bir betik yazdırır: hesabı oluşturur, açık anahtarı restrict,from= ile kurar, Alpine’de anahtarla girişin önündeki kilidi açar ve hesabı günlük grubuna ekler. Yeniden çalıştırmak güvenlidir.

helmsight hosts bootstrap --from 10.0.0.5 | ssh root@web-1 sh

--from, helmsight sunucusunun izlenen sunucunun gördüğü adresidir (birden çok adres veya ağ virgülle ayrılabilir, ör. 10.0.0.5,10.1.0.0/16). Verilmezse anahtar her adresten kabul edilir ve bir uyarı yazdırılır. Betiği çalıştırmadan önce incelemek için bir dosyaya kaydedin:

helmsight hosts bootstrap --from 10.0.0.5 > monitor-account.sh
SeçenekAnlamı
--from <adres>Anahtarın kabul edildiği adresler
--user <kullanıcı>Oluşturulacak hesap (varsayılan: ssh.user)
--key <yol>Açık anahtarı kurulacak özel anahtar (varsayılan: ssh.identity_files içindeki ilk anahtar)
--no-journalHesabı systemd-journal veya adm grubuna eklemez

Elle

İzlenecek her sunucuda root olarak:

useradd --create-home --shell /bin/sh monitor
install -d -m 700 -o monitor -g monitor ~monitor/.ssh
echo 'restrict,from="10.0.0.5" ssh-ed25519 AAAA… helmsight' > ~monitor/.ssh/authorized_keys
chown monitor:monitor ~monitor/.ssh/authorized_keys
chmod 600 ~monitor/.ssh/authorized_keys
  • ssh-ed25519 AAAA… helmsight yerine /etc/helmsight/id_ed25519.pub dosyasının içeriğini yazın.
  • 10.0.0.5 yerine helmsight sunucusunun, izlenen sunucunun gördüğü adresini yazın. NAT arkasındaysanız bu, çevrilmiş adrestir. from= sayesinde anahtar çalınsa bile başka bir makineden kullanılamaz.
  • restrict port, ajan ve X11 yönlendirmesini ve terminal (PTY) ayırmayı kapatır. helmsight bunların hiçbirine ihtiyaç duymaz.
  • Hesabın kabuğu çalışan bir POSIX kabuğu olmalıdır (/bin/sh); /usr/sbin/nologin ile veri toplanamaz.

Alpine’de useradd yerine adduser -D -s /bin/sh monitor kullanın. Alpine yeni hesapları kilitli (!) oluşturur ve OpenSSH kilitli hesaplara anahtarla girişi de reddeder. Hesabı parolayla giriş yapılamayacak ama kilitli de sayılmayacak hâle getirin:

sed -i 's/^monitor:!/monitor:*/' /etc/shadow

passwd -u kullanmayın: BusyBox’ta boş parolalı bir hesap bırakabilir.

Çok sayıda sunucu için bu adımları Ansible, Salt veya bulut-init (cloud-init) gibi mevcut araçlarınızla dağıtabilirsiniz. Örnek bir Ansible görevi:

- name: helmsight izleme hesabı
  ansible.builtin.user:
    name: monitor
    shell: /bin/sh
    create_home: true

- name: helmsight anahtarı
  ansible.posix.authorized_key:
    user: monitor
    key: "{{ lookup('file', 'files/helmsight.pub') }}"
    key_options: 'restrict,from="10.0.0.5"'
    exclusive: true

İsteğe bağlı grup üyelikleri

Bazı veriler ek izin gerektirir. Bu izinler olmadan helmsight ilgili görünümde “n/a” ve nedenini gösterir; başka hiçbir şey etkilenmez.

GrupSağladığıNot
systemd-journal (Debian/Ubuntu’da adm de olur)Başarısız SSH giriş geçmişiGünlüklere salt okunur erişim
dockerKonteyner listesi ve kaynak kullanımıroot’a eşdeğerdir; ancak bunu kabul ediyorsanız verin
usermod -aG systemd-journal monitor

Sunucuya bunun dışında hiçbir şey kurulmaz.

3. Sunucularınızı tanımlayın

helmsight.toml içinde:

[ssh]
user = "monitor"
identity_files = ["/etc/helmsight/id_ed25519"]

[[hosts]]
name = "web-1"
address = "10.0.0.11"
groups = ["web"]
tags = ["env:prod", "role:web"]

[[hosts]]
name = "web-2"
address = "10.0.0.12"
groups = ["web"]
tags = ["env:prod", "role:web"]
baseline = "web-1"    # sapma ve yeni portlar web-1'e göre karşılaştırılır

[[hosts]]
name = "db-1"
address = "db-1.internal"
port = 2222
user = "observer"     # bu sunucu için farklı hesap
groups = ["db"]

Gruplar ve etiketler nasıl seçilir? Gruplar filoyu kabaca böler (web, db, edge) ve filtrelerde, alarm kurallarında, eylemlerde, bildirim kanallarında ve duvar ekranı belirteçlerinde kapsam olarak kullanılır. Etiketler serbest biçimlidir ve genellikle anahtar:değer şeklinde yazılır (env:prod, dc:ist-1, team:payments). Bir sunucu birden çok gruba ve etikete sahip olabilir.

Referans sunucu (baseline) aynı işi yapan sunucular arasındaki farkları yakalamak içindir. web-2 için baseline = "web-1" yazdığınızda Compare (karşılaştır) görünümü iki sunucu arasındaki paket, port, servis, çekirdek ve işletim sistemi farklarını; güvenlik sayfası da web-2’de dinlenen ama web-1’de bulunmayan portları gösterir.

Sunucu listesini ayrı tutmak

Sunucular ayrı bir dosyada da tutulabilir (yapılandırma dosyasına göre göreli yol):

hosts_file = "hosts.toml"

hosts.toml yalnızca [[hosts]] kayıtlarından oluşur. Bu, sunucu listesini bir envanter aracından üretmeyi kolaylaştırır.

~/.ssh/config dosyasından içe aktarmak

[ssh_config_import]
path = "~/.ssh/config"
hosts = ["web-*", "db-*"]
tags = ["source:ssh-config"]

HostName, User, Port ve IdentityFile dikkate alınır. Aynı adla açıkça yazılmış bir [[hosts]] kaydı önceliklidir. ProxyJump kullanan sunucular uyarıyla atlanır.

Yapılandırmayı helmsight config check ile doğrulayın. Her hata dosyayı, satırı ve anahtarı belirtir:

error: helmsight.toml:23:1: `hosts[1].name`: duplicate host name `web-1`

4. Sunucu anahtarlarını onaylayın

helmsight tanımadığı sunucu anahtarlarını reddeder. Bunları bir kez onaylayın:

helmsight hosts test --trust
HOST        STATUS             DETAIL
web-1       host key unknown   ssh-ed25519 SHA256:ldBw6qzC… ([10.0.0.11]:22)
  Trust this key? Compare with `ssh-keygen -lf` on the host (y/N) [N]: y
  trusted; retrying
web-1       ok                 Debian GNU/Linux 12 (bookworm); user monitor (72 ms)

Onaylamadan önce parmak izini sunucunun kendisinde karşılaştırın:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Anahtarlar arayüzde Host keys (sunucu anahtarları) sayfasından da onaylanabilir; burada yönetici, sunucuda yazdırılan parmak izini yapıştırır ve onay ancak sunulan anahtarla eşleşirse kabul edilir. Daha sonra değişen bir anahtar veri toplamayı durdurur ve bir yönetici inceleyene kadar kritik bir alarm üretir.

Sunucuların çok olduğu ve ağın güvenilir olduğu ortamlarda ssh.accept_new_host_keys = true ile ilk görülen anahtarlar otomatik onaylanabilir (OpenSSH’deki accept-new gibi). Değişen anahtarlar bu ayarda da her zaman reddedilir.

5. Sunucuyu başlatın

helmsight serve

Sunucular ilk veri toplanana kadar, birkaç saniye boyunca Pending (bekliyor) olarak görünür. Bir sunucu Down, Auth failed veya Key not trusted durumunda kalırsa Sorun giderme sayfasına bakın.

helmsight neleri okur

Her turda mevcut SSH oturumu üzerinden tek bir POSIX kabuk betiği çalışır: /proc dosyaları, df, ps, ss, systemctl, paket veritabanı ve benzeri salt okunur kaynaklar. Tam liste ve verilen güvenceler güvenlik modelinde yer alır.