Merhaba arkadaşlar,

Bu yazımda sislere Google Authenticator yardımıyla Linux sunucularınıza nasıl çift katmanlı doğrulama (Two step authentication) seçeneğiyle oturum açmayı anlatmaya çalışacağım. Öncelikle;

Çift katmanlı doğrulama nedir ?


Bildiğiniz gibi günümüzde bankaların hemen hepsi çift katmanlı doğrulama işlemi gerçekleştiriyor. Öncelikle şifrenizle bankanın panelinde oturum açıyorsunuz (ilk katman), daha sonra tarafınıza bir SMS gönderiliyor (ikinci katman) ve ilgili SMS'i girdikten sonra bilgilerin size ait olduğu teyit edilip, oturum açtırılıyor. Bunun temel amacı şifrenizi bilen herhangi birinin sizin adınıza oturum açmasını önlemek.

Google'da yıllar önce bu işe el atarak yayımlamış olduğu uygulamayla Google hesaplarına giriş esnasında dileyen kullanıcılarına çift katmanlı oturum açma şansı tanımıştı. Facebook'da geçtiğimiz aylarda benzer bir duyuru yayınlayarak dileyenlerin çift katmanlı oturum seçeneğine geçebileceklerini iletmişti.

Peki sunucumuzda neden çift katmanlı oturum kullanmalıyız ?



Normalde sunucu yönetimi yapan arkadaşların çoğu keylogger, trojan vs.. benzeri terimlere aşina olup, ne olduğunu bilen insanlardır dolayısıyla buna karşı önlemleri vardır ama kimi zaman bilgisayarlarımızı güvendiğimiz 3. kişilerle paylaşma durumumuz oluyor eş, arkadaş, dost gibi vs.. bu tür durumlarda onların atacağı yanlış bir adım neticesinde bilgisayarınıza zararlı bir yazılım yüklenebilir veya biri şifrenizi girerken görüp, daha sonra başka bir yerden giriş yapabilir. Bunu önlemek amacıyla kullanmalıyız.

Bankalarda bazen SMS gelmiyor, gelmezse sisteme giremeyecek miyiz ?



Öncelikle şunu belirteyim sistem SMS şeklinde işlemiyor. Telefonunuzdaki uygulama her dakika değişen bir anahtar oluşturuyor ve bu anahtar aracılığıyla sunucunuza bağlanıyorsunuz. Dilerseniz sms gelmesini veya sesli arama talep edebiliyorsunuz.

Bu kadar ön bilgi verdiğimize göre artık kurulum işlemlerine geçebilir.

Öncelikle android telefonumuza Google Authenticator uygulamasını indiriyoruz.

Android cihazlar için https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en
Ios cihazlar için https://itunes.apple.com/au/app/google-authenticator/id388497605?mt=8

Gerekli kütüphanelerin Linux'a yüklenmesi



Centos için;
yum install gcc pam pam-devel make -y


Ubuntu için;
apt-get install libpam0g-dev




İlgili yüklemeyi gerçekleştirdikten sonra Google Authenticator Modülünü sisteme kuruyoruz.

Sitesine buradan ulaşabilirsiniz.

wget http://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2


Komutuyla dosyamızı Linux bilgisayarımıza çekip,

tar -xvf libpam-google-authenticator-1.0-source.tar.bz2


Komutuyla sıkıştırılmış klasörü açtıktan sonra,

cd libpam-google-authenticator-1.0


komutu yardımıyla uygulamamızın bulunduğu klasöre erişiyoruz.

Şimdi google Authenticator modülümüzü derlemeye sıra geldi.

make


Komutunu çalıştırıp, aşağıdaki gibi bir ekranın oluşmasını ve komutun işlemini bitirmesini bekliyoruz.



make install


Komutu yardımıyla da modülü yüklemeyip tamamlayıp, ayarlarını yapmak için komut satırına;

Modül ayarlarının yapılması



google-authenticator


yazıp, uygulamanın ayarlarını yapmaya başlıyoruz.

İlk sorduğu soru;
"Do you want authentication tokens to be time-based ?"

Burada y butonuna basıp, enter'a basıyoruz sormak istediği soru özetle "Zamana bağlı kimlik doğrulamasını kurmak istiyor musunuz ?"

Aşağıdakine benzer bir ekran karşımıza çıkacak.



Burada ilk belirtmiş olduğu bizim gizli anahtarımız (Your new secret key)
Diğeri doğrulama şifremiz (Your verification code)
Diğerleri ise acil durum doğrulama kodları (Your emergency scratch codes);

Burada Your emergency scratch codes kısmında verilmiş olan anahtarları, ileride bir sıkıntı yaşama ihtimalimize karşı bir yerde saklıyoruz.

