SSH Bağlantısı

SSH(Secure Shell/Güvenli Kabuk) ağ üzerinden başka bilgisayarlara erişim sağlamak, uzak bir bilgisayarda komutlar çalıştırmak ve bir bilgisayardan diğerine dosya transferi amaçlı geliştirilmiş bir protokoldür. Güvensiz kanallar(internet vs) üzerinden güvenli haberleşme olanağı sağlar. Bir iletişimde SSH aşağıda belirtilen temel unsurları sağlar.

 

SSH Bağlantısı

Güvenli kanallardan iletişim ( SSH )

SSH ile ilgili temel tanımlar

SSH1, Tatu Ylönen tarafından geliştirilen ilk orjinal SSH ürünü. SSH-1 protokolü temel alınarak geliştirilmiştir.
SSH2, Tatu Ylönen tarafından geliştirilen SSH-2 ürünü. www.ssh.com
SSH-1, SSH protocol 1.
SSH-2, SSH protocol 2 . Günümüzde yaygın kullanımda olan ve kullanımı tavsiye edilen ssh sürümü. IETF SECSH çalışma grubu tarafından standartları
belirlenmiştir.

 

SSH Tarihçesi ve OpenSSH

SSH-1 protokolu ve SSH1, ilk olarak 1995 yılında Helsinki teknoloji universitesinde araştırma görevlisi olan “Tatu Ylönen” tarafından geliştirilmiştir. Aynı yılın Haziran ayında SSH1 kaynak kodları ile birlikte özgür olarak dağıtılmaya başlamıştır.

SSH protokolünün özgür bir uyarlaması olan OpenSSH *BSD Unix’lerin asi çocuğu olarak adlandırılan OpenBSD projesi çerçevesinde yürütülen SSH1 ve SSH2 protokollerini içeren yazılım takımıdır.

OpenSSH son özgür SSH versiyonu olan ssh1.2.12 den türetilmistir. Markus Friedl (Aaron Campbell, Bob Beck, Niels Provos, Theo de Raadt, Dug Song)
önderliğinde geliştirilen OpenSSH projesi dünya üzerinde birçok yazılımcının katılımı ile iyi bir yol katetmiştir. Göreceli olarak özgür yazılım projeleri
arasında en fazla kullanılan yazılımlardan biridir.

OpenBSD ile birlikte dağıtılan OpenSSH sürümü hariç diğer tüm sürümler OpenBSD için geliştirilen sürümün gerekli sisteme uyarlanmış halleridir (port
edilmis).

OpenSSH’ın birçok platforma uyarlanmış sürümlerini bulabilirsiniz ve platformlar arası kullanımı çok az farklılıklar gösterir. Aşağıda OpenSSH’ın
kullanılabileceği bazı platformlara örnek verilmiştir. Detaylı bilgi ve liste için http://www.openssh.org/portable.html adresini ziyaret edilebilir.

 AIX, HP-UX , Irix , Linux , NeXT , SCO , SNI/Reliant Unix , Solaris , Digital , Unix/Tru64/OSF, Mac OS X

