autossh nedir – ssh tunnel kullanımı ve tünelleme yöntemleri

Windows ortamında Putty aracını kullanarak tunnel oluşturup bunu proxy gibi kullanabiliyoruz. Tünelleme amaçlı putty ve plink aracının kullanımı aslında oldukça basittir. Linux ortamında ssh ile nasıl tünelleme işlemi yapıyorsak aynı parametreleri plink.exe uygulamasına vererek Windows ortamında da tunnel yapılandırabiliyoruz. autossh ise bu ssh tunnel kanallarının her zaman açık kalmasını sağlayan, sistem yeniden başlatılırsa bu tunnel bağlantılarını otomatik olarak yeniden başlatan bir uygulamadır. 

Autossh kurulumu ve kullanımı

Autossh linux tabanlı çalışan bir uygulama. Bu yazımızda merkezi bir vps sunucusu üzerinden diğer sunucularımız üzerinde de çalışabilecek bir tunnel merkez sunucusu yapılandıracağız. Önceliklke autossh’ı kuralım:

sudo apt-get install autossh

SSH ile tunnel bağlantılarımızı test edelim

Ardından direkt autossh komutulunu kullanmadan önce doğrudan ssh komutu ile tunnel oluşturup kontrol edelim. Eğer bu aşamada bir sorun yaşamazsak bu bağlantının açık kalmasını ve sistem başlangıcında otomatik olarak oluşturulması için gerekli ayarlamaları yapalım. 

ssh -D 0.0.0.0:10888 root@127.0.0.1 -N

ile şu an bağlı olduğumuz vps’in 10888 portu üzerinden dinamik ssh tunnel açabiliriz. Dinamik tunnel SOCKS5 protokolünü desteklerler. Böylece firefox dahil olmak üzere bir çok uygulmada SOCKS5 proxy ayarlarını girip doğrudan kullanabiliriz. Ardından ayrı bir ssh oturumundan netstat çalıştırarak bu tunnelin kurulup kurulmadığına bakalım:

root@box:/etc/init# netstat -tlnp |grep 10888
tcp 0 0 0.0.0.0:10888 0.0.0.0:* LISTEN 1757/ssh

SSH Tunnel bağlantılarına dışarıdan izin verme

Buradaki 0.0.0.0 kısmı önemlidir. Eğer 127.0.0.1 görüyorsanız kullandığınız sistem güvenlik amaçlı olarak dışarıdan gelen bağlantılara engellemiş demektir. Bunlara izin vermek için ssh ayarlarını değiştirmemiz gerekiyor. nano /etc/ssh/sshd_config ile ssh ayarlarına girelim ve şu değişiklikleri yapalım:

GatewayPorts yes
X11Forwarding yes
AllowAgentForwarding yes
PermitRootLogin yes

AllowTcpForwarding yes

Şimdi tekrar ssh -D 0.0.0.0:10888 root@127.0.0.1 -N komutunu kullandığımızda netstat -tlnp de düzgün şekilde portun açıldığını göreceğiz. 

Firefox SOCKS5 proxy kullanımı ve autossh ile otomatikleştirme 

Bu aşamaya kadar autossh gibi harici bir uygulamadan yararlanmadan linux ile birlikte gelen ssh aracını kullanarak doğrudan SOCKS5 dinamik tunnel işlemi yaptık. Şu an firefox gibi SOCKS5 proxy kurulumu destekleyen uygulamalar ile doğrudan bu sunucuya bağlantı kurabiliriz:

Şu aşamada firefox çalışacaktır fakat şöyle bir sorun var. VPS yeniden başlatılırsa ya da anlık olarak ssh bağlantısında sorun olursa tunnel yeniden oluşturulmayacak elle yeniden otomatik olarak başlamayacaktır. Bu aşamada autossh kullanıyoruz. Autossh için kullanacağımız komut şu şekilde:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -D 0.0.0.0:10888 root@127.0.0.1 -N

