Tünelin içerisinden

ArticleCategory: []

System Administration

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Georges Tarbouriech 

en to tr Ergün Mıhcıoğlu 

AboutTheAuthor:[A small biography about the author]

Georges uzun süreden beri Unix kullanmakta(ticari ve serbest). Güvenlik ile ilgileniyor ve bu alanda yaptığı büyük işlerden dolayı ücretsiz yazılım topluluklarına teşekkür ediyor.

Abstract:[Here you write a little summary]

SSH,güvenli kabuk (secure shell), çok iyi bir ticari ürün. Fakat, Unix veya diğer işletim sistemleri için (ticari veya serbest) çeşitli ücretsiz ssh istemci veya sunucu uygulamaları mevcut.
Bunların en iyisi OpenSSH, bu linkten alabilirsiniz http://www.openssh.org. Bu yöreden Unix sistemlerine, windos'a, Mac'e... alternatifler bulabilirsiniz. Windos gibi bazı ürünler için sadece ücretsiz istemciler alabilirsiniz.
Bu makalede, harici uygulamalardan harici uygulamalara tünel açmak için ssh'ı nasıl kullanacağımız üzerine birkaç örnek sunacağız. VPN (Virtual Private Network(Sanal Özel Ag)) ssh'a bağlıdır , fakat farklı bir yoldan, bizim burada aldığımızdan çok daha ayrıntılı bir yoldan. Başka bir karmaşik çözüm, VTun'u kullanmaktır.
Bu yüzden, bu tünel açmayı, heterojen bir ağda verilerin başkaları tarafından görülmesini engellemek için verileri şifreleyen basit ve sade bir yöntem olarak düşünelim. Açıkça, bu yerel ve uzak ağların her ikisine de uygulanabilir. Fakat, hatırlarsanız, ssh sadece verileri şifreler, ağı kendi özünde güvenli yapmaz...
Uyarıldınız !

ArticleIllustration:[This is the title picture for your article]

ArticleBody:[The article body]

Neden ssh?

SSH bir önceki makalede bahsedilen telnet, rsh veya rlogin'in yerine geçer. SSH'da bazı güvenlik problemleri bulunmuş olsa da, henüz verileri şifrelemede iyi bir güvenlik aracı. Bu arada, yukarıda bahsedilen güvenlik problemi şifrelerle ilgiliydi Burası "passphrases" kullanımından şiddetle kaçınmayı öneriyor ve de elbette RSA açkılarını! SSH'i kullanma sizin , "tcpwraper" gibi, başka güvenlik araçları kullanmanızı engellemez.
Bir ağ üzerinde dolaşan verileri "tcpdump" ve "snoop" gibi araçları kullanarak izinsiz olarak izlemek oldukça kolaydır. Bunu, örneğin, telnet'i kullanarak veri değiştokuş eden iki bilgisayar içeren bir ağda deneyim edebilirsiniz. Örneğin Linux altında çalışan üçüncü bir makinadan, tcpdump'ı çalıştırın( root olarak elbette ) ve ne olduğunu görün. Tüm verileri okuyabilirsiniz !
Elbette ekrandaki görüntüler okunamayacak kadar hızlıdır, fakat hiçbir şey sizin çıktıyı bir dosyaya yönlendirmenize ve bunu bir fincan kahve içerken izlemenize engel olmaz. Eğer bu veriler için doğruysa şifreler için de doğrudur: yani kapılar kırıcılar için ağızına kadar açıktır. Onlara evinize girmelerini sağlayacak açkıyı vermiş oldunuz.
Dolaşan verilerin gizli olduğunu hayal edin... Eğer siz bir sistem yöneticiyseniz korkarım patronunuz sizden başka bir iş bulmanızı isteyecektir.
Uzak komutlar, rsh, rcp, rlogin de oldukça tehlikelidir, bunlarda da veriler şifrelenmez. Eğer ssh'ın rsh veya rlogin'in yerini alması iyi ise, scp olarak rcp'nin yerini alması da iyidir. Yani, eğer ssh'ı kullanıyorsanız artık başka uzak komutlara veya telnet'e daha fazla gereksiniminiz yoktur, en azından onları kullanmamalısınız.
SSH nasıl kurulur, özel ve genel açkılar nasıl oluşturulur... bunlar bu makalenin alanı dahilinde değil. Gereksiniminiz olan herşeyi indirdiğiniz ssh arşivinde veya the Linux Documentation Project'daki bu konu hakkındaki dokümanları okuyarak bulabileceksiniz.
Bu günlerde bilgisayar kullanmak hemen hemen her zaman şöyle veya böyle veri nakletmek ise, ssh zorunlu olmalı... bu size kalmış. Fakat ssh telnet'in veya uzak komutların yerini almaktan daha fazlasını yapabilir.
Harici uygulamalar arasında ve açıkça farklı işletim sistemleri arasında nakledilen verileri şifrelemede kullanılabilir. ayrıca bu verileri sıkıştırabilir de. Sıklıkla pop, ftp, http protokolleri ile kullanılır... sıkıştırmak veya şifrelemek için. Bu, örneğin, siz bir sistem yöneticisi iseniz ve evden işe veya işden eve bağlanmak istiyorsanız çok faydalı olur.
Bir istemci/sunucu uygulaması olmasından dolayı, ssh her ikisinde de çalışmak zorundadır: ssh'ı sunucu olarak çalıştıran bir makinaya ve istemci olarak çalıştıran bir diğer makinaya gereksiniminiz var.
Bu açık gerçek üstünde niçin ısrar ediyorum ? Çünkü ücretsiz yazılımlar hakkında konuştuğumuzdan, Unix dışında, birçok işletim sistemi ücretsiz sunuculara sahip değildir. Yani, bazen açıkça yapamayacaksınız, problemi çevirmeniz gerekecek:

