Ubuntu 18.04 Üzerinde Çok Faktörlü Kimlik Doğrulama (MFA) Nasıl Yapılandırılır?
Giriş: Çok Faktörlü Kimlik Doğrulama Neden Önemli?
Günümüzün dijital dünyasında siber güvenlik tehditleri her geçen gün artmakta ve daha karmaşık hale gelmektedir. Sunucular, kişisel veriler ve kritik iş süreçleri için merkezi depolama alanları olarak hizmet verdiğinden, bu sistemlerin güvenliği büyük önem taşır. Geleneksel olarak, bir sisteme erişim genellikle tek bir faktör olan kullanıcı adı ve parola kombinasyonu ile sağlanır. Ancak, parolaların çalınması, tahmin edilmesi veya zayıf parola politikaları nedeniyle bu tek faktörlü kimlik doğrulama yöntemi ciddi güvenlik açıkları barındırır. İşte bu noktada Çok Faktörlü Kimlik Doğrulama (MFA) devreye girer.
MFA, bir kullanıcının kimliğini doğrulamak için iki veya daha fazla bağımsız kimlik doğrulama faktörünün kullanılmasını gerektiren bir güvenlik mekanizmasıdır. Bu faktörler genellikle üç kategoriye ayrılır:
1. Bildikleriniz (Something you know): Parola, PIN kodu, güvenlik sorusu yanıtı gibi bilgiler.
2. Sahip Olduklarınız (Something you have): Akıllı telefon, donanım token’ı, akıllı kart gibi fiziksel cihazlar.
3. Olduğunuz Şeyler (Something you are): Parmak izi, yüz tanıma, retina taraması gibi biyometrik veriler.
MFA uygulandığında, bir saldırganın sadece parolayı ele geçirmesi sisteme erişim için yeterli olmaz. Saldırganın aynı zamanda ikinci bir faktörü de (örneğin, kullanıcının telefonunu) ele geçirmesi gerekir ki bu da saldırı yüzeyini önemli ölçüde daraltır ve yetkisiz erişim riskini minimize eder. Özellikle Ubuntu gibi sunucu işletim sistemlerinde, SSH (Secure Shell) erişiminin MFA ile güçlendirilmesi, sunucunun güvenliğini kritik düzeyde artırır. Bu makalede, Ubuntu 18.04 LTS üzerinde Google Authenticator PAM (Takılabilir Kimlik Doğrulama Modülleri) modülü kullanarak SSH erişimi için MFA’yı nasıl yapılandıracağınızı adım adım açıklayacağız. Bu sayede, sunucularınıza yetkisiz erişimi engellemek için güçlü bir savunma katmanı oluşturmuş olacaksınız.
MFA İçin Önkoşullar ve Hazırlıklar
MFA yapılandırmasına başlamadan önce, sorunsuz bir kurulum süreci için bazı önkoşulların ve hazırlıkların tamamlandığından emin olmanız gerekmektedir.
Ubuntu 18.04 Sunucusu
* Üzerinde çalışacağınız bir Ubuntu 18.04 LTS (Long Term Support) sunucusuna sahip olmalısınız. Bu rehber özellikle 18.04 için yazılmış olsa da, adımlar genellikle Ubuntu’nun daha yeni sürümleri (20.04, 22.04) için de benzerlik gösterir.
SSH Erişimi
* Sunucunuza SSH üzerinden erişiminizin olması gerekmektedir. Bu, yapılandırma adımlarını uzaktan uygulamanızı sağlayacaktır.
* Önemli Not: MFA yapılandırmasını yaparken, mevcut SSH oturumunuzu asla kapatmayın. Herhangi bir yanlış yapılandırma durumunda, mevcut oturumunuz üzerinden düzeltme yapma imkanınız olacaktır. Yeni bir terminal penceresi açarak test etmeniz şiddetle tavsiye edilir.
Yönetici (sudo) Yetkileri
* Yapılandırma adımlarını gerçekleştirmek için sudo yetkilerine sahip bir kullanıcı hesabınızın olması gerekmektedir. Çoğu sunucu kurulumunda bu varsayılan olarak mevcuttur.
Güncel Sistem
* Sisteminizin güncel olduğundan emin olun. Bu, herhangi bir güvenlik açığını kapatır ve paket bağımlılıklarının doğru çalışmasını sağlar.
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
Google Authenticator (PAM Modülü)
* Bu rehberde, zaman tabanlı tek kullanımlık şifreler (TOTP) oluşturan Google Authenticator PAM modülünü kullanacağız. Bu modül, Ubuntu’nun standart depolarında mevcuttur.
Zaman Senkronizasyonu
* MFA’nın zaman tabanlı token’larla (TOTP) doğru çalışabilmesi için sunucunuzun ve mobil cihazınızın zamanının doğru bir şekilde senkronize edilmiş olması kritik öneme sahiptir. Küçük zaman farklılıkları bile kimlik doğrulama hatalarına yol açabilir.
* Ubuntu’da zaman senkronizasyonu için ntp veya systemd-timesyncd kullanılabilir. Ubuntu 18.04 varsayılan olarak systemd-timesyncd kullanır. Doğru çalıştığından emin olmak için:
timedatectl status
Eğer NTP synchronized: yes ve System clock synchronized: yes görüyorsanız, zaman senkronizasyonunuz doğru çalışıyor demektir. Değilse, sudo timedatectl set-ntp true komutu ile etkinleştirebilirsiniz.
Bu hazırlık adımlarını tamamladıktan sonra, Çok Faktörlü Kimlik Doğrulama yapılandırmasına geçmeye hazırız.
Google Authenticator PAM Modülünün Kurulumu
MFA’yı Ubuntu sunucumuzda etkinleştirmek için ilk adım, gerekli PAM modülünü kurmaktır. Google Authenticator, Linux sistemlerinde yaygın olarak kullanılan ve güvenilir bir çözümdür.
Gerekli Paketlerin Yüklenmesi
Google Authenticator PAM modülü, libpam-google-authenticator paketi içinde yer alır. Bu paketi yüklemek için aşağıdaki komutu kullanın:
sudo apt install libpam-google-authenticator -y
Bu komut, paketi ve bağımlılıklarını sisteminize kuracaktır. Kurulum tamamlandıktan sonra, modül artık PAM çerçevesi tarafından kullanılabilir hale gelecektir.
Kullanıcı Bazında MFA Yapılandırması
libpam-google-authenticator modülü yüklendikten sonra, her bir kullanıcı için ayrı ayrı MFA yapılandırması yapılması gerekmektedir. Bu adımı, MFA ile korunmasını istediğiniz her kullanıcı için kendi kullanıcı hesabında gerçekleştirmeniz önemlidir.
Örnek olarak, kullaniciadi isimli bir kullanıcı için MFA yapılandırması yapalım. Öncelikle, kullaniciadi olarak sunucuya SSH ile bağlanın veya mevcut oturumunuzda bu kullanıcıya geçiş yapın (su - kullaniciadi).
google-authenticator
Bu komutu çalıştırdığınızda, size bir dizi soru sorulacak ve MFA yapılandırma süreci başlayacaktır. Sorular ve önerilen yanıtları aşağıda açıklanmıştır:
1. Do you want authentication tokens to be time-based (y/n)?
* Yanıt: y (Evet)
* Açıklama: Bu, zaman tabanlı tek kullanımlık şifreler (TOTP) kullanacağımız anlamına gelir. Mobil cihazınızdaki Google Authenticator uygulaması her 30 saniyede bir yeni bir kod üretecektir. Bu, en yaygın ve güvenli MFA yöntemidir.
2. Bu adımdan sonra, terminalinizde bir QR kodu, “secret key” (gizli anahtar) ve beş adet “emergency scratch codes” (acil durum kurtarma kodları) görüntülenecektir.
* QR Kod: Bu kodu, mobil cihazınızdaki Google Authenticator, Authy veya Microsoft Authenticator gibi bir uygulama ile taramanız gerekecektir. Uygulama, bu gizli anahtarı kullanarak zaman tabanlı kodlar üretmeye başlayacaktır.
* Secret Key: QR kodunu tarayamıyorsanız veya manuel ekleme yapmanız gerekiyorsa bu anahtarı kullanabilirsiniz. Uygulamaya manuel olarak girerek de MFA’yı etkinleştirebilirsiniz.
* Emergency Scratch Codes: Bu kodlar, mobil cihazınızı kaybettiğinizde veya MFA kodlarına erişemediğinizde sisteme giriş yapmanızı sağlayan tek kullanımlık yedek kodlardır. Bu kodları çok güvenli bir yerde saklayın ve kimseyle paylaşmayın. Her kod bir kez kullanılabilir.
3. Do you want to update the “/home/kullaniciadi/.google_authenticator” file (y/n)?
* Yanıt: y (Evet)
* Açıklama: Bu, google-authenticator komutunun oluşturduğu gizli anahtarı ve diğer yapılandırma bilgilerini kullanıcının ev dizinindeki .google_authenticator dosyasına kaydetmesini sağlar. Bu dosya, PAM modülü tarafından kimlik doğrulama sırasında kullanılacaktır. Dosyanın izinleri otomatik olarak 0400 olarak ayarlanır, yani sadece kullanıcı tarafından okunabilir. Bu, güvenliği sağlamak için kritik öneme sahiptir.
4. Do you want to disallow multiple uses of the same authentication token? This restricts a token to a single use. (y/n)?
* Yanıt: y (Evet)
* Açıklama: Bu seçenek, bir token’ın (doğrulama kodunun) yalnızca bir kez kullanılmasını sağlar. Bu, “replay attack” adı verilen saldırıları önlemeye yardımcı olur. Bir saldırgan geçerli bir kodu ele geçirse bile, o kod bir kez kullanıldıktan sonra tekrar kullanılamayacağı için erişim sağlayamaz.
5. By default, tokens are good for 30 seconds. In order to compensate for possible time-sync problems between and the server, we allow an extra token before and after the current time. This allows for a total of 3 tokens (90 seconds) to be valid at any given time. Do you want to expand the window of time in which a token is accepted to approximately 4 minutes (y/n)?
* Yanıt: n (Hayır)
* Açıklama: Bu seçenek, token’ın geçerlilik süresini artırır. Varsayılan olarak, bir token geçerli zamandan 30 saniye önce ve 30 saniye sonra da geçerli kabul edilir (toplam 90 saniye). Bu pencereyi 4 dakikaya çıkarmak, zaman senkronizasyonu sorunlarını telafi edebilir ancak güvenlik seviyesini bir miktar düşürebilir. Zaman senkronizasyonunuzun doğru çalıştığından eminseniz (timedatectl status kontrolü), n yanıtını vermek daha güvenlidir.
6. Do you want to enable rate-limiting for the authentication module? By default, this limits attackers to 3 login attempts every 30s. (y/n)?
* Yanıt: y (Evet)
* Açıklama: Bu seçenek, bir kimlik doğrulama modülüne yapılan deneme sayısını sınırlar. Varsayılan olarak, 30 saniye içinde en fazla 3 denemeye izin verilir. Bu, kaba kuvvet saldırılarına (brute-force attacks) karşı ek bir koruma sağlar ve saldırganın çok sayıda kodu hızlı bir şekilde denemesini engeller.
Bu adımları tamamladıktan sonra, kullanıcının ev dizininde .google_authenticator dosyası oluşturulacak ve mobil cihazınızda bu kullanıcı için MFA etkinleştirilmiş olacaktır. Bu adımı, MFA ile korunmasını istediğiniz her kullanıcı için tekrarlamanız gerektiğini unutmayın.
PAM Yapılandırmasının Düzenlenmesi
Kullanıcı bazında MFA yapılandırması tamamlandıktan sonra, sistemin PAM (Takılabilir Kimlik Doğrulama Modülleri) yapılandırmasını düzenlememiz gerekmektedir. Bu, SSH servisine bağlanmaya çalışıldığında Google Authenticator modülünün devreye girmesini sağlayacaktır.
PAM yapılandırma dosyaları /etc/pam.d/ dizininde bulunur. SSH için yapılandırma dosyası /etc/pam.d/sshd‘dir.
/etc/pam.d/sshd Dosyasının Düzenlenmesi
Bu dosyanın bir yedeğini alarak işe başlamanız şiddetle tavsiye edilir.
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
sudo nano /etc/pam.d/sshd
Dosyayı açtıktan sonra, aşağıdaki satırı dosyanın en üstüne veya auth required pam_unix.so satırından hemen önce eklemeniz gerekmektedir:
auth required pam_google_authenticator.so
Bu satırın eklenmesiyle dosyanızın içeriği yaklaşık olarak şöyle görünecektir (yorum satırları ve diğer modüller farklılık gösterebilir):
# /etc/pam.d/sshd: The PAM configuration file for the OpenSSH daemon.
# This file is installed by the openssh-server package. Please
remember that this file is System V style, and you should avoid
adding any local stuff in it. For a more flexible approach,
please use pam.d/sshd-wrapper or pam.d/sshd-local.
@include common-auth
auth required pam_google_authenticator.so # Bu satırı ekleyin
@include common-account
@include common-session
@include common-password
Açıklama:
* auth: Bu bir kimlik doğrulama modülüdür.
* required: Bu modülün başarılı bir şekilde tamamlanması gerektiğini belirtir. Eğer pam_google_authenticator.so başarısız olursa (örneğin yanlış kod girilmesi), kimlik doğrulama işlemi hemen durdurulur ve başarısız kabul edilir.
* pam_google_authenticator.so: Yüklediğimiz Google Authenticator PAM modülüdür.
Opsiyonel: nullok Seçeneği
Eğer bazı kullanıcıların MFA kullanmasını zorunlu kılmak istemiyor ve MFA yapılandırması yapmamış kullanıcıların yine de parola ile giriş yapabilmesini istiyorsanız, nullok seçeneğini kullanabilirsiniz:
auth required pam_google_authenticator.so nullok
* nullok: Bu seçenek, kullanıcının .google_authenticator dosyası yoksa veya boşsa, bu modülün başarılı kabul edilmesini sağlar. Yani, MFA yapılandırması yapmamış kullanıcılar sadece parola ile giriş yapabilir. Ancak, bu durum güvenlik seviyesini düşürür ve genellikle tüm kullanıcılar için MFA’nın zorunlu tutulması tavsiye edilir. Eğer tüm kullanıcılar için MFA’yı zorunlu kılacaksanız, nullok kullanmayın. Bu rehberde zorunlu MFA yaklaşımını benimsiyoruz, bu yüzden nullok kullanmıyoruz.
Değişiklikleri kaydedin ve dosyayı kapatın (Ctrl+O, Enter, Ctrl+X).
/etc/pam.d/common-auth Dosyasının Düzenlenmesi (Daha Genel Bir Yaklaşım)
Bazı durumlarda, sshd yerine common-auth dosyasını düzenlemek daha genel bir yaklaşım olabilir. common-auth dosyası, birçok servisin (SSH, su, login vb.) ortak kimlik doğrulama ayarlarını içerir. Eğer MFA’yı sadece SSH ile sınırlamak istiyorsanız /etc/pam.d/sshd dosyasını düzenlemek yeterlidir. Ancak, MFA’yı tüm sistem genelinde (örneğin konsol girişi için de) uygulamak istiyorsanız common-auth dosyasını düzenleyebilirsiniz.
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak
sudo nano /etc/pam.d/common-auth
Dosyanın en üstüne veya auth required pam_unix.so satırından hemen önce aşağıdaki satırı ekleyin:
auth required pam_google_authenticator.so
Ancak, common-auth dosyasında required kullanmak, MFA yapılandırması olmayan kullanıcıların hiçbir şekilde giriş yapamamasına neden olur. Bu nedenle, common-auth dosyasında genellikle MFA’yı isteğe bağlı hale getirmek için [success=1 default=ignore] seçeneği kullanılır:
auth [success=1 default=ignore] pam_google_authenticator.so
* [success=1 default=ignore]: Bu, pam_google_authenticator.so modülü başarılı olursa (doğru kod girilirse) bir sonraki auth modülünü atla (success=1) ve diğer durumlarda (default) bu modülü yoksay (ignore) anlamına gelir. Bu, MFA’yı yapılandırmış kullanıcıların MFA ile giriş yapmasını sağlarken, yapılandırmamış kullanıcıların parola ile giriş yapmaya devam etmesini sağlar. Ancak, bu durum MFA’nın zorunlu olmadığı anlamına gelir ve güvenlik seviyesini düşürebilir.
Bu rehberde SSH için zorunlu MFA hedeflediğimizden, /etc/pam.d/sshd dosyasını düzenlemeyi ve auth required pam_google_authenticator.so satırını kullanmayı tercih ediyoruz.
SSH Servisinin Yeniden Yapılandırılması
PAM yapılandırmasını güncelledikten sonra, SSH servisine bu değişiklikleri uygulaması için bilgi vermemiz gerekmektedir. Bu, sshd_config dosyasında bazı ayarları düzenleyerek ve ardından SSH servisini yeniden başlatarak yapılır.
/etc/ssh/sshd_config Dosyasının Düzenlenmesi
SSH daemon’ının yapılandırma dosyasını düzenlememiz gerekiyor. Yine, bir yedek almanız tavsiye edilir.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
Dosyayı açtıktan sonra, aşağıdaki ayarları bulup değerlerini değiştirmemiz veya yoksa eklememiz gerekmektedir:
1. ChallengeResponseAuthentication: Bu seçeneği yes olarak ayarlayın. Bu, SSH sunucusunun kimlik doğrulama sırasında istemciden ek bilgiler (bizim durumumuzda MFA kodu) isteyebilmesini sağlar.
ChallengeResponseAuthentication yes
Bu satırın başında # varsa, yorum satırı olmaktan çıkarın.
2. UsePAM: Bu seçeneği yes olarak ayarlayın. Bu, SSH daemon’ının kimlik doğrulama için PAM’i kullanmasını sağlar. Bu genellikle varsayılan olarak yes‘tir, ancak kontrol etmekte fayda var.
UsePAM yes
3. AuthenticationMethods (Opsiyonel ama Önerilir): Bu seçenek, hangi kimlik doğrulama yöntemlerinin hangi sırayla kabul edileceğini belirtmenizi sağlar. MFA’yı zorunlu kılmak için bu ayarı kullanmak önemlidir.
* Eğer sadece parola ve MFA kullanmak istiyorsanız:
AuthenticationMethods keyboard-interactive
Veya daha açık bir şekilde:
AuthenticationMethods password,keyboard-interactive
Burada keyboard-interactive PAM modülleri aracılığıyla kimlik doğrulamayı ifade eder ki bizim durumumuzda hem parolayı hem de Google Authenticator kodunu içerir.
* Eğer SSH anahtarları ve MFA kullanmak istiyorsanız (daha güvenli bir yaklaşım):
AuthenticationMethods publickey,keyboard-interactive
Bu, kullanıcının önce SSH anahtarı ile kimlik doğrulaması yapmasını, ardından ikinci bir adım olarak MFA kodu girmesini gerektirecektir. Bu, parola kullanımını tamamen ortadan kaldırarak güvenliği daha da artırır.
Bu rehberde, parola ve MFA kombinasyonunu kullanacağımızı varsayarak AuthenticationMethods keyboard-interactive veya AuthenticationMethods password,keyboard-interactive kullanacağız. Eğer SSH anahtarı ile giriş yapıyorsanız ve MFA’yı SSH anahtarınıza eklemek istiyorsanız publickey,keyboard-interactive kullanmalısınız.
Örnek olarak, sshd_config dosyanızda bu ayarların olduğu kısım şöyle görünebilir:
# Change to yes to enable challenge-response authentication (beware of PAM)
ChallengeResponseAuthentication yes
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is disabled, PAM won't be used,
# and many other options will become ineffective.
UsePAM yes
# The default is to check if the user has a password in /etc/passwd
# and if so, require it. If not, the user is allowed to log in without
# a password. This can be overridden by the AuthenticationMethods option.
# AuthenticationMethods publickey,password
AuthenticationMethods password,keyboard-interactive
Değişiklikleri kaydedin ve dosyayı kapatın (Ctrl+O, Enter, Ctrl+X).
SSH Servisini Yeniden Başlatma
sshd_config dosyasındaki değişikliklerin etkili olması için SSH servisini yeniden başlatmanız gerekmektedir:
sudo systemctl restart sshd
ÇOK ÖNEMLİ UYARI: Bu komutu çalıştırmadan önce, mevcut SSH oturumunuzu ASLA kapatmayın. Eğer yapılandırmada bir hata yaptıysanız ve SSH servisi yeniden başlatıldıktan sonra yeni bağlantılar kabul etmezse, mevcut oturumunuz açık kalacaktır ve bu oturum üzerinden düzeltmeleri yapma veya geri alma şansınız olacaktır. Yeni bir terminal penceresi açarak veya farklı bir bilgisayardan bağlantı kurmayı deneyerek MFA’yı test etmeniz şiddetle tavsiye edilir.
MFA’nın Test Edilmesi
SSH servisini yeniden başlattıktan sonra, MFA’nın doğru çalışıp çalışmadığını test etme zamanı gelmiştir.
1. Yeni Bir Terminal Açın: Mevcut SSH oturumunuzu açık bırakarak, bilgisayarınızda yeni bir terminal penceresi açın veya farklı bir bilgisayardan sunucuya SSH ile bağlanmayı deneyin.
2. SSH Bağlantısı Denemesi: MFA’yı yapılandırdığınız kullanıcı adı ile sunucuya bağlanmaya çalışın:
ssh kullaniciadi@sunucu_ipadresi_veya_domain
3. Kimlik Doğrulama Adımları:
* Öncelikle, SSH sizden parolanızı isteyecektir:
kullaniciadi@sunucu_ipadresi_veya_domain's password:
Parolanızı girin ve Enter tuşuna basın.
* Parolanız doğruysa, SSH sizden “Verification code” (Doğrulama kodu) isteyecektir:
Verification code:
Bu noktada, mobil cihazınızdaki Google Authenticator uygulamasını açın ve ilgili kullanıcı için görüntülenen 6 haneli kodu (TOTP) girin. Kod her 30 saniyede bir değişir, bu yüzden güncel kodu girdiğinizden emin olun.
4. Başarılı Bağlantı: Eğer hem parolanızı hem de doğrulama kodunu doğru girerseniz, sunucuya başarılı bir şekilde SSH ile bağlanacaksınız. Bu, MFA’nın başarıyla yapılandırıldığı anlamına gelir.
5. Başarısız Bağlantı Denemeleri:
* Eğer parolanızı doğru girer ancak yanlış doğrulama kodu girerseniz, bağlantı başarısız olacaktır.
* Eğer mobil cihazınızdaki kod ile sunucunun zamanı arasında büyük bir fark varsa, kod yanlış kabul edilebilir. Bu durumda zaman senkronizasyonunu kontrol etmeniz gerekir (timedatectl status).
* Eğer google-authenticator komutunu çalıştırdığınızda rate-limiting seçeneğini y olarak ayarladıysanız, art arda yanlış kod denemeleri belirli bir süre boyunca yeni denemeleri engelleyebilir.
Testleriniz başarılı olduktan sonra, artık sunucunuzun SSH erişimi MFA ile korunuyor demektir.
Ek Güvenlik İpuçları ve En İyi Uygulamalar
MFA’yı yapılandırmak önemli bir adım olsa da, güvenliği daha da artırmak için bazı ek ipuçları ve en iyi uygulamaları takip etmek önemlidir.
Kurtarma Kodlarının Güvenli Saklanması
google-authenticator komutunu çalıştırdığınızda size verilen beş adet tek kullanımlık kurtarma kodu (emergency scratch codes) hayati öneme sahiptir.
* Fiziksel Kopyalama: Bu kodları yazdırıp güvenli bir yerde (örneğin kilitli bir çekmece veya kasa) saklayın.
* Dijital Kopyalama: Dijital olarak saklamanız gerekiyorsa, şifrelenmiş bir dosya veya parola yöneticisi içinde tutun. Asla düz metin olarak veya bulut depolama hizmetlerinde şifresiz bırakmayın.
* Tek Kullanımlık: Her kod sadece bir kez kullanılabilir. Kullandığınızda üzerini çizin veya listeden çıkarın.
* Erişilebilirlik: Telefonunuzu kaybettiğinizde veya MFA uygulamasına erişemediğinizde bu kodlara ulaşabileceğinizden emin olun.
Zaman Senkronizasyonunun Önemi (NTP)
Zaman tabanlı tek kullanımlık şifreler (TOTP), hem sunucunun hem de mobil cihazın zamanının birbirine yakın olmasını gerektirir. Küçük bir zaman kayması bile kimlik doğrulama hatalarına yol açabilir.
* Sunucunuzda NTP (Network Time Protocol) istemcisinin düzgün çalıştığından emin olun. Ubuntu 18.04’te systemd-timesyncd varsayılan olarak gelir.
* Mobil cihazınızın da otomatik zaman senkronizasyonunu kullandığından emin olun.
Root Kullanıcısı İçin MFA
Genel olarak, root kullanıcısı ile doğrudan SSH erişimi sağlamak güvenlik açısından tavsiye edilmez. Bunun yerine, normal bir kullanıcı hesabı ile giriş yapıp gerektiğinde sudo komutunu kullanmak daha güvenlidir.
Ancak, root kullanıcısı için de MFA yapılandırmak isterseniz, root kullanıcısına geçiş yaparak (sudo su -) google-authenticator komutunu çalıştırmanız ve PAM yapılandırmasını (örneğin /etc/pam.d/sshd) buna göre düzenlemeniz gerekir. Ancak bu, çok dikkatli yapılmalıdır ve genellikle önerilmez.
SSH Anahtarları ile MFA’nın Birlikte Kullanımı
SSH anahtarları, parola tabanlı kimlik doğrulamadan çok daha güvenlidir. MFA’yı SSH anahtarları ile birleştirmek, güvenlik seviyesini en üst düzeye çıkarır.
* Yapılandırma: /etc/ssh/sshd_config dosyasında AuthenticationMethods publickey,keyboard-interactive olarak ayarlayın.
* Bu durumda, kullanıcı önce SSH anahtarı ile kimlik doğrulaması yapar, ardından MFA kodu istenir. Bu, iki farklı faktör (sahip olduğunuz anahtar ve sahip olduğunuz telefon) kullanarak çok güçlü bir koruma sağlar.
Fail2ban Entegrasyonu
Fail2ban, sunucu günlük dosyalarını tarayan ve başarısız giriş denemelerini tespit ettiğinde IP adreslerini geçici olarak engelleyen bir intrusion prevention (izinsiz giriş önleme) çerçevesidir. MFA ile birlikte kullanıldığında, kaba kuvvet saldırılarına karşı ek bir savunma katmanı sağlar.
* Fail2ban, yanlış MFA kodu denemelerini de yakalayacak şekilde yapılandırılabilir ve bu IP adreslerini engelleyebilir. Bu, saldırganların çok sayıda MFA kodunu denemesini engeller.
* Fail2ban’ı kurup yapılandırmak için:
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Ardından /etc/fail2ban/jail.local dosyasını düzenleyerek SSH için ayarları optimize edebilirsiniz.
MFA’yı Devre Dışı Bırakma (Acil Durumda)
MFA’yı yanlış yapılandırdığınızda veya telefonunuzu kaybettiğinizde ve kurtarma kodlarınız da yoksa, sisteme erişiminiz engellenebilir. Bu tür bir acil durumda MFA’yı devre dışı bırakmanın yolları:
* Konsol Erişimi: Sunucuya fiziksel erişiminiz varsa, doğrudan klavye ve monitör bağlayarak giriş yapabilirsiniz. Bu durumda PAM modülleri SSH’deki gibi işlemeyeceği için normal parola ile giriş yapabilirsiniz.
* PAM Dosyasını Düzenleme: Konsol erişimi ile giriş yaptıktan sonra veya mevcut SSH oturumunuz hala açıksa, /etc/pam.d/sshd dosyasını düzenleyerek eklediğiniz auth required pam_google_authenticator.so satırını silin veya başına # koyarak yorum satırı haline getirin. Ardından SSH servisini yeniden başlatın: sudo systemctl restart sshd.
* Kullanıcı Dosyasını Silme: Bir kullanıcı için MFA’yı tamamen kaldırmak isterseniz, o kullanıcının ev dizinindeki .google_authenticator dosyasını silebilirsiniz: rm ~/.google_authenticator. Ancak PAM yapılandırması hala modülü gerektiriyorsa, bu kullanıcı yine de giriş yapamayabilir. En güvenlisi önce PAM yapılandırmasını düzeltmektir.
Bu ek güvenlik ipuçları, MFA uygulamanızın sağlamlığını ve genel sunucu güvenliğinizi önemli ölçüde artıracaktır.
Sıkça Sorulan Sorular (SSS)
MFA yapılandırması hakkında sıkça karşılaşılan bazı sorular ve yanıtları aşağıdadır:
MFA kodlarımı unuttum/telefonumu kaybettim, ne yapmalıyım?
Bu en yaygın ve kritik senaryolardan biridir.
* Kurtarma Kodları (Emergency Scratch Codes): google-authenticator komutunu çalıştırdığınızda size verilen beş adet tek kullanımlık kurtarma kodunu kullanın. Her kod bir kez kullanılabilir ve sisteme normal parola ile giriş yapar gibi kullanıcınızın parolasını girdikten sonra “Verification code” istendiğinde bu kodlardan birini girerek erişim sağlayabilirsiniz.
* Konsol Erişimi: Eğer kurtarma kodlarınız yoksa ve sunucuya fiziksel erişiminiz varsa, doğrudan sunucu konsolundan (klavye ve monitör bağlayarak) giriş yapabilirsiniz. Konsol girişi genellikle PAM yapılandırmasından etkilenmez veya farklı bir PAM profili kullanır. Giriş yaptıktan sonra /etc/pam.d/sshd dosyasındaki pam_google_authenticator.so satırını yorum satırı haline getirerek veya silerek MFA’yı devre dışı bırakabilirsiniz.
* Farklı Bir Kullanıcı Hesabı: Eğer sunucuda başka bir yönetici hesabınız varsa ve bu hesapta MFA etkin değilse veya kurtarma kodları mevcutsa, o hesap üzerinden giriş yaparak sorunlu kullanıcının PAM yapılandırmasını düzeltebilirsiniz.
Tüm kullanıcılara MFA’yı zorunlu mu yapmalıyım?
Güvenlik açısından, evet, tüm kullanıcılar için MFA’nın zorunlu tutulması şiddetle tavsiye edilir. Bir kullanıcının hesabı ele geçirildiğinde, bu durum tüm sistemin güvenliğini tehlikeye atabilir. Eğer nullok seçeneğini kullanırsanız veya [success=1 default=ignore] gibi seçeneklerle MFA’yı isteğe bağlı yaparsanız, MFA kullanmayan kullanıcılar hala tek faktörlü kimlik doğrulamanın risklerine maruz kalacaktır.
Farklı MFA uygulamaları kullanabilir miyim?
Evet, Google Authenticator PAM modülü, zaman tabanlı tek kullanımlık şifreler (TOTP) standardını kullandığı için, bu standardı destekleyen diğer mobil uygulamaları da kullanabilirsiniz. Popüler seçenekler arasında Authy, Microsoft Authenticator ve FreeOTP gibi uygulamalar bulunur. Bunların hepsi, google-authenticator komutunun oluşturduğu QR kodu veya gizli anahtarı tarayarak veya manuel girerek çalışır.
Ubuntu 20.04/22.04 için de geçerli mi?
Evet, bu rehberdeki adımlar ve temel mantık Ubuntu’nun daha yeni sürümleri olan 20.04 LTS ve 22.04 LTS için de büyük ölçüde geçerlidir. libpam-google-authenticator paketi ve PAM/SSH yapılandırma prensipleri bu sürümlerde de aynıdır. Ancak, bazı küçük detaylar veya varsayılan yapılandırmalar farklılık gösterebilir. Her zaman güncel sisteminiz için en son dokümantasyonu kontrol etmek iyi bir uygulamadır.
SSH anahtarları ile MFA’yı nasıl kullanabilirim?
Yukarıda “Ek Güvenlik İpuçları” bölümünde bahsedildiği gibi, SSH anahtarları ile MFA’yı birleştirmek en güvenli yaklaşımdır. /etc/ssh/sshd_config dosyasında AuthenticationMethods publickey,keyboard-interactive olarak ayarlamanız yeterlidir. Bu, kullanıcıların önce SSH anahtarları ile kimlik doğrulaması yapmasını, ardından ikinci bir adım olarak Google Authenticator kodunu girmesini gerektirecektir.
MFA’yı kaldırmak istersem ne yapmalıyım?
MFA’yı kaldırmak için iki ana adım vardır:
1. PAM Yapılandırmasını Geri Alın: /etc/pam.d/sshd dosyasını düzenleyerek eklediğiniz auth required pam_google_authenticator.so satırını silin veya yorum satırı haline getirin.
2. sshd_config Dosyasını Geri Alın: /etc/ssh/sshd_config dosyasında yaptığınız değişiklikleri (özellikle ChallengeResponseAuthentication ve AuthenticationMethods ayarları) eski haline getirin.
3. SSH Servisini Yeniden Başlatın: sudo systemctl restart sshd komutunu çalıştırın.
4. Kullanıcı Dosyalarını Silin (Opsiyonel): Her kullanıcının ev dizinindeki .google_authenticator dosyasını silerek o kullanıcı için MFA yapılandırmasını tamamen kaldırabilirsiniz.
Bu adımları dikkatlice uygulayarak MFA’yı güvenli bir şekilde devre dışı bırakabilirsiniz.
Sonuç
Ubuntu 18.04 sunucularınızda Çok Faktörlü Kimlik Doğrulama (MFA) yapılandırmak, siber güvenlik duruşunuzu önemli ölçüde güçlendiren kritik bir adımdır. Tek faktörlü parola tabanlı kimlik doğrulamanın yetersiz kaldığı günümüzde, MFA ek bir güvenlik katmanı sağlayarak yetkisiz erişim riskini minimize eder. Bu makalede adım adım açıkladığımız Google Authenticator PAM modülü kurulumu ve yapılandırması ile SSH erişiminizi kolayca güvence altına alabilirsiniz.
Unutulmamalıdır ki, güvenlik sürekli bir süreçtir ve hiçbir çözüm %100 kusursuz değildir. Ancak MFA gibi güçlü önlemler almak, saldırganların işini zorlaştırır ve sistemlerinizi çok daha dirençli hale getirir. Kurtarma kodlarını güvenli bir şekilde saklamak, zaman senkronizasyonuna dikkat etmek ve SSH anahtarları ile MFA’yı birleştirmek gibi en iyi uygulamaları takip etmek, güvenliğinizi daha da artıracaktır.
Siber tehditler geliştikçe, savunma mekanizmalarımızı da sürekli olarak güncellememiz ve güçlendirmemiz gerekmektedir. Ubuntu sunucularınızda MFA’yı etkinleştirerek, değerli verilerinizi ve altyapınızı koruma yolunda önemli bir adım atmış olacaksınız.