OpenSSH, bu liste haricinde Windows ortamında da çalışmaktadır. OpenSSH’ı windows üzerinde kullanmak için (http://sshwindows.sourceforge.net/)
adresindeki cygwin+openssh windows portunun yüklenmesi gerekir.

Internette kullanılan SSH sunucuların büyük bir çoğunluğu (~%90)nu OpenSSH oluşturmaktadır. Bu sonuçlar scanSSH(http://www.monkey.org/~provos/scanssh/ ) adlı program ile yapılan değişik tarama sonuçlarından çıkarılmıştır.

Detaylı bilgi için http://www.openssh.com/usage/index.html OpenSSH BSD lisansı ile dağıtılmaktadır. OpenSSH lisansı ile ilgili detaylı
bilgi için:      http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/LICENCE?rev=HEAD
 

Kullanım Alanları

SSH güvenli iletişimin gerektiği her ortamda kullanılabilir. Sadece karşı sisteme bağlanıp komut çalıştırmak ya da dosya aktarımı yapmak için değil,
doğasında güvensiz(şifrelenmemiş trafik) olarak çalışan protokoller SSH üzerinden güvenli bir şekilde kullanabilir.

Mesela POP3 servisi ağ üzerinden tüm iletişimini şifrelenmemiş şekilde gerçekleştirir, biz pop3 servisini SSH üzerinden aktararak şifrelenmiş ve
güvenli hale getirebiliriz.

OpenSSH Kurulumu

OpenSSH birçok Unix/Linux dağıtımı ile öntanımlı olarak gelmektedir. OpenSSH kurulumu Kullandığınız Linux/UNIX dağıtımına gore
değişiklik gösterebilir. Sistemde kurulu degilse Kullanılan paket yönetim sistemi kullanılarak son sürüm(bu yazı hazırlanırken 4.2 idi.)OpenSSH
sisteme kurulur. Aşağıdaki komutla hangi SSH versiyonunun kullanıldığı öğrenilebilir.

$ssh -V

OpenSSH_4.2, OpenSSL 0.9.7g 11 Apr 2005


Temel SSH Kullanımı

Herhangi bir SSH sunucuya ilk bağlanıldığında SSH istemcisi bir uyarı verir. Bu uyarıda bağlandığı sunucuya daha once baglanmadığını belirtir ve sunucu kimlik bilgisi yerine geçen ait rsa anahtarini ekrana basar, yes dedikten sonra da bunu bir dosyaya(~/.ssh/known_hosts) kaydeder ve bir sonraki
bağlantıda sormaz. Eğer sunucu Ip adresi ya da SSH sunucusunda kimlik değişimi gibi bir değişiklik olursa bu uyarı farklı bir şekilde tekrar
görünecektir.

ssh ssh_sunucu

 

The authenticity of host 'ssh_sunucu (14.2.7.x)' can't be established. RSA key fingerprint is f3:ce:14:99:d7:19:44:ca:ff:5e:83:b6:79:52:4e:45.
Are you sure you want to continue connecting (yes/no)?yes

Warning: Permanently added 'ssh_sunucu,14.2.7.x' (RSA) to the list of known hosts.
 

huzeyfe@ssh_sunucu's password:

 

Sizden karşı sisteme erişmek için gerekli parolayı girmenizi bekler. Burada dikkatinizi bir noktaya çekmek istiyorum, ssh ile herhangi bir sunucuya bağlanmak istediğimizde SSH varsayılan olarak karşı sisteme şuanki yerel kullanıcı adınızla gireceğinizi düşünür. Bunu karşı sistemde bu kullanıcı adı var mı yok mu karşılaştırmadan işletir. Benim kullandığım makinedeki yerel kullancı adım huzeyfe,bunu
 

echo $LOGNAME

 
huzeyfe

komutu ile öğrenebilirsiniz. SSH_sunucu makinesine ssh ile bağlanmaya çalıştığımda yukarıda bahsettiğim durum gerçekleşti ve bana hangi kullanıcı adımla bağlanacağımı sormadan şu anki bağlı bulunduğum kullanıcı adı ile bağlantı sağladı. Bunu değiştirmek için OpenSSH bize -l parametresi ile kullanılan kullanıcı adı belirtme seçeneği sunar. Kullanımı şu şekildedir

ssh -l rapsodi ssh_sunucu

 

 l parametresinden sonra karşı sisteme bağlanmak istediğimiz kullanıcı adı girilir ya da -l parametresi ile aynı işlevi sağlayan aşağıdaki yöntem de kullanılabilir.

ssh huzeyfe@enderunix.org

 

huzeyfe 'SSH sistemine bağlanmak istediğimiz kullanıcı adı  @   'birleştirici karekter enderunix.org 'bağlanmak istediğimiz SSH sunucunun adı ya da IP adresi
 

Şu Anki ssh Ayarlarını Görmek İçin

sudo systemctl status ssh

 

Farklı Porttan Çalışan SSH Sunucularına Bağlantı

 Buraya kadar olan örneklerimizde SSH sunucunun SSH sunucu yazılımını varsayılan olarak 22. porttan hizmet verdirdiğini hesaba katarak işlem yaptık. SSH sunucu yazılımı başka bir porttan hizmet veriyorsa bu durumda -p parametresi ile hangi porttan bağlanmak istenildiği belirtilebilir.

Aşağıdaki örnekleri inceleyerek durumu daha iyi kavrayalım, ilk örnekte ssh sunucumuza -p parametresi belirlemeden bağlanmaya çalışıyoruz,fakat karşı sistemdeki ssh sunucusu 22.porttan hizmet vermiyor ve bize bağlantı redddedildi mesajı yolluyor.
 

ssh -l huzeyfe enderunix.org

 

ssh: connect to host enderunix.org port 22: Connection refused

2.örneğimizde ise karşı sistemin hangi porttan SSH hizmeti verdiğini belirterek bağlanmaya çalışıyoruz ve başarılı oluyoruz.
 

ssh –l huzeyfe enderunix.org -p 200

 

The authenticity of host 'enderunix.org (14.2.7.8)' can't be established.
RSA key fingerprint is 3f:98:e8:53:d7:62:1a:34:2e:57:39:47:f2:19:66:ea.
Are you sure you want to continue connecting (yes/no)?

Görüldüğü gibi karşı sistemdeki SSH sunucusu 200. porttan hizmet vermektedir.

 

Uzak Sistemlerde Komut Çalıştırmak

SSH’in uzak sistemlere bağlanmadan komut çalıştırıp çıktısını kendi ekranda alma imkanı da sunar.
Örnek;

ssh huzeyfe@cc.kou.edu.tr ls /home/huzeyfe/

 

The authenticity of host 'cc.kou.edu.tr (1.2.7.8)' can't be established.
DSA key fingerprint is a6:d6:35:52:75:66:63:15:5d:f6:76:b4:52:56:b4:64.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cc.kou.edu.tr,1.2.7.8' (DSA) to the list of
known hosts.
Password: XXX
6.0-BETA4-1-i386-disc2.iso
6.0-BETA4-i386-disc2.iso
6.0-BETA4-i386-disc2.iso.1
6.0-BETA4-i386-disc2.iso.2
Maildir
Manning,.Swt.JFace.in.Action.(2004).LiB(1).pdf
Manning.JUnit.Recipes.2005.pdf
Ev.
...
 

SSH ile Dosya Transferi

Günümüzde kullanılan en popülar dosya transfer aracı FTP’dir. SSH kullanarak hem ftp kolaylığında dosya transferi yapılabilir; hem de transfer edilen dosya şifrelenerek meraklı gözlerden korunmuş olur. SSH ile dosya transferinde temel iki seçenek var; biri SCP(secure Copy) diğeri de Sftp(Secure FTP). Temel bazı farklılıklar dışında her iki yöntem ile yapılabilecekler aynıdır.

 

SCP Kullanımı

scp kullanici_adi@sunucu1:dosya kullanici2@sunucu2:dosya

 

Örnek; a makinesinden test.exe dosyasını be makinesinin /usr/tmp dizinine kopyalamak için,

huzeyfe@a$ scp test.exe huzeyfe@b:/usr/tmp/

 

Sftp Kullanımı

sftp huzeyfe@test.enderunix.org

 
Connecting to test.enderunix.org...
Password:

sftp> get ev

 
Fetching /usr/home/huzeyfe/ev to ev
Cannot download non-regular file: /usr/home/huzeyfe/ev

Sftp> help
...
...

 


Not: Sftp ile sadece binary modda transfer yapılabilir


SSH Sunucu Konfigürasyonu


SSH Sunucuyu farklı porttan Çalıştırmak

İstemci tarafında farklı porttan bağlanmayı gördük şimdide sunucu tarafında SSH sununucumuzun farklı porttan hizmet vermesi için gerekli olan işlemlere bakalım. OpenSSH’ın kullandığı yapılandırma dosyaları /etc/ssh/ dizininde bulunur(başka Linux/UNIX versiyonlarında başka dizinlerde bulunabilir)

nano /etc/ssh/sshd_config

 

# cd /etc/ssh
#ls -l
-rw-r--r--   1 root    root       1167 Eyl 17 2003 ssh_config
-rw-------   1 root    root       2474 Eyl 17 2003 sshd_config
....

 

SSH Bağlantısı


Sunucu için ayarlama yapacağımıza gore inceleyeceğimiz dosya sshd_config dır. Herhangi bir editörle bu dosyayı açarak #Port 22 satırını bulunuz ve bunun önündeki # karekterini kaldırarak 22 yerine de istediğiniz port numarasını yazınız. Bunları yaptıktan sonra da SSH sunucusunu yeniden başlatmayı unutmayınız Red Hat tabanlı sistemlerde bunu #/etc/init.d/sshd restart komutu ile yapabilirsiniz. sshd_config dosyası bize bundan daha fazlasını sunar. sshd_config dosyasındaki tüm seçenekleri ve yapılandırma ayarlarını görebilmek için

# man sshd_config

komutunu vermeniz yeterlidir.

Debian 9 için Örnek Yapı:

SSH BağlantısıSSH Bağlantısı

 

Edit the sshd_config file, vi /etc/ssh/sshd_config and add/or change, if necessary, the following parameters:

          # This is ssh server systemwide configuration file.

          Port 22
          ListenAddress 192.168.1.1
          HostKey /etc/ssh/ssh_host_key
          ServerKeyBits 1024
          LoginGraceTime 600
          KeyRegenerationInterval 3600
          PermitRootLogin no
          IgnoreRhosts yes
          IgnoreUserKnownHosts yes
          StrictModes yes
          X11Forwarding no
          PrintMotd yes
          SyslogFacility AUTH
          LogLevel INFO
          RhostsAuthentication no
          RhostsRSAAuthentication no
          RSAAuthentication yes
          PasswordAuthentication yes
          PermitEmptyPasswords no
          AllowUsers admin
          

 

This tells sshd_config file to set itself up for this particular configuration setup with:

Port 22

The option Port specifies on which port number ssh daemon listens for incoming connections. The default port is 22.

ListenAddress 192.168.1.1

hangi ip üzerinden bağlantı kabul edeceğini gösterir. Güvenlik arttırmak için belli ip lere izin verilebilir. Varsayılan olarak s 0.0.0.0 dır

HostKey /etc/ssh/ssh_host_key

The option HostKey specifies the location containing the private host key.

ServerKeyBits 1024

The option ServerKeyBits specifies how many bits to use in the server key. These bits are used when the daemon starts to generate its RSA key.

LoginGraceTime 600

The option LoginGraceTime specifies how long in seconds after a connection request the server will wait before disconnecting if the user has not successfully logged in.

KeyRegenerationInterval 3600

The option KeyRegenerationInterval specifies how long in seconds the server should wait before automatically regenerated its key. This is a security feature to prevent decrypting captured sessions.

PermitRootLogin no

Root olarak sisteme giriş iznini değiştirebileceğiniz yapılandırma satırı 

PermitRootLogin yes

YES yaparak root kullanıcısının sisteme ssh üzerinden bağlanmasını, no yaparak da bağlanamamasını sağlayabilirsiniz.

IgnoreRhosts yes

The option IgnoreRhosts specifies whether rhosts or shosts files should not be used in authentication. For security reasons it is recommended to no use rhosts or shosts files for authentication.

IgnoreUserKnownHosts yes

The option IgnoreUserKnownHosts specifies whether the ssh daemon should ignore the user's $HOME/.ssh/known_hosts during RhostsRSAAuthentication.

StrictModes yes

The option StrictModes specifies whether ssh should check user's permissions in their home directory and rhosts files before accepting login. This option must always be set to yes because sometimes users may accidentally leave their directory or files world-writable.

X11Forwarding no

The option X11Forwarding specifies whether X11 forwarding should be enabled or not on this server. Since we setup a server without GUI installed on it, we can safely turn this option off.

PrintMotd yes
Ek olarak OpenSSH’da kullanıcı sisteme girdikten sonra message of the day(motd) ile bilgilendirme yapılır. Bunu kapamak Printmotd ile yapılabilir.
Printmotd no

The option PrintMotd specifies whether the ssh daemon should print the contents of the /etc/motd file when a user logs in interactively. The /etc/motd file is also known as the message of the day.

SyslogFacility AUTH

The option SyslogFacility specifies the facility code used when logging messages from sshd. The facility specifies the subsystem that produced the message--in our case, AUTH.

LogLevel INFO

The option LogLevel specifies the level that is used when logging messages from sshd. INFO is a good choice. See the man page for sshd for more information on other possibilities.

RhostsAuthentication no

The option RhostsAuthentication specifies whether sshd can try to use rhosts based authentication. Because rhosts authentication is insecure you shouldn't use this option.

RhostsRSAAuthentication no

The option RhostsRSAAuthentication specifies whether to try rhosts authentication in concert with RSA host authentication.

RSAAuthentication yes

The option RSAAuthentication specifies whether to try RSA authentication. This option must be set to yes for better security in your sessions. RSA use public and private key pairs created with the ssh-keygen1utility for authentication purposes.

PasswordAuthentication yes

Şifre bazlı güvenliği sağlar. Daha güvenli bağlantı için mutlaka yes olarak seçilmelidir.

PermitEmptyPasswords no

 

Hesaplara boş şifre ile de giriş yapılabilmesine izin verir. Eğer otomatik yedekleme yapıyorsanız yes işe yarayabilir.

AllowUsers admin

 Bu tanımlama ile bu ssh sunucusuna sadece yukarıda ismi yazılan kullanıcıların girebilmesini sağlamış oldu.

AllowUsers Huzeyfe, ismail, murat

 Bunun için kullanmamız gereken seçenek AllowUsers ‘dır. Burada kullanıcı adı yerine * ? şeklinde joker karekterler de kullanabiliriz. Mesela sadece son üç harfi ray olan kullanıcıların bağlanmasını sağlamak için

AllowUsers *ray

Şeklinde bir tanımlama yapabiliriz. Bu durumda Giray, nuray, firay ray kullanıcıları SSH sunucuya bağlanabilecektir.

 

  public key aracılığı ile bağlanmayı kapatmak için

PubkeyAuthentication no

 

 Grup yasaklaması için ;

DenyGroups root bin admin

Kullanıcı yasaklaması için ;

DenyUsers cin ali

Allowusers opsiyonunda geçerli olan "wildcard(* ? )"kullanımı burada da geçerlidir.

SSH sunucuya bağlanan kullanıcıya sistemle ilgili uyarı amaçlı bilgi mesajı gösterilebilir. Bunun için OpenSSH özel bir dosyada metni kullanıcıya
gösterme olanağı sunar.

Banner /usr/local/etc/warning.txt


SSH Ayarlarını Yaptıktan Sonra SSH'ı Yeniden Başlatmak İçin

/etc/init.d/ssh restart

  veya

service sshd restart

yada

systemctl reload sshd

 

SSH Anahtarını güncellemek için

sudo ssh-keygen -f "/home/ret/.ssh/known_hosts"

 

SSH ile ileri seviye Uygulamalar

 

Anahtar ile Kimlik dogrulama

SSH, kullanici adi/parola ikilisi haricinde şifreli anahtarlar aracılığı ile de kimlik kontrolü yapabilir.
 

public key authentication


Anahtarlar sifreleme dünyasindaki kimliklerimizdir. Kimligimiz 2 anahtardan olusur; biri açik anahtarimiz -ki bunu herkesle paylasiriz-. Digeri de gizli
anahtarimiz bunu sadece biz biliriz.


Anahtar ile kimlik doğrulama adımları;


    1. ssh istemcisi sunucuya xxx kullanici adi ile baglanmak istedigini belirtti
    2. sunucu istemciden gelen istegi alir ve istemcinin kendini kanitlamasi icin challenge mesaji gonderir
    3. istemci challange olarak gizli anahtarini ve gelen challange verisini kullanarak sunucuya cevap döner
    4. sunucu kendi tarafinda gelen sifreyi karsilastirarak kullaniciya giris hakki tanir ya da reddeder.


NOT:Burada dikkat edilmesi gerken nokta bu iletisimde arada ne açik anahtar ne de gizli anahtar geçmediğidir.

SSH istemcisinde anahtarlari olusturmak

ssh anahtar çiftini olusturmak için OpenSSH ile birlikte gelen ssh-keygen programi kullanilir.
RSA veya DSA tipinde seçim yapilmasi istenir, -t ile seçim yapilir.
 

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/huzeyfe/.ssh/id_rsa):
Created directory '/home/huzeyfe/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/huzeyfe/.ssh/id_rsa.
Your public key has been saved in /home/huzeyfe/.ssh/id_rsa.pub.
The key fingerprint is:
58:af:43:fd:b9:ba:26:d3:38:21:45:5d:dd:ac:d4:de huzeyfe@home-fw.my.domain

 

ssh-keygen sonucu asagidaki dosyalar olusur.

 ls ~/.ssh

id_rsa     id_rsa.pub

 

Açik anahtari sunucuya aktarmak için güvenli bir seçim yapilmalidir bunun için scp kullanilabilir.
Anahtar kullanarak bağlanılmak istenen hostta ~/.ssh/authorized_keys dosyası oluşturularak , istemcinin id_rsa.pub dosyasinin içerigi aktarilmalidir.
Aktarımlar tamamlandıktan sonra bağlanılmak istenilen SSH sunucuya anahtarlar aracılığı ile bağlanılabilir

$ssh test.enderunix.org
..
huzeyfe@test.enderunix$
 

Parolasiz ssh Erişimleri


$chmod 600 ~/.ssh/id_rsa
Burası önemli, bu dosya başkaları tarafından okunabilir olursa ssh  bağlanmayı reddecektir.
Örnek olarak bu dosyanın haklarını tum kullanıcılar tarafındanokunabilir hale getirip bağlanmaya çalışalım;
$ chmod 755 ~/.ssh/id_rsa
$ ssh test.enderunix.org
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!                   @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/home/huzeyfe/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/huzeyfe/.ssh/id_rsa
Enter passphrase for key '/home/huzeyfe/.ssh/id_rsa':

NOT:SCP ve sftp kullanırkende parolası(anahtarlar ile)erisim sağlanır.

Konfigürasyon dosyası kontrolü  

sshd –t

 
Komutu ile sshd_config dosyasındaki yanlış yazımlar control edilebilir.

SSH Port Forwarding

Forwarding bir tür tünnelleme olarak düşünülebilir. Yapılan iş bir protokolu başka bir protokol aracılığı kullanmaktır. Genellikle yapılan, iletişimde
sifreleme altyapısına sahip olmayan protokollerin(pop/imap/smtp vs) şifreleme kullanan bir protokol aracılığı ile güvenli bir şekilde kullanımıdır.
 

Yerel Yönlendirme(local forwarding)

Örnekleri POP3 protokolu üzerinden yürütecek olursak, POP3 TCP/110 uzerinden çalışır. Istemci ile POP sunucu arasindaki iletişim clear text(sifrelenmemis ) olarak gerceklesir. Uzaktaki POP sunucu ile istemci arasindaki trafigi SSH port forwarding kullanarak şifreleyebiliriz. Nasil mi?
Yerel makinemizde 1024-65535 arası bir port seçelim, mesela 5000 olsun. POP istemcimizde kullandigimiz pop sunucuyu localhost ve portunu da
5000 olacak sekilde degistirelim. Sonra ssh ile asagıdaki yönlendirmeyi yapalım

 

SSH Bağlantısı

$ssh –L5000:localhost:110 mail_sunucu(POP)

Bu komut ile yapılanlar;

Mail_sunucu makinesine gecerli bir hesap ile ssh baglantısı yapılmış olur ve localhost’un 5000. portu mail_sunucu makinesinin 110. portuna SSH
üzerinden tunnelleme yapilmiş olur. Böylece POP istemcimizin ayarını localhost ve portunu 5000 olarak değiştirdiğimiz zaman mail sunucu ile
aramızdaki trafik SSH araciligi ile şifrelenmiş olur.


Adım adım inceleyecek olursak ;
   1. POP istemcisi yerel agdaki 5000. porta baglanıyor
   2. Yerel agdaki ssh istemcisi 5000. porta gelen veriyi şifreliyor ve ssh
       aracılığı ile mail_sunucu makinesine gönderiyor.
   3. Mail_sunucu makinesi ssh aracılığı ile gelen veriyi çözerek 110.porta
       iletiyor
   4. Mail_sunucu makinesindeki POP sunucu isteği cevaplıyor ve paket
       aynı şekilde ters yönden istemciye ulaşıyor.
 

Burada dikkat edilmesi gereken yapılan forwarding işleminde sadece ssh istemcisinin çalıştığı makinenin tunneling yapabileceğidir. Host:Localhost,
port:5000 bind işlemi olur. Yani forwarding işleminde ssh istemcisi localhost’u kullanır. Bu da demektir ki bu tunellemeyi sadece bu makine uzerindeki POP3 istemcisi kullanabilir.

OpenSSH bu kısıtlamayı kaldıracak bir seçenek içerir. -g ile dışarıdaki  makinelerin de bu tunellemeyi kullanabilmesine izin verir. Fakat bu secenek varsayılan kurulumda aktif olarak gelmez.
 

$ssh –g -L2001:localhost:110 Server


Remote forwarding

Local yönlendirmeden farkı işlemlerin ters olmasıdır yani tunelleme işlemini sunucu tarafında yapılıyor.
 

$ssh –R5000:localhost:110 istemci_makine


Bu komutla istemci makinin 5000. portu ile sunucu makine arasında bir tunnel oluşturulmuş olur. Istemci makinede gecerli bir ssh hesabının olması
gerekir.

Ek notlar:
    • Genllikle ssh izni ile, firewalldan izin verilmeyen diger portlar/protokollerin kullanimi icin kullanılır.
    • ftp protokolu icin sadece control baglantısını yanı kullanıcı adı ve parola bilgilerini koruma altına alabilir. Arada gidip gelen veriyi tünellemez... (OpenSSH’daşimdilik)
    • ssh ile sadece tcp tabanlı protokoller tünnellenebilir. Udp tabanlı protokoller ya da ip tabanlı olmayan protokoller tünellenemez. Bu da ssh’in gercek VPN baglantılar karşısında bir dezavantajıdır.

Dynamic port forwarding

OpenSSH Dynamic Port forwarding desteği ile bir nevi socks proxy vazigesi görür. Socks RFC-1928 ile tanımlanmış basit ama güçlü bir TCP protokoldür.
Socks 5 ile UDP desteği de eklenmiştir.

$ssh –D 8080 ssh.enderunix.org

Bundan sonra kullandığım browserin proxy ayarlarından 8080 olacak şekilde yapılandırırsam herhangi bir kısıtlama olmaksızın ssh.enderunix.org makinesi aracılığı ile özgürce gezebilirim.


Scponly Kullanımı

Scponly sisteme login izni olmayan kullanıcılara sistemden dosya alışverişine izin veren bir program. /etc/passwd dosyasında kullanıcının shell’i
/bin/scponly olarak ayarlanir.

Ayrıca SCPonly detaylı loglama özelliklerine sahiptir. Hangi IP’den hangi zamanda, hangi kullanici adi ile bağlanıldı gibi bilgileri syslog’a gönderebilir.

Kullanıcıları kendi ev dizinlerine hapsederek diğer kullanıcıların dizin ve dosyalarını görmesini engeller.(Chroot)

Kurulum

http://www.sublimation.org/scponly/ adresinden son sürüm scponly paketi indirilerek klasik unix kurulum prosedürü uygulanır.

FreeBSD için ;

#cd /usr/ports/shells/scponly
#make install


SSH sunucu güvenliğini artırıcı önlemler

Son zamanlarda SSH protokolüne karşı yapılan saldırılar artmıştır. Eğer bir SSH sunucu çalıştırıyorsanız sistem loglarında sunucunuzdaki SSH servisine
yapılan atakları görebilirsiniz. Bu ataklar genellikle SSH sunucudaki zayıf parolalarla korunmuş sistem hesaplarını ele geçirmek için yapılır. Bu tip
ataklara birçok farklı şekilde önlem alınabilir. Kompleks çözümlere kaçmadan yapılacak birkaç basit ayarlar bu tip saldırıların %90’na karşı doğal koruma
sağlanmış olur. Bu doğal korumalar;


    •   Kullandığınız OpenSSH sürümünün güncel olmasına özen gösterin.
    •   Çok özel bir gereksinimiz yoksa SSH sunucunun portunu 22 den farklı bir porta alın.Mesela doğum tarihiniz.
    •   Sisteme erişim yetkisi vermek istediğiniz kullanıcıları yapılandırma dosyasında belirtin.
    •   Sisteme root olarak erişim izni vermeyin
    •   Mümkünse sisteme parola ile girişi yasaklayıp erişimleri anahtarlara aracılığı ile yapmaya çalışın.
    •   SSH erişimini tüm internete açmayın. Varsa sabit bağlantınız sadece belirli Iplere erişim açın. Herhangi bir firewall kullanarak ya da
        hosts.allow/hosts.deny dosyaları kullanarak yapılabilir.

SSH Bağlantısı

Using iptables to allow only specific hosts to connect

An alternative to TCP wrappers (although you can use both at the same time) is limiting SSH access with iptables. Here's a simple example of how you can allow only a specific host to connect to your SSH service:

~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT

And make sure no one else has access to SSH service:

~# iptables -A INPUT -p tcp --dport 22 -j DROP

Save your new rules and you're all done.

SSH time-lock tricks

You can also use different iptables parameters to limit connections to the SSH service for specific time periods. You can use the /second, /minute, /hour, or /day switch in any of the following examples.

In the first example, if a user enters the wrong password, access to the SSH service is blocked for one minute, and the user gets only one login try per minute from that moment on:

~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP

In a second example, iptables are set to allow only host 193.180.177.13 to connect to the SSH service. After three failed login tries, iptables allows the host only one login try per minute:

~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP

Conclusion

These features are not hard to configure, but they are very powerful techniques for securing your SSH service. It's a small price to pay for a good night's sleep.

SSH Bağlantısı

Kaynaklar:


 

 
 

 

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...