En son sorduğu soru ise (Do you want me to update your "/root/.google_authenticator" file (y/n)) ilgili dosyanın düzenlemek isteyip, istemediğimizi öğrenmek istiyor. İlgili kodların tamamının bir yere yedeğini aldıysak y deyip, enter'a basıyoruz.

"Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks" Sorusunda ise özetle aynı doğrulama koduyla bağlantının önüne geçmek ister misiniz ? Bu durumda kod 30 saniyede bir yenilenecek ve mitm ataklarının önüne geçmiş olacaksınız.

y deyip, enter'a basıyoruz.

"By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so?"

Burada ise özetle kimi durumlarda saat, dakika farkından dolayı kimi durumlarda erişim problemi yaşanabiliyor. Modül defaultta +- 1:30 dakika şeklinde bunu ekliyor, dilerseniz bunu 4 dakikaya kadar çıkartabilirsiniz.

Bu soru için şimdilik bir değişiklik yapmayı düşünmüyoruz, dakika farkından sıkıntı yaşamanız durumunda buradaki değeri daha sonra arttırabilirsiniz şimdilik n butonuna basıp enter'a basıyoruz.

"If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting"

Burada yine özetle brute saldırılarına önlem almak ister misiniz diye soruyor. Defaultta 30 saniyede 3 yanlış denemeye izin veriyor. y butonuna basıp, enter'a basıyoruz ve modülümüzün ayarlarını tamamlamış oluyoruz.

Sıra geldi, SSH için Google Authenticator modülümüzü devreye almaya.

Modülün devreye alınması



Favori text editörünüzle (vi, nano vs..) /etc/pam.d/sshd dosyasını açıyoruz;

nano /etc/pam.d/sshd

auth required pam_google_authenticator.so
satırını aşağıdaki gibi ekliyoruz.



nano /etc/ssh/sshd_config


Komutu yardımıyla /etc/ssh/sshd_config dosyasını açıp ChallengeResponseAuthentication değerini bulup, no'dan yes'e çeviriyoruz ve ssh düzenlemelerimizi de tamamladığımız için yaptığımız değişikliklerin devreye alınabilmesi için servisi restart ediyoruz.

service sshd restart


ben CentOS kullandığım için sshd servisini yeniden başlatmak için ilgili komutu kullandım, siz kullanmış olduğunuz dağıtıma göre komutu değiştirebilirsiniz. Ek olarak restart ettikten sonra tüm işlemler bitmeden ve işlemlerin sağlıklı bir şekilde çalıştığından emin olmadan mevcut kurulum yapmış olduğunuz terminal penceresini kapatmayınız. Problem yaşadığınızda /etc/ssh/sshd_config ve /etc/pam.d/sshd dosyasında yapmış olduğunuz değişiklikleri geri alıp, sıkıntıyı önleyebilirsiniz.

Sıra geldi telefonumuzda ilgili ayarlamaları yapmaya.

Telefon'da yapılacak ayarlar


Telefonunuzda ilgili uygulamayı açtıktan sonra, Menü > Hesap oluştur butonuna basıyoruz.



Gelen ekranda sağlanan anahtarı girin butonuna basıp;

Hesap adını (dilediğiniz gibi Örn: CentOS Login) ve uygulama kurulumu sırasında not almış olduğumuz secret key'i ekrana aşağıdaki gibi yazıyoruz.



Benim secret kodum aslında değişmedi, dökümanı yazarken tekrar ilgili ekrana girmem gerektiğinden dolayı yeni kodum MPFPAGXJYR4MQYMO oldu ve tekrar screen shot almaya üşendim :) siz ilk ekran görüntüsünde yer alan 72KMFZIR45HSLA7N olan yerdeki kodu yazmanız gerekmekte

En sonunda aşağıdakine benzer bir sonuç elde etmemiz gerekiyor.



Artık sunucumuza giriş yapmayı denediğimizde aşağıdaki gibi şifrenin yanında ek olarak bizden telefonda üretilmiş olan kodu da girmemizi isteyecek.

Sonuç




Takıldığınız bir yer olursa, yorumlar aracılığıyla sorabilirsiniz.

Bu yazının tamamlanması tam olarak 1 saat 21 dakika sürmüştür, makalenin uygulanması ise internet hızına bağlı olarak orta düzeydeki bir kullanıcı için sadece 8 dakika sürmektedir. Benim secret key'i bu kadar kolay paylaşmamdaki sebep, ilgili kurulumu local serverıma yapmam, siz kesinlikle secret key değerini kimseyle paylaşmamanız gerekmekte.