açkı: ilerletme

İleride buna değineceğiz. Bu demek oluyorki, Mac OS veya Windos gibi işletim sistemleri kullanma, ücretsiz sunuculara sahip olmadığınızı gösterir. O zaman istemcilerle idare etmek zorunda kalacaksınız ve bu her zaman yeterince açık değildir. Şimdi birkaç gerçek örnek alalım.

SSH ve VNC

Eğer VNC'yi bilmiyorsanız, tüm zamanların en iyi araçlarından birini kaçırıyorsunuz demektir. VNC hakkında daha fazla bilgi edinmek için buraya bir bakın.
Eğer http://www.uk.research.att.com/vnc/docs.html'daki VNC'nin sanal yöresine giderseniz bizim şu anda konuştuğumuz şeyler hakkında birçok doküman bulabilirsiniz. Örneğin, bir Windos ssh istemcisinden bir Unix ssh sunucusuna, ssh üzerinden VNC'yi nasıl kullanıcağınızı bulabilirsiniz. Bundan dolayı, Frank Stajano'nun yaptığı müthiş işi burada tekrar yazmayacağım, zaten onun yaptığı benim yapabileceğimden çok daha iyi.
Şimdi, bunun nasıl çalıştığını görelim.
İlk önce, ücretsiz bir Windos istemcisi seçmek zorundasınız. Bu örnekte biz Teraterm Pro'yu onun Ttssh uzantısı ile kullanacağız. Onu şu adresten bulabilirsiniz http://hp.vector.co.jp/authors/VA002416/teraterm.html. Gerçekleri söylemek gerekirse, bu Fransa'da izin verilen bir sürüm olduğundan Ttssf olarak adlandırılır. (Bazı şeyler değişiyor , fakat haberdar olun ki, birçok ülke henüz şifrelemeyi kabul etmiyor. Sizin ülkenizdeki şifreleme durumunu kontrol etmek için şu bağlantıyı kullanabilirsiniz: http://www2.epic.org/reports/crypto2000/countries.html.)
Şimdi, ssh'ı bir Unix sunucusunda çalıştırdığınızı kabul edelim. Aynı makinada bir vnc sunucusu da çalıştırabileceğinizi var sayıyoruz. Bu iki sunucu çalıştıktan sonra, bir NT makinasını, örneğin, bir Unix sunucusuna Ttssh'ı kullanarak bağlayın. Bu sizin iki makina arasında şifrelenmiş bir bağlantıya sahip olduğunuzu gösterir. Fakat bu sizin NT makinasından bir şifrelenmiş vnc izleyicisi protokolü (vncistemci) çalıştırmanıza izin vermez. Bunu yapmak için ssh'a doğru portu ilerletmesini (burada biz devreye giriyoruz.) söylemeniz lazim.
vnc sunucusu'nu çalıştıran Unix makinasina "bandit(haydut)" denir ve 5901 portunu kullanır, çünkü o görüntü numarası 1, tipik X görüntü numarası bu makinada 0'dir. Normal kullanım "vncviewer bandit: 1" komutunu göndermektir. Bu kuşkusuz çalışacaktır, fakat veriler şifrelenmeden. Bunun yerine, NT kabuğunu (yani Dos arayüzü) kullanarak, "/ssh-L5902:bandit:5901" komutunu boşluksuz gönderin. Böylece, 5902 yerel portunu oluşturmuş olursunuz. Şimdi "vncviewer localhost:2" gibi bir komut, VNC protokolü ile sizin NT makinanız arasında şifrelenmiş bir bağlantıyı çalıştıracaktır. Bu, Ttssh grafiksel bir arayüze sahip olduğundan, komut satırını kullanmadan da yapılabilir. Ekleyelim ki bu sözdizimi sadece Ttssh ile ilgilidir. Aynı komutu bir Unix makinasında yazmak şunu söylemeli: "ssh -L 5902:bandit:5901 bandit".
Bu elbette çok temel bir örnek: siz çok daha karmaşık şeyler yapabilirsiniz. VNC sanal yöresindeki uygun dökümanları kontrol edin, özellikle Frank Stajano'nunkisini.

SSH ve MySQL

MySQL belkide en çok kullanılan DBMS(Veritabanı Yönetim Sistemi)dir, özellikle internet üzerinde. Yine, MySQL'i güvenli yapmak bu makalenin alanının dışında Fakat, MySQL sunucusu ile MySQL istemcisi arasındaki veri dolaşımını şifrelemek baglantıyı daha güvenli yapar. SSH bunu yapmamıza izin verir, VNC ile yaptığımız gibi, portu ilerleterek.
Intranet ile ilgili bir örnek alalım. MySQL sunucusu bir Linux kutusudur ve çoğu istemci NT makinalarıdır. Bir kez daha, Windos makinalarında Ttssh istemcilerini kullanıcağız.
Tipik MySQL portu 3306'dir. Biz aynı portu (3306) ilerleteceğiz.
Bir yerel ilerletme veya uzak ilerletme yapabilirsiniz.
Yerel bir ilerletme bir NT makinasında "/ssh-L3306:localhost:3306" gibi veya bir Unix makinasında "ssh -L 3306:localhost:3306" gibi olacaktır. "localhost"'u kullanma size verileri ev sahibi arayüzü yerine

loopback

arayüzünden gönderme iznini verir.
Uzak bir ilerletme NT için "/ssh-R3306:bandit:3306" ve Unix için "ssh -R 3306:bandit:3306"'dir.
Bu sadace kendi kendine bağlanma ile ilgilidir. DBM'e bağlanmak için, açık olarak MySQL sunucusu için ev sahibi ismi(hostname) ve kullanıcıismi(username) vermeniz gerekir, bu makinadaki kullanıcıisminizden farklı olabilir. "-l" seçeneği için ssh yardım sayfalarını araştırın.
Elbette, bu sadece eğer NT makinanızda bir MySQL istemcisine sahipseniz çalışacaktır.
Eğer sahip değilseniz, bir ODBC uygulaması kullanmanız gerekecektir, Sysbase mesela. Yani bu uygulamayı çalıştırmalısınız. Uygulamayı MySQL'e bağlamak için ODBC sürücünüzü kullanın. Şimdi MySQL sunucusuna girmek için, localhost'a bağlanabilirsiniz, MySQL sunucu ev sahibine değil. Şimdi sunucu ve istemci arasındaki veri dolaşımı şifrelendi. Bunu snoop veya tcpdump'i kullanarak kontrol edebilirsiniz.
Bu yerel ağ örneğiydi. Eğer böyle bir şeyi WAN'lar ile yapmak isterseniz, bu biraz daha karmaşık olacaktır, bir ateşduvarının (firewall) arkasındaysanız mesela. Bu, eğer bir sistem yöneticisiyseniz, evden uzak sistem idaresi yapmanın bir yöntemi olabilir, böyle bir yöntemi bir görselyöreden DBM'e girmek için kullanmayı umamazsınız. O zaman daha gelişmiş bir şeyi aramak zorunda kalacaksınız, VPN gibi mesela, fakat bu bir fikir.
Herneyse, bunların kredi kartı numaraları gibi gizli verileri transfer eden bir DBM sunucusunu güvenli yapmak için yeterli olduğunu düşünmeyin. Ve, bu arada, bu tür verileri risksiz gönderebilen çok güvenli bir sunucusu olduğunu iddia eden birisine kim inanır? Kişisel olarak, ben inanmam!!!

SSH ve "terminal emulation"

Biz zaten

"terminal emulation"

'nı kullanıyorken bu ne anlama gelir?
Bir Unix sunucusunda eski bir Cobol uygulaması çalıştırdığınızı düşünelim. İstemciler yine NT makinaları. Bağlanmak için vt100, vt220 veya vt 320'den daha gelişmiş "terminal emulation"'lara gereksinimleri olacak, bunlar için doğru bir kullanıcı arayüzü almak zorundadırlar. Yani, vurgular, tablolar... Standard bir (vt100, vt220...) "terminal emulation"'ı 8bit'e ayarlamak doğru çalışmayacaktır. Aldığınız kullanılmazdır. Bundan dolayı, eski bir ürün olduğundan, "eski" "terminal emulation" için özel bir yazılım kullanırsınız.
Doğru "emulation"'ı almak için uzun bir çaba harcadıktan sonra, "ibm3151"'i buldunuz, örneğin, en iyi sonuçları veren.
Fakat, kullandığınız yazılım birçok yıl önce geliştirildiğinden, güvenlik diye birşey bilmiyor. Bağlantı telnet kullanır. Gerçegi söylemek gerekirse, gönderilecek edilen veri oldukça gizli... Öyleyse ne yapmalı? En azından verileri şifreleyecek bir yol bulmak zorundasınız. Ve tekrar, ssh yardımı edecek.
Bir kez daha, yapılabilecek birden çok yol var...
telnet'i port 22'ye (ssh) yönlendirirsiniz veya "terminal emulation"'ın port'unu ilerletirsiniz. Fakat... Korkarımki sunucu normal bir kullanıcının telnet portunu (tipik olan 23) yönelnedirmesini kabul etmeyecektir: böyle birşeyi yapmak için root olmak zorundasınız (en azından ben öyle umuyorum!) Terminal uygulaması hakkında, o bir çok farklı kullanıcı tarafından ayni anda kullanılabilir, böylece her bağlantı için farklı bir port kullanılır, örneğin 10 kullanıcı= 10 port.
Bu biraz hassas oluyor, degil mi?
Öyleyse, ilk önce, uygulama sunucusu ssh sunucusunu çalışıyor ve port 22'yi dinliyor olmalı.
Bir NT makinasından, uygulama sunucusuna Ttssh'ı veya "komut satırını" kullnarak bağlanın. Böylece, sunucu ve istemci arasıda özel bir kullanıcı güvenli bir bağlantı sağlamış oldunuz. Ttssh seçeneklerinden uzak makinada yerel port 50000'i port 23'e (telnet) ilerletin. Komut satırından şöyle olmalı "ssh-L50000:servername:23". Şimdi "terminal emulation"'ınıza port 23 yerine port 50000 üzerinden çalışmasını söyleyebilirsiniz. Veriler şimdi güvenli bir kanal üzerinden dolaştırılır, yani şifrelenmiş. Bunu snoop veya tcpdump ile kontrol edebilirsiniz.
Açıkça, bunu uygulamaya bağlanmasına izin verilen tüm istemciler için yapabilirsiniz, ilerletilmiş port numarasını değiştirerek. Mesela, 50001, 50002, ve böylece kullanabilirsiniz.
Şimdi şunu sorabilirsiniz: niçin böyle yüksek portlar? Cevap: birçok sebepten !
Ciddi olarak, ana sebep root olmadan yüksek portlarla işlem yapabilirsiniz.
İkinci sebep, seçilen port iki makinada da kullanılmıyor olmalı. Mesela: eğer sunucu Solaris'i çalıştırıyorsa, birçok yüksek port kullanılır, çalışan sunucuya bağlı olarak. Böylece port 50000 ve üstü çalışabilir. Bu demek oluyorki, ilerletmeden önce portların kullanımlarını kontrol etmelisiniz.
Elbette, bu ssh istemcilerini çalıştırabilen birçok diger işletim sisteminde çalışacaktır.
İstemcilerdeki süreci otomatikleştirmekle ilgili olarak, bu size kalmış. Normal bir kullanıcıdan bağlanmadan önce bunları yapmasını isteyemezsiniz, degil mi? O zaman, bunu okuyucular için bir egzersiz olarak bırakıyoruz...

Buradan sonra nereye gitmeli ?

Bu örnekler ssh'ın çeşitli kullanımlarını gösterdi. Uygulamalar ve ssh ile çok daha fazla şey yapabilirsiniz. Bu sizin ihtiyaçlarınıza bağlıdır. Fakat, felsefe herzaman aynıdır: port ilerletme.
Yine de, daha karmaşık ilerletmeleri kullanırken dikkatli olun. Mesela, eğer üçüncü bir makina üzerinden ilerletirseniz, bağlantının ortasındaki veri dolaşımı şifrelenmeyecektir.
Windos Ttssh istemcileri kullananlar için başka bir sorun. İlerletilen portlara olan bağlantı uzak komutlarda oldugu gibi IP adreslerine bağlıdır, böylece

spoofing

saldırılarına izin verir. Bu nedenle, ssh'ın yanında baska bazı araçlar daha kullanmak gerekir, "tcpwrappers" gibi.
SSH ile ilgili yazıları araştırın, bunlar size çok şey öğretecektir. Geri kalanını sizin hayal gücünüz yapacak.

Sonunda, bitti !

Güvenlik herkesi ilgilendirmeli, fakat durum böyle değil ! ssh sizin hergün kullanabileceğiniz güvenlik araçlarından sadece birisidir. Bu oldukça iyi bir tanesi, ne olduğunu düşündüğünüzde, bir şifreleme veya sıkıştırma aracıdır.
Kendinde, ssh hemen hemen kullanışsızdır, makinanızda sahip olabileceğiniz çeşitli deliklerin hiçbirini çözmez. Bir ev sahibini, bir ağı güvenli yapmak çok büyük bir iştir ve araçlar, oldukça iyi olsalar da, herşeyi yapamazlar.
Olay güvenlik olduğunda temel görevler zorunludur. Kullanılmayan tüm servisleri kaldırmayı unutmayın, SUID root programlarını kontrol edin, riskli programları kaldırın... Yapılacak birçok şey var ve hiçbir zaman yeterli olmayacak. Tüm güvenlik araçlarını kurabilirsiniz, fakat eğer arka kapılardan birini açık bırakırsanız bunların hepsi faydasız olacaktır. Elbette, bu başka bir hikaye, fakat açık olanı unutmayın.
SSH'a geri dönelim, onu doğru ve yapıldığı iş için kullanmaya başladığınızda, onsuz ayrılamayacağınız bir araç oldugunu düşünelim. Yine, onu

passphrases

'lar, RSA açkıları ile kullanın şifrelerle değil. .ssh klasöründeki dosyaların ve klasörün kendisinin izinlerini kontrol edin. Ve yine ve yine, en azından paketleyicileri kullanın.
Fakat, hatirlarsanız, ssh'dan varolan birçok protokole tünel açabilirsiniz. Bu bağlantıları biraz daha güvenli yapmak için oldukça iyi bir yoldur.
SSH'ın hakkında konuşmadığımız başka bir genel kullanımı daha var, X oturumu ilerletme. Bu X'i farklı işletim sistemlerinde çalıştırmak demek olduğundan, bunu kasıtlı olarak bir kenara bırakıyoruz. Fakat bu protokol tünellemenin alanı içerisinde. X güvenli degilse, ssh olayları daha iyi yapabilir.
Daha gelişmiş kullanımlar için, ssh yeterli olmayacaktır. Daha önce söylediğimiz gibi, VPN'ler veya VTun gibi araçları kontrol edin, bunlar muhtemelen çok faydalı olacaktır.
Son olarak, ülkenizdeki şifreleme durumunu kontrol edin. SSH gibi bir yazılımı kullanmak yüzünden casus olarak hapise gitmek üzücü olacaktır.
Bu böyle...
Herneyse, çok inanılmaz bir zamanı yaşıyoruz !