komutun başına girdiğimiz -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" kısmı autossh programının tunnel bağlantısının aktif olup olmadığını kontrol etme yöntemini belirtiyor. Bu ayarları bu şekilde kullanmanızı öneririm. Devamındaki kısım ise standart ssh tunnel oluşturma yöntemi ile aynı. Burayı ihtiyaca göre değiştirebiliriz. Uzak bir sistem için tunnel açmak istiyorsak 127.0.0.1 yerine uzak vps sunucusunun adresini vermemiz gerekiyor. Yine tabi önce ssh komutu ile kontrol etmekte fayda var.

Upstart kullanarak SSH Tunnel bağlantılarını başlangıçta çalıştırma

Ubuntu 14 sistemde autossh tunnel’i sistem başlangıç aşamasında çalıştırmak böylece VPS yeniden başlatılsa bile otomatik olarak kurulmasını sağlamak için şöyle bir upstart servisi tanımlayabiliriz: 

nano /etc/init/autossh-tunnel.conf
description "autossh-tunnel"
env AUTOSSH_GATETIME=0
start on runlevel [2345]
stop on runlevel [!2345]
respawn
post-stop exec sleep 5
limit nofile 65000 65000
setuid root
exec /usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -D 0.0.0.0:10888 root@127.0.0.1 -N

Ardından service autossh-tunnel start ile servisi başlatabiliriz. Sistem başlangıcında otomatik olarak tunnel bağlantısı oluşturulacaktır.

Ubuntu UFW Firewall ile Tunnel Güvenliğini Sağlama

SOCKS5 tunnel bağlantıları oluşturulurken şifre kullanılmadığını unutmayın. Şu an bu sunucuya dışardan 10888 portunu kullanarak herkes bağlanabilir. Maalesef buna şifre koymak da mümkün değil. Güvenlik için Ubuntu’nun ufw firewall’ından faydalanabiliriz. Öncelikle kullandığımız servisler için ufw üzerinden portları açalım:

ufw allow 22 # ssh için
ufw allow 80 # web sunucusu HTTP
ufw allow 443 # web sunucusu HTTPS

Ardından ufw allow from IPADRESIMIZ şeklinde kendi IP adresimizi ekleyerek kendi IP’miz için tüm portlara izin verelim. Böylece tunnel bağlantılarını yalnızca biz kullanabilirken ssh ve web bağlantıları her ip den yapılabilecektir. Son olarak ufw enable ile firewall’ı aktif etmeyi unutmayın.

Detaylar için:
https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/

SSH Tunnel ve Tünelleme Örnekleri Komutları

ssh tunnel için bir kaç örnek daha eklemek istiyorum. Local tunnel işlemi için dışarıdan bağlantıları izin vermek için IPv4 için 0.0.0.0 ve v6 için [::] kullanımını unutmayın.

ipv6 dışarı kapalı supervisor’ı ipv6 public olarak açma:

ssh -6 root@localhost -L [::]:9002:localhost:9001

Bu komut ile ipv6 üzerinde çalışan ve port olarak 9001 kullanan supervisord uygulamasını 9002 üzerinden dış bağlantılara açıyoruz. Supervisor kendi üzerinden dış bağlantılara izin vermeyi desteklemiyor. Bu destek bulunmayan uygulamaları bu şekilde dışarı açabiliyoruz. 0.0.0.0 yerine ipv6’nın dış bağlantılarını temsil eden [::] sembolünü kullandık.

ssh tunnel ile ipv4 ü ipv6 a yönledirme

ssh root@ipv6sunucuadresi -L 0.0.0.0:11001:localhost:9001

Bu örnekte yalnızca ip v6 adresi bulunan bir sunucuya ip v4 desteği de olan başka bir sunucu üzerinden ip v4 port açıyoruz. Burada ip v4 desteği olan VPS sunucuya bağlı iken bu komutu çalıştırıyoruz. Böylece ipv4 sunucudaki 11001 port adresi ipv6 sunucudaki 9001’e yönlenmiş oluyor. 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir