SSH sadece uzak sunuculara bağlanmak için değil, güvenli tüneller oluşturmak için de kullanılır. Port yönlendirme ile trafiği şifreli SSH bağlantısı üzerinden aktarabilir, güvenlik duvarlarını aşabilir ve yerel servisleri dışarıya açabilirsiniz.
SSH Tünel Nedir?
SSH tüneli, ağ trafiğini şifreli SSH bağlantısı üzerinden yönlendiren bir tekniktir. İki bilgisayar arasında güvenli bir kanal oluşturur. Halka açık Wi-Fi gibi güvensiz ağlarda bile verileriniz korunur.
Üç tür port yönlendirme vardır:
- Local (Yerel): Yerel porttan uzak servise
- Remote (Uzak): Uzak porttan yerel servise
- Dynamic (Dinamik): SOCKS proxy olarak çalışır
Local Port Forwarding (-L)
Yerel port yönlendirme, yerel makinenizden uzak sunucuya tünel oluşturur. Uzak servislere sanki yerel çalışıyormuş gibi erişirsiniz.
Temel Sözdizimi
ssh -L yerel_port:hedef_host:hedef_port kullanici@ssh_sunucu
Veritabanı Erişimi Örneği
Senaryo: Uzak sunucuda çalışan MySQL veritabanına erişmek istiyorsunuz. MySQL portu (3306) dışarıya kapalı, sadece sunucu içinden erişilebilir.
ssh -L 3306:localhost:3306 kullanici@sunucu
Artık yerel makinede localhost:3306'ya bağlanarak uzak MySQL'e erişebilirsiniz.
mysql -h 127.0.0.1 -P 3306 -u dbuser -p
Web Uygulaması Erişimi
Uzak sunucuda sadece localhost'ta çalışan web uygulaması (8080 portu):
ssh -L 8080:localhost:8080 kullanici@sunucu
Tarayıcıda http://localhost:8080 açarak uzak uygulamaya erişin.
Farklı Host'a Yönlendirme
SSH sunucusu üzerinden ağdaki başka bir makineye erişim:
ssh -L 5432:veritabani-sunucu:5432 kullanici@ssh-sunucu
SSH sunucusu aracılığıyla veritabani-sunucu:5432'ye bağlanırsınız.
Birden Fazla Port
Tek komutla birden fazla port yönlendirme:
ssh -L 3306:localhost:3306 -L 6379:localhost:6379 -L 9200:localhost:9200 kullanici@sunucu
Arka Planda Çalıştırma
Tüneli arka planda başlatma:
ssh -fNL 3306:localhost:3306 kullanici@sunucu
-f: Arka plana at -N: Komut çalıştırma (sadece tünel)
Remote Port Forwarding (-R)
Uzak port yönlendirme, uzak sunucudan yerel makinenize tünel oluşturur. Yerel servisleri dışarıya açmak için kullanılır.
Temel Sözdizimi
ssh -R uzak_port:hedef_host:hedef_port kullanici@ssh_sunucu
Yerel Web Sunucusu Paylaşımı
Senaryo: Yerel makinenizde geliştirdiğiniz web uygulamasını müşteriye göstermek istiyorsunuz.
ssh -R 8080:localhost:3000 kullanici@sunucu
Artık sunucu:8080 adresinden yerel 3000 portuna erişilebilir.
NAT Arkasından Erişim
Ev bilgisayarınız NAT arkasında, dışarıdan erişilemiyor. Uzak sunucu üzerinden erişim sağlayın:
ssh -R 2222:localhost:22 kullanici@sunucu
Sunucuda localhost:2222'ye SSH yaparak ev bilgisayarınıza bağlanabilirsiniz.
GatewayPorts Ayarı
Varsayılan olarak uzak port sadece localhost'tan erişilebilir. Tüm arayüzlerden erişim için sunucuda /etc/ssh/sshd_config dosyasına ekleyin:
GatewayPorts yes
SSH servisini yeniden başlatın:
sudo systemctl restart sshd
Dynamic Port Forwarding (-D)
Dinamik port yönlendirme, SOCKS proxy oluşturur. Tüm trafiği SSH üzerinden yönlendirebilirsiniz.
Temel Sözdizimi
ssh -D yerel_port kullanici@sunucu
SOCKS Proxy Oluşturma
ssh -D 1080 kullanici@sunucu
Artık localhost:1080 üzerinde SOCKS5 proxy çalışıyor.
Tarayıcı Yapılandırması
Firefox'ta:
- Ayarlar > Ağ Ayarları
- Manuel proxy yapılandırması
- SOCKS Host: 127.0.0.1, Port: 1080
- SOCKS v5 seçin
Chrome'da:
google-chrome --proxy-server="socks5://127.0.0.1:1080"
Kullanım Senaryoları
Halka açık Wi-Fi'de güvenli gezinme: Tüm trafiğiniz şifrelenir.
Coğrafi kısıtlamaları aşma: Farklı ülkedeki sunucu üzerinden erişim.
İçerik filtrelemeyi geçme: Kurumsal ağlarda engellenen sitelere erişim.
SSH Config ile Tünel
Her seferinde uzun komut yazmak yerine ~/.ssh/config dosyasında tanımlayın:
Host tunel-db HostName sunucu.example.com User kullanici LocalForward 3306 localhost:3306 LocalForward 6379 localhost:6379
Host tunel-proxy HostName sunucu.example.com User kullanici DynamicForward 1080
Kullanım:
ssh tunel-db ssh tunel-proxy
Kalıcı Tüneller
SSH tünelleri bağlantı koptuğunda kapanır. Kalıcı tünel için autossh kullanın.
Kurulum
sudo apt install autossh
Kullanım
autossh -M 0 -fNL 3306:localhost:3306 kullanici@sunucu
-M 0: Monitoring port devre dışı (ServerAliveInterval kullanılır)
Systemd Servisi
Kalıcı tünel için systemd servisi oluşturun:
/etc/systemd/system/ssh-tunnel.service:
[Unit] Description=SSH Tunnel After=network.target
[Service] User=kullanici ExecStart=/usr/bin/ssh -NL 3306:localhost:3306 -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes sunucu Restart=always RestartSec=10
[Install] WantedBy=multi-user.target
Etkinleştirme:
sudo systemctl enable ssh-tunnel sudo systemctl start ssh-tunnel
SSH Jump Host
Ara sunucu üzerinden hedefe bağlanma:
ssh -J atlama@jump-sunucu kullanici@hedef-sunucu
Port yönlendirme ile:
ssh -J atlama@jump-sunucu -L 3306:localhost:3306 kullanici@hedef-sunucu
Config dosyasında:
Host hedef HostName hedef-sunucu User kullanici ProxyJump atlama@jump-sunucu
Güvenlik Notları
Tünel içi şifreli: SSH bağlantısındaki tüm trafik şifrelenir.
Uç noktalar şifresiz olabilir: SSH sunucusu ile hedef arasındaki trafik şifrelenmeyebilir. Örneğin, SSH sunucusundan HTTP sunucusuna giden trafik düz metin.
Erişim kontrolü: Port yönlendirme ile normalde erişemeyeceğiniz servislere erişirsiniz. Güvenlik politikalarına dikkat edin.
AllowTcpForwarding: Sunucuda port yönlendirmeyi devre dışı bırakmak için /etc/ssh/sshd_config:
AllowTcpForwarding no
Pratik Senaryolar
Uzak Veritabanı Geliştirme
Yerel IDE'den uzak veritabanına güvenli erişim:
ssh -L 5432:localhost:5432 dev@gelistirme-sunucu
IDE bağlantı ayarlarında localhost:5432 kullanın.
Web Geliştirme Paylaşımı
Yerel geliştirme sunucusunu ekip arkadaşına gösterme:
ssh -R 3000:localhost:3000 kullanici@ortak-sunucu
Ekip arkadaşı ortak-sunucu:3000 adresinden görüntüler.
Güvenli E-posta Erişimi
Güvensiz ağda e-posta sunucusuna erişim:
ssh -L 993:mail.example.com:993 -L 587:mail.example.com:587 kullanici@sunucu
E-posta istemcisinde sunucu olarak localhost kullanın.
Sorun Giderme
Bağlantı reddediliyor:
- Hedef port açık mı kontrol edin
- Güvenlik duvarı kurallarını kontrol edin
- SSH sunucusunda AllowTcpForwarding etkin mi
Port zaten kullanımda:
- Farklı yerel port seçin
- Mevcut bağlantıyı sonlandırın: lsof -i :3306
Tünel çalışıyor ama bağlanamıyorum:
- Hedef servis çalışıyor mu kontrol edin
- localhost yerine 127.0.0.1 deneyin
0 Yorum
Yorum Yaz