2 puan yazan baeba 3 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Özet Genel Bakış

  • SSH tüneli, dışarıdan doğrudan erişilemeyen servislere güvenli biçimde bağlanmak veya iç servisleri geçici olarak dışarıya açmak için kullanılan bir tekniktir.
  • SSH port yönlendirme genel olarak yerel yönlendirme, uzak yönlendirme, dinamik yerel yönlendirme, dinamik uzak yönlendirme olarak ayrılır.
  • -L yerel SSH istemcisinin bir port açmasını, -R ise uzak SSH sunucusunun bir port açmasını sağlar.
  • Bir Bastion Host kullanıldığında yalnızca SSH sunucusuna değil, o sunucunun erişebildiği diğer özel ağ servislerine de bağlanılabilir.
  • Dinamik yönlendirme, belirli bir hedefi sabitlemeden bir SOCKS proxy oluşturarak birden fazla host ve porta erişim sağlar.
  • Uzak yönlendirmeyi dış ağa açmak için SSH sunucusundaki GatewayPorts ayarının gözden geçirilmesi gerekir.

Giriş

SSH tünelinin amacı

  • SSH, uzak komut çalıştırmanın yanı sıra ağ trafiğini şifreleyerek ileten tünel işlevi de sunar.

  • Ek bir VPN veya özel proxy programı olmadan, yalnızca standart SSH komutlarıyla özel ağa erişim ve servis yayını mümkündür.

  • Temel kullanım örnekleri şunlardır.

    • Genel erişime açık bir sunucu üzerinden iç VPC servislerine bağlanmak
    • Uzak geliştirme sunucusunun yerel portunu kullanıcının PC'sindeki tarayıcıda açmak
    • Evdeki veya özel ağdaki servisleri geçici olarak dışarıya açmak
    • Yerel tarayıcının hata ayıklama portunu uzak geliştirme ajanına bağlamak
  • SSH tünellerini anlamak için şu iki noktayı ayırmak gerekir.

    • Hangi makinenin yeni bir port açıp dinlediği
    • Tünelden geçen trafiğin, hangi makinenin bakış açısından hedefe bağlandığı

Ana Bölüm

Yerel yönlendirme uzak servisi yerel ortama bağlar

  • Yerel port yönlendirme, uzak sunucuyu veya uzak sunucunun erişebildiği bir servisi kullanıcının PC'sindeki yerel bir porta bağlama yöntemidir.
  • Temel komut yapısı şöyledir.
ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr  
  • SSH istemcisi, kullanıcının PC'sindeki local_port üzerinde bağlantı bekler.

  • Bu porta gelen trafik, SSH tüneli üzerinden remote_addr:remote_port adresine iletilir.

  • Nihai hedefe bağlantı, SSH sunucusunun bulunduğu ağın bakış açısından yapılır.

  • Başlıca kullanım örnekleri şunlardır.

    • Uzak MySQL, PostgreSQL, Redis erişimi
    • Yalnızca özel ağda açık olan web uygulamalarına erişim
    • Sunucunun dış arayüzünde yayınlanmamış container portlarına erişim

Bastion Host özel ağ erişimini aracılık eder

  • remote_addr ile SSH bağlantı hedefi olan sshd_addr aynı makine olmak zorunda değildir.

  • SSH sunucusu başka iç servislere erişebiliyorsa, o sunucu bir ara nokta olarak kullanılabilir.

  • Bu tür aracılık yapan sunuculara Bastion Host veya Jump Host denir.

  • Yaygın bağlantı yapısı şöyledir.

    • Kullanıcının PC'sinden genel erişime açık Bastion Host'a SSH bağlantısı
    • Trafiğin, Bastion Host'un erişebildiği VPC içi servislere iletilmesi
  • Bu sayede dışarıya açık olmayan veritabanlarına, arama kümelerine ve iç API'lere erişilebilir.

Uzak yönlendirme yerel servisi uzakta yayınlar

  • Uzak port yönlendirme, kullanıcının PC'sindeki veya iç ağdaki bir servisi dışarıdaki SSH sunucusunun bir portuna bağlama yöntemidir.
  • Temel komut yapısı şöyledir.
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr  
  • Uzak SSH sunucusu remote_port portunu açar ve bağlantı bekler.

  • Bu porta gelen trafik, SSH tüneli üzerinden SSH istemcisi tarafındaki local_addr:local_port adresine iletilir.

  • Başlıca kullanım örnekleri şunlardır.

    • Dizüstü bilgisayarda çalışan geliştirme sunucusunu dış demo için yayınlamak
    • Homelab servislerini internetten erişilebilir hale getirmek
    • Yerel tarayıcının hata ayıklama portunu uzak geliştirme ortamına sunmak

Dışa açmak için GatewayPorts ayarı gerekir

  • Varsayılan ayarlarda, uzak yönlendirme portu yalnızca SSH sunucusunun localhost arayüzüne bind edilebilir.
  • Bu durumda ilgili servise uzak sunucunun içinden erişilebilir, ancak dışarıdan erişilemez.
  • Uzak sunucunun genel IP'si üzerinden erişim sağlamak için sshd_config içindeki şu ayarın gözden geçirilmesi gerekir.
GatewayPorts yes  
  • Bu ayar portu dış arayüzde görünür hale getirebileceği için firewall ve erişim kontrolü birlikte uygulanmalıdır.
  • Geliştirme servislerini doğrudan genel internete açmak, kimliği doğrulanmamış erişim ve saldırı riskini artırabilir.

Yerel makine özel ağ için bir Jump Host olabilir

  • Uzak yönlendirmenin hedefi yalnızca SSH istemcisinin çalıştığı makineyle sınırlı değildir.

  • Kullanıcının PC'si ev ağındaki başka sunuculara erişebiliyorsa, bu iç sunucuların portları da uzak SSH sunucusu üzerinden yayınlanabilir.

  • Bu durumda kullanıcının PC'si şu iki ağı birbirine bağlayan bir ara makine haline gelir.

    • Ev ağı veya özel geliştirme ağı
    • Genel SSH gateway sunucusu
  • Bu sayede internete doğrudan bağlı olmayan ev sunucularındaki veya iç geliştirme sunucularındaki servislere dışarıdan erişilebilir.

Dinamik yerel yönlendirme yerel bir SOCKS proxy oluşturur

  • Normal yerel yönlendirme, tek bir yerel portu tek bir hedefe sabitler.
  • Dinamik yerel yönlendirme ise SSH istemcisinde bir SOCKS proxy oluşturur.
  • Temel komut yapısı şöyledir.
ssh -D [local_addr:]local_port [user@]sshd_addr  
  • Kullanıcının PC'sindeki belirtilen portta bir SOCKS proxy çalışır.

  • SOCKS destekleyen uygulamalar, her bağlantıda farklı hedef adres ve port belirleyebilir.

  • Gerçek hedef bağlantısı, uzak SSH sunucusunun ağ bakış açısından kurulur.

  • Tek bir SSH bağlantısıyla uzak özel ağdaki birden fazla servise erişilebilmesi, bunu sabit yerel yönlendirmeden ayırır.

  • Başlıca kullanım örnekleri şunlardır.

    • Bastion Host üzerinden birden fazla iç API çağrısı yapmak
    • Özel ağ içindeki web uygulamalarını gezmek
    • Tek bir EC2 instance üzerinden birden fazla VPC endpoint'ine bağlanmak

Dinamik uzak yönlendirme uzak bir SOCKS proxy oluşturur

  • -R seçeneğinde sabit hedef atlanırsa, uzak SSH sunucusunda bir SOCKS proxy oluşturulabilir.
  • Temel komut yapısı şöyledir.
ssh -R [bind_address:]port [user@]gateway_addr  
  • Uzak gateway sunucusu, belirtilen portta SOCKS bağlantılarını bekler.
  • Proxy'ye gelen istekler SSH tüneli üzerinden istemci tarafına iletilir.
  • Nihai hedefe bağlantı, SSH istemcisinin bulunduğu ağın bakış açısından kurulur.
  • Bu sayede uzak sunucu, kullanıcının PC'sinin erişebildiği tüm ev ağına veya özel ağa erişebilir.
  • Dinamik uzak yönlendirme için istemci tarafında OpenSSH 7.6 veya üzeri gerekir.
  • Uzak SOCKS proxy'yi dış arayüzde yayınlamak için, normal uzak yönlendirmede olduğu gibi GatewayPorts ayarı gerekir.

Arka planda çalıştırma seçenekleri yalnızca tüneli açık tutar

  • SSH bağlantısından sonra komut çalıştırmadan yalnızca port yönlendirmeyi sürdürmek için -N seçeneği kullanılır.
  • Tüneli arka plana almak için buna ek olarak -f seçeneği kullanılabilir.
  • Türlere göre örnekler şöyledir.
ssh -f -N -L ...  
ssh -f -N -R ...  
ssh -f -N -D ...  
  • Otomasyon veya uzun süreli çalışma ortamlarında, tünelin kapanması, yeniden bağlanma ve arıza algılama yöntemleri ayrıca planlanmalıdır.

Komutlar portun açıldığı yere göre ayrılır

  • ssh -L, yerel SSH istemcisinde yeni bir port açar.
  • ssh -R, uzak SSH sunucusunda yeni bir port açar.
  • ssh -D, yerel SSH istemcisinde bir SOCKS proxy oluşturur.
  • Hedef belirtilmeden kullanılan ssh -R, uzak SSH sunucusunda bir SOCKS proxy oluşturur.
  • Komutları akılda tutmak için temel kural şöyledir.
-L = local:remote  
-R = remote:local  
  • İki noktanın solundaki adres ve port, yeni açılan dinleme noktasıdır.
  • local, SSH istemcisinin kendisini veya istemcinin erişebildiği iç bir makineyi ifade edebilir.
  • remote, SSH sunucusunun kendisini veya sunucunun erişebildiği başka bir iç makineyi ifade edebilir.

Sonuç

SSH tünelleri erişim yönüne göre seçilir

  • Uzak bir servisi kendi PC'nizde kullanmak için yerel yönlendirme -L kullanın.

  • Kendi PC'nizi veya iç servislerinizi uzak sunucu tarafına açmak için uzak yönlendirme -R kullanın.

  • Uzak ağdaki birden fazla hedefe esnek şekilde erişmek için dinamik yerel yönlendirme -D kullanın.

  • İstemci tarafındaki tüm ağa uzak gateway üzerinden esnek erişim sağlamak için, hedefi belirtilmemiş dinamik uzak yönlendirme -R kullanın.

  • SSH tüneli tasarlarken önce şu noktalar kontrol edilmelidir.

    • Yeni portun nerede açılması gerektiği
    • Nihai hedefe erişebilen makine
    • GatewayPorts, firewall ve SSH erişim yetkisi ayarları
    • Dışa açmanın doğurabileceği güvenlik riskleri
  • Temel karar ölçütü, servisi hangi tarafta görünür kılmak istediğiniz ve hangi makinenin hedefe gerçekten erişebildiğidir.

Henüz yorum yok.

Henüz yorum yok.