Uygulama

SSHGuard ile SSH Sunucusu Nasıl Güvence Altına Alınır

 

SSH (Güvenli Kabuk), sunucunuza kritik bir giriş noktası olarak hizmet eder ve güçlü, şifrelenmiş bir uzaktan yönetim yöntemi sunar. Ancak, güvenliği yalnızca onu korumak için alınan önlemler kadar güçlüdür.

SSHGuard’a girin—SSH sunucunuzu kaba kuvvet saldırılarından ve diğer yaygın güvenlik açıklarından korumak için tasarlanmış sağlam bir araç. Bu kılavuz, sunucunuzun güvenliğini artırarak ve size gönül rahatlığı sağlayarak onu uygulamak için pratik adımları gösterecektir.

 

SSHGuard Nedir?

SSHGuard, sunucuları kaba kuvvet saldırılarından, özellikle de SSH servislerini hedef alan saldırılardan koruyan bir güvenlik aracıdır. Tekrarlanan başarısız oturum açma girişimleri gibi kötü amaçlı etkinlik belirtileri için sunucu günlüklerini izleyen günlük tabanlı bir saldırı önleme sistemi olarak işlev görür.

SSHGuard bu tür şüpheli davranışları tespit ettiğinde, güvenlik duvarı kurallarını kullanarak saldırgan IP adreslerini otomatik olarak engeller.

Ayrıca, çeşitli kayıt formatlarını destekler ve potansiyel olarak kötü amaçlı trafiğin engellenmesini ve engelinin kaldırılmasını yönetmek için UFW, firewalld, iptables, nftables, IPFW ve pf gibi çeşitli güvenlik duvarı arka uçlarıyla entegre edilebilir. 

SSHGuard ve Fail2Ban: Temel Farklar

SSHGuard ve Fail2Ban her ikisi de şüpheli etkinlik için günlük dosyalarını izler ve ardından saldırgan IP adreslerini engellemek için işlem yapar. Ancak benzer işlevselliklerine rağmen, aralarındaki farklar şunlardır:

İzleme Yaklaşımı:

  • SSHGuard Günlük dosyalarını doğrudan izler ve düzenli ifadelere ihtiyaç duymadan günlük girdilerini kendisi yorumlayabilir.
  • Fail2Ban, Öte yandan, günlük dosyalarını ayrıştırmak ve kötüye kullanım davranış kalıplarını belirlemek için düzenli ifadelere büyük ölçüde güvenir. Bu, günlük dosyasına yazan hemen hemen her hizmeti izlemek üzere uyarlanabildiği için onu oldukça esnek ve yapılandırılabilir hale getirir.

Varsayılan İzlenen Hizmetler:

  • SSHGuard öncelikli olarak SSH sunucularını korumak için tasarlanmıştır ancak posta sunucuları ve FTP gibi diğer servisleri de destekler.
  • Fail2Ban SSH’nin ötesinde web sunucuları, posta sunucuları, dosya paylaşım sunucuları, FTP ve daha fazlası dahil olmak üzere çok çeşitli hizmetleri korumak üzere yapılandırılabilir.

Uygulama ve Performans:

  • SSHGuard C dilinde yazılmıştır, bu da hız ve kaynak kullanımı açısından daha iyi performans sunabilir.
  • Fail2Ban Python’da yazılmıştır, bu da onu biraz daha yavaş hale getirebilir, ancak Python’un kapsamlı kütüphaneleri ve kolay betikleme özelliği nedeniyle daha uyarlanabilir hale getirir.

Engelleme Mekanizmaları:

  • SSHGuard UFW, firewalld, iptables, pf, IPFW gibi güvenlik duvarı araçlarıyla doğrudan entegre olan daha basit bir engelleme mekanizması kullanır.
  • Fail2Ban öncelikli olarak iptables kullanır ancak e-posta gönderme, özel betikler çalıştırma veya daha karmaşık güvenlik duvarı ayarlarıyla bütünleşme gibi çeşitli diğer eylemlerle çalışacak şekilde yapılandırılabilir.

Yapılandırma Kolaylığı:

  • SSHGuard SSH ve diğer birkaç servisle ilgilenen kullanıcılar için daha basit bir kurulum sağlar ve genellikle daha az özelleştirme gerektirir.
  • Fail2Ban Düzenli ifadeleri ayarlamak ve farklı servisler için özel kuralları ve eylemleri tanımlamak için daha ayrıntılı yapılandırma gerekebilir, ancak bu aynı zamanda daha fazla kontrol ve özelleştirmeye de olanak tanır.

Linux’a SSHGuard Kurulumu

Aşağıda Linux dağıtımınıza bağlı olarak SHHGuard’ın nasıl kurulacağı gösterilmektedir.

Debian / Ubuntu / Linux Mint

sudo apt install sshguard

Fedora

sudo dnf install sshguard

Yukarıdaki komutu çalıştırmanın, Fedora sistemlerinde kullanılan varsayılan güvenlik duvarı Firewalld olduğundan “sshguard-firewalld” paketini de yükleyeceğini unutmayın. Gerekirse, SSHGuard için alternatif güvenlik duvarı arka uçları olarak “sshguard-iptables” veya “sshguard-nftables” paketlerini de yükleyebilirsiniz.

Hizmeti etkinleştirin ve başlatın:

sudo systemctl enable --now sshguard.service

Alma Linux / Rocky Linux

SSHGuard paketi EPEL deposunda olduğundan, önce onu sisteminize ekleyin (henüz yapmadıysanız) ve paket dizinini yenileyin.

sudo dnf install epel-release
sudo dnf update

Daha sonra aşağıdakileri çalıştırarak SSHGuard’ı yükleyebilirsiniz:

sudo dnf install sshguard

Fedora’da olduğu gibi, SSHGuard’ın kullanımı için varsayılan arka uç olarak ek bir “sshguard-firewalld” paketi yüklenecektir. Diğer iki seçenek olan “sshguard-iptables” ve “sshguard-nftables” da mevcuttur.

Son olarak servisi etkinleştirin ve başlatın:

sudo systemctl enable --now sshguard.service

SSHGuard’ı yapılandırın

“sshguard.conf” dosyası, sunucunuzu korumak için SSHGuard ayarlarını yapılandırdığınız yerdir. Bu dosya, SSHGuard’ın nasıl davrandığını, neyi izlediğini ve olası saldırılara nasıl yanıt verdiğini belirtmenize olanak tanır.

Debian tabanlı sistemlerde (Debian, Ubuntu, vb.) dosya şu konumda bulunur:

/etc/sshguard/sshguard.conf

Alma Linux, Rocky Linux, Fedora gibi RHEL tabanlı dağıtımlarda bunu şu yolda bulabilirsiniz:

/etc/sshguard.conf

Debian’da varsayılan olarak şöyle görünür:

SSHGuard configuration file.
SSHGuard yapılandırma dosyası.

İşte yaygın seçeneklerinin açıklaması:

  • BACKEND: Bu seçenek, SSHGuard’ın saldırganları engellemek için kullanması gereken güvenlik duvarı arka ucu türünü belirtir. Örneğin, sisteminizin güvenlik duvarına bağlı olarak “sshg-fw-nft-sets”, “sshg-fw-firewalld”, “sshg-fw-iptables”, “sshg-fw-pf” vb. gibi değerler görebilirsiniz.
  • LOGREADER: SSHGuard’ın günlük dosyalarınızı okumak için kullandığı yöntemi belirtir. SSHGuard’ın kötü amaçlı etkinliği algılamak için günlük girişlerini nasıl işlediğini belirler.
  • THRESHOLD: Bu, SSHGuard’ın o adresi engellemesini tetikleyen tek bir IP adresinden gelen kötüye kullanım etkinliklerinin (başarısız oturum açma girişimleri gibi) sayısıdır. Bunu daha düşük ayarlamak daha hızlı yasaklamalar anlamına gelir, ancak çok düşük ayarlamamaya dikkat edin, aksi takdirde şifrelerini yanlış yazan meşru kullanıcılar engellenebilir.
  • BLOCK_TIME: Bu, bir IP adresinin kötüye kullanım eşiğine ulaştıktan sonra ne kadar süreyle (saniye cinsinden) engelleneceğini tanımlar; varsayılan ayar iki dakikadır (120 saniye). Bu süreden sonra, IP adresi başka bir engellemeyi tetiklemediği sürece engelleme kaldırılır.
  • DETECTION_TIME: Bu, aynı IP tarafından tekrarlanan ihlallerin engelleme eşiğine ulaşmaya doğru sayıldığı zaman çerçevesini (saniye cinsinden) ayarlar. Esasen, SSHGuard’ın belirli bir IP adresinden gelen şüpheli etkinlikleri takip ettiği süreyi ayarlar.
  • WHITELIST_FILE: IP adreslerini veya aralıklarını, nasıl davranırlarsa davransınlar, asla engellenmemesi gerekenleri belirtebileceğiniz dosyanın tam yolu. Bu, yanlışlıkla kendinizi veya güvenilen IP adreslerini engellemediğinizden emin olmak için yararlıdır.

Kullandığınız güvenlik duvarına bağlı olarak SSHGuard’ı nasıl yapılandıracağınızı şimdi göstereyim.

UFW/nftables Kullanırken SSHGuard Yapılandırması

