İnternet dünyasında bir sunucu yönetiyorsanız, SSH (Secure Shell) erişiminin ne kadar kritik olduğunu bilirsiniz. Ancak bu kritik kapı, aynı zamanda kötü niyetli aktörlerin sunucunuza sızmak için en çok hedef aldığı noktalardan biridir. Sürekli taramalar, kaba kuvvet saldırıları ve kimlik avı girişimleri, her an kapınızda bekleyen bir tehdittir. Peki, bu saldırılara karşı sunucunuzu nasıl bir kale gibi güçlendirebilirsiniz? Bu kapsamlı makalede, SSH erişiminizi en üst düzeye çıkarmak için Fail2Ban, Nftables ve bulut güvenlik duvarları gibi güçlü araçları adım adım ele alacak, gerçek dünya senaryolarıyla destekleyecek ve sunucunuzun güvenliğini sağlamak için pratik çözümler sunacağız.
SSH Güvenliği Neden Bu Kadar Önemli ve Riskler Nelerdir?
SSH, uzak sunuculara güvenli bir şekilde bağlanmak, komut çalıştırmak ve dosya transferi yapmak için kullanılan bir protokoldür. Günümüzün dijital altyapısında, sunucuların, sanal makinelerin ve hatta bazı IoT cihazlarının yönetiminde vazgeçilmez bir rol oynar. Ancak bu yaygın kullanımı, onu siber saldırganlar için cazip bir hedef haline getirir. Açık bir SSH portu, sürekli olarak kaba kuvvet saldırılarına, sözlük saldırılarına ve diğer yetkisiz erişim denemelerine maruz kalır. Bu saldırıların amacı genellikle basittir: zayıf bir kullanıcı adı/şifre kombinasyonu bularak sisteme sızmak, hassas verilere erişmek, kötü amaçlı yazılım yüklemek veya sunucuyu botnet’lere dahil etmektir. Bir sunucunun güvenliğinin ihlal edilmesi, veri kaybından hizmet kesintisine, itibar zedelenmesinden yasal sorumluluklara kadar ciddi sonuçlar doğurabilir. Bu nedenle, SSH güvenliğini sadece bir “ek özellik” olarak görmek yerine, sunucu altyapınızın temel bir bileşeni olarak ele almanız hayati önem taşır. Güvenlik önlemleri almadan bırakılan bir SSH servisi, açık bırakılmış bir kapı gibidir; er ya da geç bir davetsiz misafirle karşılaşmanız kaçınılmazdır. Bu riskleri minimize etmek ve hatta ortadan kaldırmak için katmanlı bir güvenlik yaklaşımı benimsemek zorunludur. Unutmayın, en zayıf halka kadar güçlüsünüzdür ve genellikle bu halka, yeterince korunmamış bir SSH erişimi olabilir.
SSH’ın Temelleri ve Temel Güvenlik Adımları Nelerdir?
SSH, istemci ile sunucu arasında şifreli bir tünel oluşturarak iletişimi güvence altına alır. Bu tünel sayesinde, ağ üzerinde dinleme (eavesdropping) veya manipülasyon girişimleri etkisiz hale getirilir. Ancak SSH’ın kendisi güvenli olsa da, yanlış yapılandırmalar veya zayıf politikalar nedeniyle hala güvenlik açıkları oluşabilir. SSH servisini güçlendirmenin ilk adımları, genellikle basit ama etkili yapılandırma değişikliklerini içerir.
Varsayılan SSH Portunu Değiştirmek Neden Önemlidir?
Çoğu SSH servisi varsayılan olarak 22 numaralı portu kullanır. Bu durum, siber saldırganların otomatik tarama araçları için kolay bir hedef haline gelir. Portu değiştirmek, saldırıları tamamen engellemese de, otomatik botların ve rastgele taramaların büyük bir kısmını eleyerek gürültüyü azaltır ve gerçek tehditlere odaklanmanızı sağlar. Örneğin, 2222 veya 2200 gibi daha az bilinen bir port seçebilirsiniz. Bu değişikliği yapmak için SSH yapılandırma dosyasını düzenlemeniz gerekir:
sudo nano /etc/ssh/sshd_config
Dosyayı açtıktan sonra, “Port 22” satırını bulun (genellikle yorum satırı olarak #Port 22 şeklinde başlar). Yorum işaretini kaldırın ve port numarasını istediğiniz yeni porta değiştirin:
Port 2222
Değişikliği kaydettikten sonra, SSH servisini yeniden başlatmanız gerekir:
sudo systemctl restart sshd
Yeni portu kullanmadan önce güvenlik duvarınızda (Nftables, UFW vb.) bu porta izin verdiğinizden emin olun. Aksi takdirde, sunucunuza erişiminiz kesilebilir.
Parola ile Kimlik Doğrulamayı Devre Dışı Bırakmak ve Anahtar Tabanlı Kimlik Doğrulama Kullanmak
Parolalar, doğası gereği kaba kuvvet saldırılarına karşı savunmasızdır. Güçlü parolalar bile zamanla kırılabilir veya tahmin edilebilir. SSH anahtar tabanlı kimlik doğrulama, bu riski ortadan kaldırır. Bir çift anahtar oluşturursunuz: özel anahtar (sadece sizde kalır ve asla paylaşılmaz) ve açık anahtar (sunucuya yüklenir). Bağlantı kurulduğunda, sunucu açık anahtarı kullanarak özel anahtarınızla bir şifreleme işlemi yapar ve kimliğinizi doğrular. Bu yöntem, kaba kuvvet saldırılarını neredeyse imkansız hale getirir.
İlk olarak, yerel makinenizde bir SSH anahtar çifti oluşturun:
ssh-keygen -t rsa -b 4096
Bu komut, anahtarlarınızı oluşturur ve isteğe bağlı olarak bir parola belirlemenizi ister. Parola, özel anahtarınızın çalınması durumunda ek bir güvenlik katmanı sağlar.
Ardından, açık anahtarınızı sunucuya kopyalayın:
ssh-copy-id -i ~/.ssh/id_rsa.pub kullanici_adi@sunucu_ip_adresi -p 2222
Açık anahtarınız sunucuya kopyalandıktan ve anahtar tabanlı kimlik doğrulama ile giriş yapabildiğinizden emin olduktan sonra, parola ile kimlik doğrulamayı devre dışı bırakabilirsiniz. SSH yapılandırma dosyasını tekrar düzenleyin:
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırları bulun ve değerlerini değiştirin:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Servisi yeniden başlatın:
sudo systemctl restart sshd
Root Erişimi ve Belirli Kullanıcılar İçin Kısıtlamalar
Root kullanıcısının doğrudan SSH üzerinden erişimini engellemek, sisteminize yönelik riskleri önemli ölçüde azaltır. Saldırganlar genellikle root hesabını hedef alır. Root erişimini kapatarak, bir saldırganın sisteme sızsa bile hemen tam yetkiye sahip olmasını engellersiniz. Bunun yerine, normal bir kullanıcı olarak giriş yapıp gerektiğinde sudo komutunu kullanmak çok daha güvenlidir.
Yine sshd_config dosyasında aşağıdaki değişikliği yapın:
PermitRootLogin no
Eğer sunucunuza sadece belirli kullanıcıların erişmesini istiyorsanız, AllowUsers veya DenyUsers direktiflerini kullanabilirsiniz. Örneğin, sadece “adminuser” ve “devuser” adlı kullanıcıların erişmesine izin vermek için:
AllowUsers adminuser devuser
Bu değişiklikleri uyguladıktan sonra SSH servisini yeniden başlatmayı unutmayın. Bu temel adımlar, SSH güvenliğinizin temelini oluşturur ve sizi birçok yaygın saldırıdan korur.
Fail2Ban ile Kaba Kuvvet Saldırılarına Karşı Nasıl Durulur?
SSH portunu değiştirmiş, anahtar tabanlı kimlik doğrulamayı etkinleştirmiş olsanız bile, yine de sisteminize yönelik sayısız bağlantı denemesiyle karşılaşacaksınız. Bu denemeler genellikle otomatik botlar tarafından gerçekleştirilir ve sunucu loglarınızı doldurarak performansı etkileyebilir. İşte burada Fail2Ban devreye girer. Fail2Ban, sunucu log dosyalarını izleyerek belirli bir zaman diliminde başarısız giriş denemesi yapan IP adreslerini otomatik olarak tespit eden ve bu IP’leri geçici veya kalıcı olarak güvenlik duvarında engelleyen güçlü bir araçtır. Bu sayede, kaba kuvvet saldırılarını etkili bir şekilde durdurur.
Fail2Ban Kurulumu ve Temel Yapılandırma Adımları
Fail2Ban’ı çoğu Linux dağıtımında kolayca kurabilirsiniz. Ubuntu/Debian tabanlı sistemler için:
sudo apt update
sudo apt install fail2ban
CentOS/RHEL tabanlı sistemler için:
sudo yum install epel-release
sudo yum install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Kurulumdan sonra, Fail2Ban’ın varsayılan yapılandırma dosyası /etc/fail2ban/jail.conf‘tur. Ancak bu dosyayı doğrudan düzenlemek yerine, jail.local adlı bir kopya oluşturarak değişiklikleri bu dosyada yapmanız önerilir. Bu, gelecekteki güncellemelerde yapılandırmanızın üzerine yazılmasını engeller.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
jail.local dosyasında, genel ayarlar bölümünü ([DEFAULT]) bulacaksınız. Burada bazı önemli parametreleri yapılandırabiliriz:
bantime: Bir IP adresinin ne kadar süreyle engelleneceğini saniye cinsinden belirtir. Örneğin,1h(1 saat) veya1d(1 gün) gibi değerler kullanabilirsiniz. Varsayılan genellikle 10 dakikadır (600 saniye).findtime: Belirtilenmaxretrysayısına ulaşmak için IP adresinin ne kadar süre içinde başarısız deneme yapması gerektiğini saniye cinsinden belirtir.maxretry: Bir IP adresinin engellenmeden önce kaç kez başarısız giriş denemesi yapmasına izin verildiğini belirtir.
Örnek bir [DEFAULT] yapılandırması:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
banaction = iptables-multiport
bantime değerini başlangıçta kısa tutarak test edebilir, ardından saldırı yoğunluğuna göre artırabilirsiniz. Çok uzun bantime değerleri, yanlış engellemeler durumunda sorun yaratabilir.
SSH Servisi için Fail2Ban’ı Etkinleştirme
jail.local dosyasında biraz aşağı kaydırdığınızda, çeşitli servisler için yapılandırma bölümlerini göreceksiniz. SSH için olan [sshd] bölümünü bulun ve etkinleştirin:
[sshd]
enabled = true
port = ssh,2222 # Eğer SSH portunu değiştirdiyseniz, buraya eklemeyi unutmayın
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 2h
Yukarıdaki örnekte, SSH servisi için maxretry değerini 3’e düşürdük ve bantime‘ı 2 saate çıkardık. Ayrıca, eğer SSH portunuzu 2222 olarak değiştirdiyseniz, port satırına bunu eklediğinizden emin olun. Fail2Ban, /var/log/auth.log dosyasını (veya dağıtımınıza göre /var/log/secure) izleyerek SSH giriş denemelerini tespit eder.
Yapılandırmayı kaydettikten sonra Fail2Ban servisini yeniden başlatın:
sudo systemctl restart fail2ban
Fail2Ban’ın doğru çalıştığını kontrol etmek için, durumunu aşağıdaki komutla görüntüleyebilirsiniz:
sudo fail2ban-client status
Belirli bir “jail” (örneğin sshd) için durumu görmek isterseniz:
sudo fail2ban-client status sshd
Bu komut, engellenen IP adreslerinin bir listesini ve ilgili istatistikleri gösterecektir.
Vaka Analizi: Sürekli Kaba Kuvvet Saldırıları
Bir e-ticaret sitesinin sunucularını yöneten bir ekip, sunucu loglarında sürekli olarak dünyanın farklı bölgelerinden gelen SSH kaba kuvvet saldırıları tespit ediyordu. Bu saldırılar, sunucunun CPU kaynaklarını tüketiyor ve auth.log dosyasının hızla büyümesine neden oluyordu. Ekip, SSH portunu değiştirmiş ve anahtar tabanlı kimlik doğrulamayı etkinleştirmiş olsa da, saldırganlar hala eski portu deniyor ve hatta anahtar tabanlı kimlik doğrulamanın etkin olduğu yeni portta bile parola tabanlı denemeler yapıyordu. Fail2Ban’ı kurup etkinleştirdikten ve bantime‘ı 1 gün olarak ayarladıktan sonra, sunucu loglarındaki gürültü önemli ölçüde azaldı. Fail2Ban, saniyeler içinde binlerce IP adresini engelleyerek sunucunun üzerindeki yükü azalttı ve gerçek güvenlik olaylarına odaklanmalarını sağladı. Bu vaka, port değiştirmenin sadece ilk savunma hattı olduğunu, ancak Fail2Ban gibi dinamik engelleme araçlarının sürekli saldırılara karşı ne kadar kritik olduğunu gösteriyor.
Nftables: Linux Güvenlik Duvarınızı Nasıl Yapılandırırsınız?
Fail2Ban, saldırganları dinamik olarak engellemek için harika bir araç olsa da, temel güvenlik duvarı kuralları olmadan eksik kalır. Linux’ta geleneksel olarak iptables kullanılırken, modern dağıtımlar artık Nftables’ı tercih etmektedir. Nftables, daha esnek, güçlü ve performanslı bir güvenlik duvarı çözümüdür. Sunucunuza gelen ve giden tüm ağ trafiğini kontrol etmenizi sağlar, böylece sadece izin verilen portlara ve protokollere erişime izin vererek potansiyel tehditleri daha en başta engellersiniz.
Nftables Kurulumu ve Temel Kurallar
Nftables, çoğu modern Linux dağıtımında varsayılan olarak yüklü gelir. Yüklü değilse, paket yöneticinizle kurabilirsiniz:
sudo apt install nftables # Debian/Ubuntu
sudo yum install nftables # CentOS/RHEL
Kurulumdan sonra, Nftables servisini etkinleştirip başlatın:
sudo systemctl enable nftables
sudo systemctl start nftables
Nftables’ın yapılandırması /etc/nftables.conf dosyasında bulunur. Bu dosyayı düzenleyerek kurallarınızı tanımlayabilirsiniz. İlk olarak, mevcut kuralları temizleyip temel bir yapı oluşturalım. Bu işlem, dikkatli yapılmadığında sunucunuza erişiminizi kesebilir, bu yüzden sanal bir makinede pratik yapmanız veya fiziksel erişiminiz olduğundan emin olmanız önemlidir.
sudo nano /etc/nftables.conf
Örnek bir temel Nftables yapılandırması:
#!/usr/sbin/nft -f
flush ruleset
table ip filter {
chain input {
type filter hook input priority 0; policy drop;
# Loopback arayüzüne izin ver
iif "lo" accept
# Daha önce başlatılmış bağlantılara izin ver
ct state {established, related} accept
# SSH erişimine izin ver (portu değiştirdiyseniz burayı güncelleyin)
tcp dport 2222 accept
# HTTP/HTTPS web trafiğine izin ver
tcp dport { http, https } accept
# ICMP (ping) trafiğine izin ver
ip protocol icmp accept
# Diğer tüm gelen trafiği reddet (policy drop ile zaten yapılıyor)
}
chain forward {
type filter hook forward priority 0; policy drop;
# Yönlendirme kuralları buraya gelir (eğer sunucu router/gateway ise)
}
chain output {
type filter hook output priority 0; policy accept;
# Giden tüm trafiğe izin ver (varsayılan olarak güvenli)
}
}
Bu yapılandırma şunları yapar:
- Tüm mevcut kuralları temizler (
flush ruleset). ip filteradında bir tablo oluşturur.input,forwardveoutputzincirlerini tanımlar.inputzincirinde varsayılan politikayıdrop(reddeder) olarak ayarlar, bu da açıkça izin verilmeyen her şeyi engeller.- Loopback trafiğine (
iif "lo" accept) ve mevcut/ilişkili bağlantılara (ct state {established, related} accept) izin verir. - SSH (port 2222), HTTP (port 80) ve HTTPS (port 443) trafiğine izin verir.
- ICMP (ping) trafiğine izin verir.
Değişiklikleri kaydettikten sonra, kuralları yükleyin ve kalıcı hale getirin:
sudo nft -f /etc/nftables.conf
sudo systemctl enable nftables
sudo systemctl restart nftables
Kurallarınızın yüklendiğini kontrol etmek için:
sudo nft list ruleset
Gelişmiş Nftables Kuralları ve Uygulama Senaryoları
Nftables, IP adres aralıklarını engelleme, belirli ülkelerden gelen trafiği kısıtlama veya belirli servisler için hız sınırlamaları getirme gibi daha gelişmiş senaryolar için de kullanılabilir.
Belirli IP Adreslerinden Gelen Trafiği Engelleme
Eğer belirli bir IP adresinden veya IP aralığından sürekli saldırı alıyorsanız, bunları doğrudan Nftables’ta engelleyebilirsiniz. Örneğin, 192.0.2.0/24 ağından gelen tüm trafiği engellemek için input zincirinize aşağıdaki kuralı ekleyebilirsiniz:
ip saddr 192.0.2.0/24 drop
Servis Bazında Hız Sınırlamaları (Rate Limiting)
Kaba kuvvet saldırılarına karşı Fail2Ban’a ek olarak, Nftables ile de hız sınırlamaları uygulayabilirsiniz. Bu, bir IP adresinin belirli bir zaman diliminde yapabileceği bağlantı denemesi sayısını sınırlar. Örneğin, SSH portuna saniyede 3 bağlantı denemesinden fazlasına izin vermemek için:
# SSH portu için hız sınırlaması
tcp dport 2222 meter ssh_limit { ip saddr count 3 limit rate 3/second } drop
Bu kural, bir IP adresinden saniyede 3’ten fazla SSH bağlantı denemesi gelirse, bu trafiği reddedecektir. Bu, Fail2Ban’ın devreye girmesinden önce bile bazı saldırıları yavaşlatmaya yardımcı olabilir.
Vaka Analizi: DDoS Saldırısı Önleme
Bir web hosting firması, sunucularından birinin sürekli olarak belirli bir IP aralığından gelen SYN sel saldırılarıyla karşı karşıya kaldığını fark etti. Bu saldırılar, sunucunun kaynaklarını tüketerek hizmet kesintilerine neden oluyordu. Geleneksel güvenlik duvarı kuralları, tüm trafiği engellemeden bu saldırıyı durdurmakta yetersiz kalıyordu. Nftables’ın gelişmiş yeteneklerini kullanarak, firma input zincirine belirli IP aralıklarından gelen trafiği doğrudan reddeden kurallar ekledi. Ayrıca, syn-flood önleme için özel bir kural seti tanımlayarak, aynı kaynaktan gelen aşırı SYN paketlerini sınırladı. Bu sayede, sunucuya yönelik DDoS saldırılarının etkisi önemli ölçüde azaltıldı ve hizmet kesintileri önlendi. Nftables’ın modüler yapısı ve esnekliği, bu tür karmaşık saldırılara karşı hızlı ve etkili çözümler üretilmesine olanak tanıdı.
Bulut Güvenlik Duvarları: Ek Bir Koruma Katmanı Nasıl Sağlanır?
Tek bir sunucu üzerinde Fail2Ban ve Nftables gibi araçları kullanmak, güçlü bir savunma sağlar. Ancak modern altyapılar genellikle bulut platformlarında (AWS, Azure, Google Cloud, DigitalOcean vb.) barındırılır. Bu bulut sağlayıcıları, kendi ağ güvenlik duvarı hizmetlerini sunarak sunucularınıza ulaşmadan önce ek bir koruma katmanı eklemenize olanak tanır. Bulut güvenlik duvarları, genellikle sanal makinelerinizin önünde yer alır ve trafiği daha fiziksel ağ katmanında filtreleyerek sunucunuzun kaynaklarını boşa harcamadan kötü niyetli trafiği engeller.
Bulut Güvenlik Duvarlarının Avantajları ve Çalışma Prensibi
Bulut güvenlik duvarları (Security Groups, Network Security Groups, Firewall Rules gibi isimlerle anılır), genellikle durum bilgisi olan (stateful) güvenlik duvarlarıdır. Yani, bir bağlantının durumunu (başlatıldı, devam ediyor, sonlandı) takip ederler ve sadece izin verilen bağlantılarla ilgili trafiğe izin verirler. Temel avantajları şunlardır:
- Ölçeklenebilirlik: Bulut altyapısıyla entegre oldukları için kolayca ölçeklenebilirler.
- Yönetim Kolaylığı: Genellikle web tabanlı arayüzler veya API’ler aracılığıyla kolayca yönetilebilirler.
- Performans: Trafik, sunucuya ulaşmadan önce engellendiği için sunucunun CPU ve bellek kaynakları korunur.
- Global Kapsam: Birden fazla sunucuya aynı kuralları uygulayabilir veya farklı bölgelerdeki sunucular için merkezi olarak yönetilebilirler.
Çalışma prensibi oldukça basittir: Gelen (Ingress) ve Giden (Egress) trafik için kurallar tanımlarsınız. Her kural, bir protokole (TCP, UDP, ICMP), bir porta veya port aralığına ve kaynak/hedef IP adresine (veya IP aralığına) izin verir veya engeller. Varsayılan olarak, çoğu bulut güvenlik duvarı, gelen tüm trafiği reddeder ve giden tüm trafiğe izin verir.
Popüler Bulut Sağlayıcılarında Güvenlik Duvarı Yapılandırmaları
AWS Security Groups (Güvenlik Grupları)
AWS’te, EC2 örnekleriniz için Güvenlik Grupları kullanırsınız. Her bir örnek, bir veya daha fazla güvenlik grubuna atanabilir. Güvenlik grubu, sanal bir güvenlik duvarı gibi davranır.
SSH için bir kural eklemek:
- AWS Yönetim Konsolu’nda EC2 hizmetine gidin.
- Sol menüden “Security Groups” (Güvenlik Grupları) seçeneğini tıklayın.
- Yeni bir güvenlik grubu oluşturun veya mevcut birini düzenleyin.
- “Inbound rules” (Gelen kurallar) sekmesine gidin.
- “Add rule” (Kural ekle) düğmesine tıklayın.
- Tür olarak “SSH” (veya özel portunuzu seçin, örneğin “Custom TCP” ve 2222 portunu girin) seçin.
- Kaynak olarak “My IP” (kendi IP adresiniz), “Anywhere” (herhangi bir IP – dikkatli olun!) veya belirli bir IP aralığı seçin.
- Kuralı kaydedin.
Bu şekilde, sadece belirli IP adreslerinden SSH portunuza erişime izin vermiş olursunuz.
Google Cloud Firewall Rules (Güvenlik Duvarı Kuralları)
Google Cloud’da, VPC (Virtual Private Cloud) ağına uygulanan güvenlik duvarı kuralları kullanılır. Bu kurallar, ağdaki tüm sanal makinelere veya belirli etiketlere sahip makinelere uygulanabilir.
SSH için bir kural eklemek:
- Google Cloud Konsolu’nda “VPC network” (VPC ağı) > “Firewall” (Güvenlik Duvarı) bölümüne gidin.
- “CREATE FIREWALL RULE” (Güvenlik Duvarı Kuralı Oluştur) düğmesine tıklayın.
- Kurala bir isim verin (örneğin,
allow-ssh-2222). - “Network” (Ağ) seçin.
- “Direction of traffic” (Trafik yönü) olarak “Ingress” (Gelen) seçin.
- “Action on match” (Eşleşme durumunda eylem) olarak “Allow” (İzin Ver) seçin.
- “Targets” (Hedefler) bölümünde, kuralın uygulanacağı sanal makineleri seçin (örneğin, “All instances in the network” veya “Specified target tags”).
- “Source IP ranges” (Kaynak IP aralıkları) bölümünde, kendi IP adresinizi veya izin vermek istediğiniz IP aralıklarını girin (örneğin,
192.0.2.1/32). - “Protocols and ports” (Protokoller ve portlar) bölümünde “Specified protocols and ports” (Belirtilen protokoller ve portlar) seçeneğini işaretleyin ve “tcp:2222” (veya kullandığınız SSH portu) girin.
- Kuralı oluşturun.
Vaka Analizi: Çoklu Bölge Dağıtımı
Küresel bir SaaS şirketi, hizmetlerini birden fazla AWS bölgesinde dağıtmıştı. Geleneksel güvenlik duvarı yönetimi, her sunucuda ayrı ayrı kuralların yapılandırılmasını gerektiriyordu ve bu da karmaşıklığı artırıyordu. Şirket, AWS Security Groups’u kullanarak merkezi bir güvenlik stratejisi benimsedi. Her bir mikroservis için özel güvenlik grupları tanımladılar ve bu grupları bölgeler arası bir şablon olarak kullandılar. Örneğin, veritabanı sunucuları sadece uygulama sunucularından gelen trafiğe izin veren bir güvenlik grubuna atanırken, SSH erişimi sadece şirket VPN’inden gelen IP adresleriyle sınırlıydı. Bu yaklaşım, güvenlik yönetimini basitleştirmekle kalmadı, aynı zamanda yanlış yapılandırma riskini de azalttı ve yeni sunucuların devreye alınmasını hızlandırdı. Bulut güvenlik duvarları, bu tür karmaşık ve dağıtık altyapılarda tutarlı bir güvenlik politikası uygulamanın anahtarı haline geldi.
Mobil uyumlu HTML üretimi konusunda ise, web tabanlı bulut güvenlik duvarı arayüzlerinin ve yönetim panellerinin çoğu, kullanıcıların farklı cihazlardan (masaüstü, tablet, telefon) kolayca erişebilmesi için duyarlı (responsive) tasarıma sahiptir. Bu, CSS medya sorguları kullanılarak sağlanır. Örneğin, bir yönetim panelinin mobil görünümünü optimize etmek için aşağıdaki gibi bir CSS kuralı kullanılabilir:
<style>
/* Varsayılan stil: Masaüstü görünümü */
.container {
width: 960px;
margin: 0 auto;
}
/* Mobil cihazlar için stil */
@media only screen and (max-width: 768px) {
.container {
width: 100%;
padding: 0 15px;
}
.sidebar {
display: none; /* Mobil görünümde kenar çubuğunu gizle */
}
.main-content {
width: 100%; /* Ana içeriği tam genişliğe getir */
}
}
</style>
Bu örnek, tarayıcı genişliği 768 pikselin altına düştüğünde sayfa düzenini mobil cihazlara uygun hale getirir. Bu tür duyarlı tasarımlar, bulut platformlarının güvenlik yönetimi arayüzlerinin kullanıcı dostu olmasını sağlar.
İleri Düzey SSH Güvenliği ve En İyi Uygulamalar Nelerdir?
SSH güvenliğini sağlamak, sadece temel yapılandırmalar ve araçlar kurmakla bitmez. Sürekli izleme, düzenli güncellemeler ve proaktif önlemler, uzun vadeli bir güvenlik stratejisinin ayrılmaz parçalarıdır. İşte deneyimli kullanıcılar için bazı ileri düzey ipuçları ve en iyi uygulamalar:
SSH Konfigürasyonunun Kapsamlı Kontrolü
sshd_config dosyasında daha fazla ince ayar yaparak güvenliği artırabilirsiniz:
- MaxAuthTries: Başarısız kimlik doğrulama denemesi sayısını sınırlayın. Fail2Ban ile birlikte ek bir katman sağlar.
MaxAuthTries 3 - ClientAliveInterval ve ClientAliveCountMax: Boşta kalan SSH oturumlarının otomatik olarak kapatılmasını sağlayın. Bu, açık bırakılan oturumlar üzerinden yetkisiz erişimi engeller.
ClientAliveInterval 300 ClientAliveCountMax 0Bu ayar, 300 saniye (5 dakika) boyunca istemciden yanıt gelmezse oturumu sonlandırır.
- AllowTcpForwarding, AllowAgentForwarding, X11Forwarding: Bu özelliklere ihtiyacınız yoksa devre dışı bırakın. Her biri potansiyel bir saldırı vektörü olabilir.
AllowTcpForwarding no AllowAgentForwarding no X11Forwarding no - Banner: Giriş yapmadan önce yasal bir uyarı veya bilgilendirme mesajı gösterin.
Banner /etc/issue.net/etc/issue.netdosyasına istediğiniz mesajı yazabilirsiniz.
İki Faktörlü Kimlik Doğrulama (2FA) Entegrasyonu
SSH anahtar tabanlı kimlik doğrulama güçlüdür, ancak özel anahtarınızın çalınması durumunda hala risk taşır. İki faktörlü kimlik doğrulama (2FA), bu riski önemli ölçüde azaltır. Bir kimlik doğrulama uygulaması (Google Authenticator gibi) veya donanım belirteci (YubiKey gibi) kullanarak, hem anahtarınızı hem de tek kullanımlık bir kodu girmenizi isteyebilirsiniz. Bu, özel anahtarınızın ele geçirilse bile yetkisiz erişimi engeller.
Linux sistemlerinde PAM (Pluggable Authentication Modules) aracılığıyla 2FA entegrasyonu yapmak mümkündür. Örneğin, libpam-google-authenticator paketini kurarak kolayca 2FA ekleyebilirsiniz:
sudo apt install libpam-google-authenticator
google-authenticator
google-authenticator komutu, size bir QR kodu ve kurtarma kodları sağlayacaktır. Ardından, /etc/pam.d/sshd ve /etc/ssh/sshd_config dosyalarında gerekli değişiklikleri yaparak 2FA’yı etkinleştirebilirsiniz.
SSH Erişimi İçin VPN Kullanımı
En üst düzey güvenlik için, SSH portunu doğrudan internete açmak yerine, sunucunuza bir VPN (Virtual Private Network) üzerinden erişmeyi düşünebilirsiniz. Bu senaryoda, SSH portunuzu sadece VPN ağınızdan gelen trafiğe açar, internetten gelen tüm trafiği engellersiniz. Kullanıcılar önce VPN’e bağlanır, ardından VPN tüneli üzerinden sunucuya SSH yaparlar. Bu, SSH portunuzu genel internet taramalarından tamamen gizleyerek saldırı yüzeyini sıfıra indirir.
Örneğin, Nftables veya bulut güvenlik duvarınızda SSH portunuzu sadece VPN sunucunuzun IP adresinden gelen trafiğe izin verecek şekilde yapılandırabilirsiniz:
# Nftables örneği: Sadece VPN sunucusundan gelen SSH trafiğine izin ver
table ip filter {
chain input {
# ... diğer kurallar ...
ip saddr <VPN_SUNUCUSU_IP_ADRESI> tcp dport 2222 accept
# ... diğer tüm SSH trafiğini reddet ...
}
}
Düzenli Güncellemeler ve Güvenlik Denetimleri
Yazılım güncellemeleri, güvenlik açıklarını kapatmak ve yeni özellikler eklemek için kritik öneme sahiptir. İşletim sisteminizi ve tüm yüklü paketleri (özellikle SSH ile ilgili olanları) düzenli olarak güncellediğinizden emin olun.
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
sudo yum update -y # CentOS/RHEL
Ayrıca, güvenlik denetim araçları (Lynis, OpenVAS gibi) kullanarak sunucunuzdaki potansiyel güvenlik açıklarını düzenli olarak tarayın ve zayıflıkları giderin. Log dosyalarını (/var/log/auth.log, Fail2Ban logları) düzenli olarak incelemek, anormal aktiviteyi erken aşamada tespit etmenize yardımcı olur.
Güvenlik Farkındalığı ve Eğitim
Teknik önlemler ne kadar güçlü olursa olsun, insan faktörü her zaman en zayıf halka olabilir. Ekibinizdeki herkesin güçlü parolalar kullanma, özel anahtarlarını güvende tutma, kimlik avı saldırılarına karşı dikkatli olma ve güvenlik politikalarına uyma konusunda eğitildiğinden emin olun. Düzenli güvenlik brifingleri ve farkındalık eğitimleri, genel güvenlik duruşunuzu önemli ölçüde artıracaktır.
Sonuç ve Sıkça Sorulan Sorular
SSH, uzak sunucu yönetimi için vazgeçilmez bir araçtır, ancak güvenliği asla hafife alınmamalıdır. Bu makalede ele aldığımız gibi, SSH portunu değiştirmekten anahtar tabanlı kimlik doğrulamaya, Fail2Ban ile kaba kuvvet saldırılarını engellemekten Nftables ile detaylı güvenlik duvarı kuralları oluşturmaya ve bulut güvenlik duvarlarını kullanarak ek bir savunma katmanı eklemeye kadar birçok yöntemle sunucunuzu güçlendirebilirsiniz. İki faktörlü kimlik doğrulama ve VPN kullanımı gibi ileri düzey teknikler, güvenlik seviyenizi daha da artırır. Unutmayın, siber güvenlik sürekli bir süreçtir; düzenli güncellemeler, izleme ve proaktif önlemler, sunucularınızın uzun vadeli güvenliğini sağlamanın anahtarıdır. Katmanlı bir güvenlik yaklaşımı benimseyerek, potansiyel tehditlere karşı çok daha dirençli bir altyapı oluşturabilirsiniz.
Sıkça Sorulan Sorular
| Soru | Cevap |
|---|---|
| SSH portunu değiştirmek gerçekten güvenliği artırır mı? | Evet, doğrudan bir güvenlik açığını kapatmasa da, otomatik botlar ve rastgele taramalar tarafından yapılan çoğu saldırı girişimini engelleyerek “gürültüyü” önemli ölçüde azaltır. Bu, gerçek tehditlere odaklanmanızı sağlar ve saldırı yüzeyinizi daraltır. Ancak tek başına yeterli değildir, diğer güvenlik önlemleriyle birlikte kullanılmalıdır. |
| Fail2Ban’ı kurduktan sonra neden hala saldırı denemeleri görüyorum? | Fail2Ban, saldırıları tamamen durdurmaz, ancak belirli bir eşiği aşan IP adreslerini engeller. Loglarınızda hala denemeler görebilirsiniz çünkü Fail2Ban, bir IP adresini engellemeden önce belirli sayıda başarısız denemeye izin verir (maxretry). Ayrıca, saldırganlar farklı IP adresleri kullanarak denemeye devam edebilirler. Fail2Ban, bu tür sürekli denemeleri otomatik olarak bloke ederek sunucunuzun üzerindeki yükü azaltır. |
| Nftables yerine UFW veya Firewalld kullanabilir miyim? | Evet, Nftables, Linux’taki temel güvenlik duvarı çerçevesidir. UFW (Uncomplicated Firewall) ve Firewalld, Nftables (veya eski iptables) üzerinde çalışan daha yüksek seviyeli yönetim araçlarıdır. Eğer bu araçlara alışkınsanız, onları kullanmaya devam edebilirsiniz. Önemli olan, güvenlik duvarınızın doğru yapılandırılmış ve aktif olmasıdır. Nftables, daha ince ayar ve karmaşık kurallar için daha fazla esneklik sunar. |
| Bulut güvenlik duvarları ve sunucu üzerindeki güvenlik duvarı (Nftables) birlikte nasıl çalışır? | Bu iki güvenlik duvarı katmanlı bir savunma sağlar. Bulut güvenlik duvarları (örn. AWS Security Groups), trafiği sunucunuza ulaşmadan önce, ağ seviyesinde filtreler. Sunucu üzerindeki Nftables ise, bulut güvenlik duvarından geçen trafiği daha detaylı bir şekilde kontrol eder ve sunucuya özgü servisler için ek kurallar uygular. En iyi uygulama, bulut güvenlik duvarını genel engellemeler için, Nftables’ı ise daha spesifik ve dinamik kurallar (Fail2Ban entegrasyonu gibi) için kullanmaktır. |
| SSH anahtarımı kaybedersem ne olur? | Eğer özel SSH anahtarınızı kaybederseniz ve sunucunuza parola ile erişim devre dışı bırakılmışsa, sunucunuza erişiminiz kesilebilir. Bu nedenle, özel anahtarınızı güvenli bir yerde yedeklemek (şifreli bir şekilde) ve bir parola ile korumak hayati önem taşır. Ayrıca, bulut platformlarında genellikle konsol erişimi veya kurtarma modları bulunur; bu seçenekleri kullanarak geçici olarak erişim sağlayıp yeni bir anahtar yapılandırabilirsiniz. |