Öncelikle önemli bir açıklamayla başlamak istiyorum. Birçok rehber UFW’yi SSHGuard için bir arka uç olarak listeler, ancak bu basit bir nedenden ötürü pek de doğru değildir – SSHGuard bir UFW arka ucu sunmaz, aslında bir nftables arka ucu sunar.

UFW (Karmaşık Olmayan Güvenlik Duvarı), Linux’ta iptables/nftables güvenlik duvarı kurallarını perde arkasında yönetmek için kullanıcı dostu bir arayüzdür (soyutlama katmanı). Ubuntu’da kullanılan varsayılan arayüzdür.

Dolayısıyla SSHGuard’ı onunla çalışacak şekilde yapılandırmak için, “BACKEND” seçeneğinin değer olarak “/usr/libexec/sshguard/sshg-fw-nft-sets” içerdiğinden emin olun.

SSHGuard configuration using UFW/nftables.
UFW/nftables kullanarak SSHGuard yapılandırması.

Ancak, SSHGuard UFW kurallarını manipüle etmeden önce, UFW’nin SSHGuard gibi harici uygulamalar tarafından yönetilecek şekilde ayarlandığından emin olmanız gerekir. Bu, UFW’nin yapılandırmasına SSHGuard için kancalar eklemeyi içerir. Bunu yapmak için, UFW “before.rules” dosyasını düzenleyin:

sudo nano /etc/ufw/before.rules

SSHGuard için yeni bir zincir oluşturmak amacıyla “allow all on loopback” bölümünden sonra aşağıdaki satırları ekleyin:

# Create a chain for SSHGuard
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD
SSHGuard configuration using UFW/nftables.
UFW/nftables kullanarak SSHGuard yapılandırması.

Dosyayı kaydedin ve çıkın. Sonra, UFW servisini yeniden başlatın.

sudo systemctl restart ufw

Eğer SSHGuard yapılandırmasını değiştirdiyseniz, servisini de yeniden başlatın.

sudo systemctl restart sshguard

İşte bu kadar. SSHGuard artık sunucunuzu kaba kuvvet SSH saldırılarına karşı korumak için tamamen ayarlandı. Bunu test etmek için sunucunuza birkaç yanlış SSH bağlantısı yapmayı deneyin. Üçüncü başarısız girişimden sonra (“THRESHOLD=30”), SSHGuard bağlantınızı iki dakika boyunca engelleyecektir (“BLOCK_TIME=120”).

Hangi adreslerin engellendiğini kontrol etmek mi istiyorsunuz? En kolay yol, engellenen IP adreslerinin bir listesini içeren SSHGuard nftables tablosunu doğrudan listelemektir.

sudo nft list table sshguard
List the IP addresses blocked by SSHGuard.
SSHGuard tarafından engellenen IP adreslerini listeleyin.

Ayrıca SSHGuard’ın aktivite ve eylemlerinin kayıtlarını görüntülemek için “/var/log/auth.log” dosyasını da izleyebilirsiniz.

sudo tail -f /var/log/auth.log
SSHGuard's activities and actions are also written in the log file.
SSHGuard’ın aktiviteleri ve eylemleri de log dosyasına yazılır.

iptables Kullanırken SSHGuard Yapılandırması

Bana eski kafalı deyin (haklı olduğunuz için tartışmayacağım) ama ben arka uç için iptables güvenlik duvarı ile SSHGuard kullanmayı tercih ediyorum. İşte nasıl yapılacağı.

Öncelikle SSHGuard’ın iptables kullanacak şekilde yapılandırıldığından emin olmak için SSHGuard yapılandırma dosyasını kontrol edin. Bu dosyada “BACKEND” seçeneği “/usr/libexec/sshguard/sshg-fw-iptables” olarak ayarlanmalıdır.

sudo nano /etc/sshguard/sshguard.conf
SSHGuard configuration using iptables for the backend.
Arka planda iptables kullanılarak SSHGuard yapılandırması.

Elbette, SSHGuard yapılandırmasında herhangi bir değişiklik yaptıysanız, onu yeniden başlatmayı unutmayın:

sudo systemctl restart sshguard

Daha sonra SSHGuard için yeni bir iptables zinciri oluşturun:

sudo iptables -N sshguard

Tüm SSH trafiğinin “sshguard” zincirinden geçtiğinden emin olun:

sudo iptables -A INPUT -p tcp --dport 22 -j sshguard

Değişikliklerinizi kalıcı hale getirmek için (yeniden başlatmanın ardından kullanılabilir hale getirmek için) bu kılavuza bakın veya aşağıdaki komutları izleyin:

sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4

Şu anda SSHGuard tarafından engellenen IP adreslerinin listesini görüntülemek için aşağıdakileri çalıştırın:

sudo iptables -L sshguard -n
List the IP addresses blocked by SSHGuard's iptables backend.
SSHGuard’ın iptables arka ucu tarafından engellenen IP adreslerini listeleyin.

Ayrıca şunu çalıştırarak gerçek zamanlı SSHGuard eylemlerini izleyebilirsiniz:

sudo journalctl -u sshguard -f
SSHGuard actions.
SSHGuard eylemleri.

Firewalld Kullanırken SSHGuard Yapılandırması

Firewalld, Linux için bir güvenlik duvarı yönetim aracıdır. Öncelikle Alma Linux, Rocky Linux ve Fedora gibi RHEL tabanlı dağıtımlarda kullanılır. Araç, ağ bağlantılarının veya arayüzlerin güven düzeyini tanımlayan güvenlik duvarı bölgelerini destekler. Bunun hakkında daha fazla bilgi edinmek ve nasıl kullanılacağını öğrenmek için ayrıntılı rehberimiz olan “Örneklerde Firewalld”ı ziyaret edin. Şimdi konuya geri dönelim.

SSHGuard’a arka uç olarak güvenlik duvarını kullanmasını söylemek için, “sshguard.conf” dosyasındaki “BACKEND” seçeneğinin “/usr/libexec/sshguard/sshg-fw-firewalld” olarak ayarlandığından emin olun.

sudo nano /etc/sshguard.conf
SSHGuard configuration using firewalld for the backend.
Backend için firewalld kullanılarak SSHGuard yapılandırması.

Ayrıca, yapılandırmada herhangi bir değişiklik yaptıysanız SSHGuard servisini yeniden başlatmayı unutmayın:

sudo systemctl restart sshguard

Engellenen saldırganlar, varsayılan güvenlik duvarı bölgesine (“genel”) eklenen sırasıyla “sshguard4” (IPv4 adresleri için) ve “sshguard6” (IPv6 adresleri için) adlı iki kurala eklenir.

SSHGuard firewalld rules name.
SSHGuard güvenlik duvarı kurallarının adı.

Şu anda SSHGuard tarafından engellenen IP adreslerinin listesini görüntülemek için aşağıdakileri çalıştırın:

sudo firewall-cmd --info-ipset=sshguard4
List the IP addresses blocked by SSHGuard’s firewalld backend.
SSHGuard’ın güvenlik duvarı arka ucu tarafından engellenen IP adreslerini listeleyin.

Buna göre IPv6 adresleri için komut şu şekildedir:

sudo firewall-cmd --info-ipset=sshguard6

Son olarak, şunu çalıştırarak gerçek zamanlı SSHGuard eylemlerini izleyebilirsiniz:

sudo journalctl -u sshguard -f

Ancak, farklı bir güvenlik duvarı bölgesi kullanıyorsanız, aşağıdaki talimatları izleyerek ayarlayabilirsiniz. Sadece “<zone-name>” ifadesini kendi bölge adınızla değiştirin.

sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop"
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"

IP Adreslerini Beyaz Listeye Alma

SSHGuard’da IP adreslerini beyaz listeye eklemek, etkinliklerinden bağımsız olarak belirli IP adreslerinin asla engellenmemesini sağlamanıza olanak tanır. Bu, sistem yöneticileri veya sık, meşru SSH erişimi olabilecek otomatik süreçler gibi güvendiğiniz IP’ler için önemli olabilir. İşte SSHGuard’da IP adreslerini beyaz listeye eklemenin yolu.

Öncelikle “sshguard.conf” dosyasındaki “WHITELIST_FILE” seçeneğinin aktif olduğundan ve yorum satırına alınmadığından emin olun.

The "WHITELIST_FILE" option must be active.
“WHITELIST_FILE” seçeneğinin aktif olması gerekmektedir.

Beyaz listeye alınmış adreslerin listesiyle dosyanın konumu Linux dağıtımınıza bağlı olarak değişebilir. Ubuntu gibi Debian tabanlı sistemler kullananlar için şu adreste bulunur:

/etc/sshguard/whitelistCode language: Bash (bash)

Alma, Rocky ve Fedora gibi RHEL tabanlılar için:

/etc/sshguard.whitelistCode language: Bash (bash)

Burada, SSHGuard tarafından hiçbir zaman engellenmesini istemediğiniz sunucuları üç farklı şekilde girebilirsiniz:

  • Tek bir IP adresi
  • Bir ağ aralığı
  • Bir ana bilgisayarın tam etki alanı adı (FQDN)

Örneğin:

192.168.0.34
192.168.0.0/24
myhost.domain.com

Yani dosyayı metin düzenleyicinizle açın, ihtiyacınız olan adresleri girin, dosyayı kaydedin ve çıkın. Elbette bundan sonra SSHGuard servisini yeniden başlatmayı unutmayın.

sudo systemctl restart sshguard



Yazının orijinalin buradan okuyabilirsiniz.