Bir Linux sunucusunda SSH bağlantısı nasıl güvenli hale getirilir? IP ile erişim kısıtlaması

AçıkSSH gerçekleştirmenizi sağlar uzak bağlantı sunucuya, dosyaları manipüle edin ve sistemi yönetin. Bugün OpenSSH tabanlı bir sistemin güvenliğini artıracak en iyi yöntemlerden bahsetmek istiyoruz.

Yapılandırma dosyaları

  • /etc/ssh/sshd_config- OpenSSH sunucusu yapılandırma dosyası;
  • /etc/ssh/ssh_config- OpenSSH istemci yapılandırma dosyası;
  • ~/.ssh/- kullanıcı SSH ayarlarının saklandığı dizin;
  • ~/.ssh/yetkili_keys veya ~/.ssh/yetkili_keys- kullanıcı hesaplarına bağlanmak için kullanılan anahtarların (RSA veya DSA) listesi;
  • /etc/nologin- bu dosya sistemde varsa, sshd root dışındaki tüm kullanıcıların sisteme bağlanmasını yasaklar;
  • /etc/hosts.allow ve /etc/hosts.deny- yasaklama sistemi (güvenliğin bir parçası). ACL'ye benzer şekilde çalışır;
  • Varsayılan olarak SSH bağlantı noktası - 22

Gerekli değil - kapatın

Sunucunuz SSH üzerinden uzak bağlantı gerektirmiyorsa, devre dışı bıraktığınızdan emin olun. CentOS/RHEL gibi sistemlerde bu şu şekilde yapılır:

chkconfig sshd kapalı yum openssh-server'ı sil

SSH sürüm 2'yi kullanın

İlk sürümün SSH protokolü, ikinci sürümde kapatılan güvenlik sorunlarına sahiptir. Bu nedenle, ikinci sürümü kullanın. /etc/ssh/sshd_config dosyasının Protocol 2 olarak ayarlandığından emin olun.

SSH erişimini kısıtla

Varsayılan olarak, tüm sistem kullanıcıları sisteme SSH aracılığıyla bağlanma olanağına sahiptir. Güvenlik amacıyla SSH erişimini kısıtlamanızı öneririz. Örneğin, kök, merion ve ağ kullanıcıları için SSH'ye izin verin:

AllowUsers kök merion ağları

Öte yandan, belirtilenler dışındaki tüm kullanıcılara erişim izni verebilirsiniz:

DenyUsers kök merion ağları

hareketsizlik süresi

Etkin olmayan bir oturumun sonlandırılacağı (tamamlanacağı) süreyi belirtmek önemlidir. Bu, aşağıdaki seçeneklerle yapılabilir:

ClientAliveInterval 300 ClientAliveCountMax 0

Bu ayarda 300 saniye (5 dakika) boşta kalma süresi belirledik.

.rhosts dosyaları hakkında

Gerçek şu ki, bu dosya bir ana bilgisayar ve kullanıcı listesi içeriyor. içinde ise verilen dosya ana bilgisayar ve kullanıcı kombinasyonunu içerir, ardından verilen kullanıcışifre sormadan SSH üzerinden sisteme bağlanabilecektir. Bu "harika" özelliği devre dışı bırakmanızı öneririz:

IgnoreRhosts evet

Ana bilgisayar tabanlı kimlik doğrulama yok!

Lafta Ana Bilgisayar Tabanlı Kimlik Doğrulama Belirli bir ana bilgisayardaki bir kullanıcının sunucuya bağlanmasına izin verir. Devre dışı bırakmak:

Ana bilgisayar tabanlı Kimlik Doğrulama hayır

Kök üzerinden doğrudan bağlantı

PermitRootGiriş no

afiş yap

Bağlanan her kişi için, yetkisiz erişim sağlamaya çalışan davetsiz misafirleri tehdit edebileceğiniz bir başlık oluşturun. Banner parametresi, banner'ın ayarlanmasından sorumludur.

22 bağlantı noktası yalnızca içeriden!

Sistem bağlantı noktası 22'ye yalnızca güvenlik duvarı kural zinciri aracılığıyla erişim sağlayın. Hepsinden iyisi, erişimi yalnızca LAN içinden bırakın. Örneğin, içinde iptables 192.168.11.0/24'e erişim verebilirsiniz:

A RH-Güvenlik Duvarı-1-GİRİŞ -s 192.168.11.0/24 -m durum --durum YENİ -p tcp --dport 22 -j KABUL

nerede dinlenir

Varsayılan olarak, SSH mevcut tüm arabirimlerdeki bağlantıları dinler. Varsayılan bağlantı noktasını değiştirmenizi ve bağlantı için beklemeniz gereken IP adresini belirtmenizi öneririz. Örneğin, 962 numaralı bağlantı noktasını ve 192.168.11.24 IP adresini belirleyeceğiz.

Bağlantı Noktası 962 ListenAddress 192.168.11.24

güçlü şifreler

Güçlü parolalar kullanın. Ağda çevrimiçi, ücretsiz ve SMS olmadan kriptoya dayanıklı bir şifre oluşturacak birçok araç var :)

Boş şifreleri devre dışı bırak

Şifresiz kullanıcılar var. SSH'ye erişimleri de şu seçenek kullanılarak reddedilmelidir:

Port 962 PermitEmptyPasswords hayır

Günlükleri analiz et

Olay günlüğünü INFO veya DEBUG moduna ayarlayın - bu, sistem üzerinde daha geniş bir denetime sahip olmanızı sağlar:

LogLevel BİLGİSİ

Bu makale size yardımcı oldu mu?

Lütfen nedenini söyle?

Makalenin sizin için yararlı olmadığı için üzgünüz: (Zor değilse lütfen nedenini belirtin? Ayrıntılı bir yanıt verirseniz çok minnettar olacağız. Daha iyi olmamıza yardımcı olduğunuz için teşekkür ederiz!

Bir hizmet kamuya açık bir ağda "aydınlatıldığı" anda, hemen bir saldırı nesnesi haline gelir. Sorunlardan biri, şifre kaba kuvveti (kaba kuvvet) kullanarak erişim elde etme girişimidir. Ve SSH bu durumda bir istisna değildir.

Kimlik doğrulama günlük dosyası /var/log/auth.log veya analoglarının analizi, bir parolayı tahmin etme girişiminin genellikle birkaç IP'den aynı anda yapıldığını ve zamanla esnediğini gösterir.

SSH Kaba Kuvvet Koruması

Kendinizi bundan farklı şekillerde koruyabilirsiniz:

  • SSH Arka Plan Programı Yapılandırma Seçeneklerini Kullanma
  • paket filtresi
  • Özel uygulamalar
  • liman vuruşu

En basit ve etkili yol diğer görevleri etkilemezse varsayılan bağlantı noktası 22'yi örneğin 2002 olarak değiştirmektir. /etc/ssh/sshd_config dosyasına bir giriş yapıyoruz:

Bundan sonra, şifreleri tahmin etme girişimleri fiilen durur. Portun değiştirilemediği zamanlar vardır. Alternatif olarak, belirli kullanıcılara (özellikle kök) veya bir gruba SSH erişimini kısıtlayabilirsiniz. sshd_config'de bundan birkaç parametre sorumludur: AllowUsers, AllowGroups, DenyUsers ve DenyGroups. Bir oturum açma ile bir IP veya alt ağ belirtebilmeniz uygundur. Örneğin, kullanıcı yöneticisine ve kullanıcıya yalnızca bir IP'den erişime izin verelim:

Diğer bir etkili kaba kuvvet koruma seçeneği, kimlik doğrulama için sertifikaların kullanılmasıdır. Ayrıca, özel eşleştirme parametresini kullanarak, genel bölümün parametrelerini yeniden tanımlayabileceğiniz koşullu bir blok oluşturabilirsiniz. Örneğin, kök kullanıcı için bir parola ile SSH oturumunu devre dışı bırakalım ve diğer herkese izin verelim:

# herkesin şifreyle erişmesine izin ver
Parola Doğrulama evet
# root sadece sertifikayı kullanacak
kullanıcı kökünü eşleştir
Parola Doğrulama hayır
KbdInteractiveAuthentication hayır

TCP Wrapper kullanarak, herhangi bir hizmete yalnızca belirli IP'lerden erişimi de kısıtlayabiliriz, bunun için /etc/hosts.allow veya /etc/hosts.deny dosyasına gerekli kuralı yazmanız yeterlidir. /etc/hosts.allow dosyasına yalnızca gerekli alt ağdan erişime izin verelim:

sshd: 192.168.1.0/24: izin ver

Veya /etc/hosts.deny'de:

sshd:TÜM:reddet
sshd: 192.168.1.0/24 HARİÇ TÜMÜ: izin ver

Paket filtresi, gereksiz paketleri atarak bağlantı parametrelerini çok doğru bir şekilde ayarlamanıza olanak tanır. Yardımı ile 22. bağlantı noktasına erişimi yalnızca belirli adreslerle kısıtlamak kolaydır. Basit örnek:

iptables -A GİRİŞ -s !192.168.0.1 -p tcp -m tcp --dport 22 ↵
-j REJECT -reject-ile icmp-port-ulaşılamaz

Yönetici işyerine bağlı değilse, bağlantı noktalarına ve IP adreslerine göre paket filtreleme çok etkili değildir. Bu durumda yardım özel araçlar: Fail2ban , Sshguard . Fail2ban başlangıçta SSH'yi güvence altına almak için tasarlanmıştır. Bugün zaten herhangi bir uygulama için kolayca özelleştirilebilen bir çerçeve olmasına rağmen. Çalışma prensibi çok basittir. Arka plan programı, herhangi bir şüpheli etkinlik için günlükleri düzenli olarak kontrol eder. Şüpheli IP adresi daha sonra iptables veya TCP Wrapper tarafından engellenir. Ayarlarda belirtilen süreden sonra, yasal bir düğümü yanlışlıkla engellememek için blok genellikle kaldırılır. Kural tetiklendiğinde, /var/log/fail2ban.log günlüğüne bir olay yazılır ve bir e-posta gönderilebilir.

Tek bir işlem aynı anda birden çok hizmeti kontrol edebilir ve paket, popüler Linux uygulamaları için kullanıma hazır ayarlarla birlikte gelir. Varsayılan olarak yalnızca SSH korunur.

Ubuntu ve Debian'da şu komutla kurun:

$ sudo apt-get install fail2ban

Tüm ayarlar, /etc/fail2ban dizininde bulunan çeşitli dosyalarda yapılır. Fail2ban.conf arka plan programının başlatma parametrelerini saklar, jail.conf kontrollü hizmetleri açıklar (SSH bölümünün içinde).

etkin=doğru
bağlantı noktası=22
filtre=sshd
günlük yolu = /var/log/auth.log
maksimum deneme = 3

Filtreler ve eylemler, filter.d ve action.d alt dizinlerinde bulunan dosyalara yazılır. Varsayılan olarak, tüm dosyalar .conf uzantısına sahiptir, bunlara dokunmamak daha iyidir (jail.conf dahil). Tüm değişiklikler, .local uzantılı bir dosyada (örneğin, jail.local) yapılmalıdır, parametreleri ilkinden ayarları değiştirir ve yükseltme sırasında kaybolmaz. Filtrenin çalışıp çalışmadığını kontrol etmek için fail2ban-regex yardımcı programını kullanabilirsiniz.

Ssh sunucusuna erişimi korumak için çeşitli kurallar.

1. Standart bağlantı noktasına ek olarak bir bağlantı noktasını daha dinlemek için ssh sunucu yapılandırmasına ekleyin. (Hatırlama kolaylığı için tüm sunucularınız için 4 yinelenen sayı kullanabilirsiniz).

$ sudo vi /etc/ssh/sshd_config Bağlantı Noktası 22 Bağlantı Noktası xxxx

2. Port 22'ye yapılan çağrıları yalnızca güvenilir ip adresleriyle sınırlandırıyoruz * örneğin 8.8.8.8 (bu tür birkaç kural yapabilirsiniz, iş / ev)

$ sudo vi /etc/sysconfig/iptables -A GİRİŞ -s 8.8.8.8 -p tcp -m durum --durum YENİ -m tcp --dport 22 -j KABUL

3. ipv6 kullanıp kullanmadığımızı kontrol etmeyi unutmayın, öyleyse fazlalığı kapatın

$ sudo vi /etc/sysconfig/ip6tables *filter:GİRİŞ KABUL :İLERİ KABUL :ÇIKIŞ KABUL -A GİRİŞ -m durum --durum KURULDU,İLGİLİ -j KABUL -A GİRİŞ -p ipv6-icmp -j KABUL -A GİRİŞ - i lo -j KABUL -A GİRİŞ -m durum --durum YENİ -m tcp -p tcp --dport 80 -j KABUL -A GİRİŞ -m durum --durum YENİ -m tcp -p tcp --dport 443 -j KABUL -A GİRİŞ -j REJECT --reddetme-ile icmp6-adm-yasaklanmış -A İLERİ -j REJECT --reddetme-ile icmp6-adm-yasaklı KOMİT

Sadece belirli bir adreste ssh kullanabilmek için konfigürasyon dosyasında olması yeterlidir. sshd_config bir parametre belirtin ListenAddress(örn. ListenAddress 74.125.200.100). Bu durumda ssh sadece bu adreste olacak ve ipv6 üzerinden çalışmayacaktır.

4. İstemci tarafında ssh yapılandırma dosyasını kullanın.

Konum: ~/.ssh/config

# düzeltme Yazma başarısız oldu: kırık boru ServerAliveInterval 120 TCPKeepAlive hayır # kısa adları kullanmak için Host dev-vps # ip adresi veya genel Alan adı Ana bilgisayar adı 127.0.0.3 # Hangi kullanıcının altında oturum açılacağı Kullanıcı geliştirici # Yetkilendirme için anahtar dosyası (kullanılıyorsa) IdentityFile ~/.ssh/id_rsa.dev

Ve bir yapılandırma dosyası kullanmanın başka bir örneği:
{<1>}

Ana Bilgisayar ssh-server-1 Ana Bilgisayar Adı 1.2.3.4 Kullanıcı dev Bağlantı Noktası 1234 Ana Bilgisayar ssh-server-2 Kullanıcı kök # Ana Bilgisayar Adı 192.168.10.20 # nc, -q0 olmadan, RHEL tabanlıysa ve -q0 ile debian tabanlı IdentityFile ~/.ssh/id_rsa.work -pc ProxyCommand ssh -q0 ssh-sunucusu-1 nc -q0 192.168.10.20 22

Ve şimdi ssh-server-1'e bağlanırken hemen ihtiyacımız olan ana bilgisayara atlayacağız. (Örneğin, sunucularda farklı anahtarlarla kullanımı uygundur)

Ve yenilikçi proxy seçeneği:

{<2>}

Ngrok istemcisini güvenlik duvarının arkasındaki bir sunucuya indirin. İkili dosyayı çalıştırın ve hangi bağlantı noktasını iletmemiz gerektiğini belirtin

SSH, sunucuyla güvenli bir bağlantı oluşturmanıza izin verir, ancak SSH hizmetinin düzgün çalışması için internete erişebilmesi gerekir. Bu, olası saldırganlar için bir saldırı vektörü oluşturur, dolayısıyla SSH'nin daha fazla korumaya ihtiyacı vardır.

Genel olarak, ağa erişimi olan herhangi bir hizmet potansiyel bir hedeftir. Bu hizmetlerin günlüklerinde, tekrarlanan, sistematik oturum açma denemelerini fark edebilirsiniz - bunlar, kullanıcılar ve botlar tarafından gerçekleştirilen kaba kuvvet saldırılarıdır.

Fail2ban hizmeti, iptables güvenlik duvarını önceden tanımlanmış sayıda başarısız oturum açma denemesine dayalı olarak otomatik olarak yeniden yapılandıran kurallarla saldırıları azaltabilir. Bu, sunucunun yönetici müdahalesi olmadan yetkisiz erişime derhal yanıt vermesini sağlar.

Bu kılavuz, bir Ubuntu 14.04 sunucusunda fail2ban kurmanıza ve yapılandırmanıza yardımcı olacaktır.

fail2ban'ı yükleme

Ubuntu deposu, standart paket yöneticisi kullanılarak kurulabilmesi için fail2ban paketini sağlar.

Paket dizinini güncelleyin ve fail2ban'ı şu komutlarla kurun:

sudo apt-get güncellemesi
sudo apt-get install fail2ban

Artık yardımcı programı yapılandırmaya başlayabilirsiniz.

fail2ban yapılandırmaları

Fail2ban yapılandırma dosyaları /etc/fail2ban dizininde saklanır. Varsayılan ayarlar jail.conf dosyasında bulunabilir.

Bu dosya bir paket yükseltmesi sırasında değiştirilebileceğinden, düzenlemeye gerek yoktur. İçeriğini başka bir dosyaya kopyalamak ve oradaki parametreleri ayarlamak daha iyidir. Bu iki dosyanın düzgün çalışması için, yalnızca jail.local dosyasında geçersiz kılınması gereken ayarları yeni dosyada bırakmak en iyisidir. Tüm varsayılan ayarlar jail.conf dosyasından okunacaktır.

jail.conf dosyasını kopyalayın ve onu jail.local dosyası için temel olarak kullanın. Bunu yapmak için şunu girin:

awk "( printf "# "; yazdır; )" /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Bundan sonra jail.conf'u görüntüleyin:

sudo nano /etc/fail2ban/jail.conf

Bu dosyada bazı ayarlar güncellenebilir. Bölüm ayarları, fail2ban'ın desteklediği tüm hizmetler için geçerli olacaktır (bu değerler, yapılandırma dosyaları bu hizmetler).


. . .
yoksay ip = 127.0.0.1/8
. . .

ignoreip seçeneği, fail2ban'ın yok sayacağı kaynak adresleri yapılandırır. Varsayılan olarak, yerel makineden gelen trafiğin geçmesine izin verir. Yoksayılacak diğer adresleri, bir boşlukla ayırarak, ignoreip yönergesinin sonuna yerleştirerek ekleyebilirsiniz.


. . .
ban süresi=600
. . .

bantime parametresi, kimlik doğrulaması başarısız olursa istemcinin bloke edileceği süreyi ayarlar. Değeri saniye cinsinden ölçülür. Varsayılan değer 600 saniyedir (10 dakika).


. . .
bulma zamanı = 600
maksimum deneme = 3
. . .

Dikkat edilmesi gereken sonraki iki parametre findtime ve maxretry'dir. Birlikte, yasa dışı kullanıcıların engelleneceği koşulları tanımlarlar.

maxretry değişkeni, oturum açma girişimlerinin sayısını belirtir ve findtime, kullanıcının kimliğinin doğrulanması gereken zaman aralığıdır. Müşteri bu göstergelerden herhangi birini aşarsa bloke edilir. Varsayılan olarak fail2ban hizmeti, kimlik bilgilerini sağlayamayan istemcileri 10 dakika içinde 3 kez engeller.


. . .
destemail= [e-posta korumalı]
gönderen adı = Fail2Ban
mta=posta gönder
. . .

Destemail, sendername ve mta parametreleri, e-posta uyarılarını yapılandırmanıza izin verir. destemail parametresi adresi belirtir E-posta Bu, engellenen kullanıcılar hakkında mesajlar almalıdır. sendername parametresi mesajın göndericisini belirtir. mta parametresi, posta göndermek için hangi posta hizmetinin kullanılacağını belirtir. Bu seçenekleri jail.local bölümüne ekleyin ve uygun değerleri ayarlayın.


. . .
eylem = $(eylem_)s
. . .

Bu ayar, bir yasaklama durumunda fail2ban eylemini yapılandırır. action_ değeri dosyada bu parametreden biraz önce tanımlanır. Varsayılan eylem, güvenlik duvarını yeniden yapılandırarak yasaklama zaman aşımı süresi dolana kadar saldırganın trafiğini engeller.

E-posta uyarıları ayarlamak istiyorsanız, jail.local dosyasındaki action öğesini ekleyin veya açıklamasını kaldırın ve action_ olan değerini action_mw olarak değiştirin. E-postanın günlüklerden ilgili satırları içermesini istiyorsanız, action_mwl değerini belirtebilirsiniz. E-posta uyarılarını kullanmayı seçerseniz, posta ayarlarınızın bunları desteklediğinden emin olun.

Bireysel parametreler

Bireysel hizmetler için destek, aynı adı taşıyan özel bölümlere dahildir. Örneğin, ssh hizmet seçenekleri .

Bu bölümlerin her biri, jail.local'daki bölüm başlığındaki açıklama kaldırılarak ve etkinleştirilen satırın değeri "true" olarak değiştirilerek etkinleştirilebilir:


. . .
etkin=doğru
. . .

Varsayılan olarak yalnızca SSH hizmeti desteklenir ve diğer tüm hizmetler devre dışı bırakılır.

Bu bölümler, bölümde ayarlanan değerleri temel alır ve gerektiği gibi ayarlar. Herhangi bir değeri geçersiz kılmak için jail.local'a uygun hizmet için bir bölüm ekleyin ve değerlerini değiştirin.

Diğer bazı parametreler de burada ayarlanır. filter parametresi, günlükteki bir satırın başarısız bir kimlik doğrulama girişimini gösterip göstermediğini belirlemeye yardımcı olur; logpath parametresi fail2ban'a söz konusu hizmet için günlüklerin nerede olduğunu söyler.

filter parametresinin değeri, /etc/fail2ban/filter.d dizininde bulunan bir .conf dosyasına bağlantıdır. Bu dosyalar içerir düzenli ifadeler, günlükteki satırın başarısız bir kimlik doğrulama girişimi hakkında bir mesaj olup olmadığını belirler. Bu dosyalar, oldukça karmaşık olduklarından ve çoğu durumda varsayılan seçenekler uygun olduğundan bu kılavuzun kapsamı dışındadır.

Filtreleri bu dizinde görüntüleyebilirsiniz:

ls /etc/fail2ban/filter.d

Gerekli hizmetle ilişkili dosyayı bulun ve ile açın. Metin düzeltici. Dosyaların çoğu yeterince iyi yorumlanmıştır ve hizmet koruma komut dosyasıyla tanışabilirsiniz. Bu filtrelerin çoğunun jail.conf dosyasında karşılık gelen bölümleri vardır (varsayılan olarak devre dışıdırlar). Gerekirse jail.local dosyasında etkinleştirilebilirler.

Diyelim ki Nginx ile sunulan bir web siteniz var. Web sunucusu günlükleri, başarısız oturum açma girişimleriyle sürekli olarak güncellenir. Fail2ban yardımcı programı /var/log/nginx/error.log dosyasını sürekli kontrol etmek için nginx-http-auth.conf dosyasını kullanabilir.

Bunun için gerekli parametrelerin neredeyse tamamı zaten /etc/fail2ban/jail.conf dosyasındaki bölümde bulunmaktadır. Jail.local dosyasındaki bu bölümün açıklamasını kaldırmanız ve etkinleştirilmiş parametrede değeri true olarak ayarlamanız yeterlidir.

. . .
etkin=doğru
. . .

Bundan sonra fail2ban'ı yeniden başlatmanız gerekir.

fail2ban'ı yapılandırma

Artık fail2ban'ın nasıl çalıştığının temellerini biliyorsunuz. SSH hizmeti ve Nginx için bir otomatik engelleme ilkesi yapılandırmayı deneyin. Bir IP adresi yasaklandığında e-posta mesajları göndermek için fail2ban aracına da ihtiyacımız var.

İlk olarak, gerekli yazılımı yükleyin.

Fail2ban günlüklerini izleyeceğinden ve bildirim göndermek için sendmail göndereceğinden nginx'e ihtiyacınız olacak. Sunucu önyüklendiğinde güvenlik duvarı kurallarını kaydetmek ve otomatik olarak yüklemek için iptables-persistent paketine de ihtiyacınız vardır. Tüm bu paketler, standart Ubuntu depolarından indirilebilir:

sudo apt-get güncellemesi
sudo apt-get install nginx sendmail iptables-kalıcı

Temel bir güvenlik duvarı kurmak için fail2ban hizmetini durdurun.

Güvenlik duvarı ayarları

Altta yatan güvenlik duvarı desteklemelidir yerleşik bağlantılar, ayrıca sunucunun kendisi tarafından oluşturulan trafik ve SSH ve web sunucusu bağlantı noktalarına yönlendirilen trafik. Diğer tüm trafik engellenecektir. Kurallar şöyle görünür:

sudo iptables -A GİRİŞ -i lo -j KABUL
sudo iptables -A INPUT -m conntrack --ctstate KURULDU, İLGİLİ -j KABUL
sudo iptables -A GİRİŞ -p tcp --dport 22 -j KABUL
sudo iptables -A GİRİŞ -p tcp -m çoklu bağlantı --dports 80.443 -j KABUL
sudo iptables -A GİRİŞ -j DÜŞÜR

Bu komutlar yukarıdaki politikayı uygular. Geçerli güvenlik duvarı kurallarını görüntülemek için şunu yazın:

sudo iptables -S
-P GİRİŞ KABUL
-P İLERİ KABUL
-P ÇIKTI KABUL
-A GİRİŞ -i lo -j KABUL




-A GİRİŞ -j DÜŞÜR

Yeniden başlatmanın ardından kaybolmamaları için güvenlik duvarı kurallarınızı kaydedin.

sudo dpkg-iptables-kalıcı yeniden yapılandırma

Fail2ban'ı yeniden başlatın:

sudo hizmeti fail2ban başlangıcı

Güvenlik duvarı kurallarını sorgula:

sudo iptables -S
-P GİRİŞ KABUL
-P İLERİ KABUL
-P ÇIKTI KABUL
-N fail2ban-ssh

-A GİRİŞ -i lo -j KABUL
-A GİRİŞ -m conntrack --ctstate İLGİLİ,KURULMUŞ -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 22 -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 80 -j KABUL
-A GİRİŞ -j DÜŞÜR
-A fail2ban-ssh -j DÖNÜŞ

Artık her zincirin kendi varsayılan politikası vardır. Güvenlik duvarında da beş temel kural vardır. Fail2ban yapısı kırmızı renkle vurgulanmıştır: bu araç zaten SSH engelleme kurallarını uygular. Fail2ban yapıyı ilk bloğa kadar eklemeyebileceğinden bazen bu yapı ilk başta görüntülenmez.

fail2ban'ı yapılandırma

Şimdi jail.local dosyasına fail2ban ayarlarını eklemeniz gerekiyor:

sudo nano /etc/fail2ban/jail.local

Burada daha katı bir engelleme zaman aralığı ayarlayabilirsiniz. Başlığı bulun ve yorumunu kaldırın. Bu bölümde bantime parametresini hizmetin istemciyi yarım saat bloke edecek şekilde değiştirin:


. . .
ban süresi=1800
. . .

Ayrıca bildirimleri ayarlamanız gerekir. İlk olarak, . Bu mesajları toplamak için kullanmak istediğiniz e-posta adresini girin:


. . .
destemail= [e-posta korumalı]
. . .

Gönderen adı için herhangi bir uygun değer belirtin. Burada, posta hizmetinin kolayca filtreleyebileceği açıklayıcı bir değer kullanılması önerilir.

O zaman eylemin değerini düzeltmeniz gerekir. İstemciyi engelleyen ve ardından bir "whois" raporu gönderen bir action_mw değeri ayarlayabilirsiniz. action_mwl değeri aynı şeyi yapar ancak mesajda ilgili günlük satırlarını da gönderir.


. . .
eylem = %(action_mwl)s
. . .

maxretry yönergesindeki SSH bölümünde, başarısız kimlik doğrulama girişimi sayısını değiştirebilirsiniz. Standart olmayan bir bağlantı noktası kullanıyorsanız (22 değil), bunu bağlantı noktası parametresinde belirtin. Daha önce belirtildiği gibi, bu sunucu zaten etkindir.

Ardından nginx-http-auth bölümünü bulun. Başlığın açıklamasını kaldırın ve etkinleştirilmiş parametrenin değerini "true" olarak değiştirin.

. . .

etkin=doğru
. . .

Web sunucusu standart bağlantı noktalarını kullanıyorsa ve günlükleri standart dizinde saklanıyorsa, bu bölümde yapılması gereken tek şey budur.

fail2ban yeniden başlatılıyor

Dosyayı kaydedip kapatın.

Ardından fail2ban hizmetini yeniden başlatın. Bazen onu durdurmak ve sonra yeniden başlatmak daha da iyidir.

sudo hizmeti fail2ban durdurma
sudo hizmeti fail2ban başlangıcı

Tüm güvenlik duvarı kurallarının yüklenmesi birkaç dakika sürebilir. Bazen ilk istemci bloke edilene kadar kurallar eklenmez. Bir süre sonra yeni kuralları test edebileceksiniz:

sudo iptables -S
-P GİRİŞ KABUL
-P İLERİ KABUL
-P ÇIKTI KABUL
-N fail2ban-nginx-http-auth

-N fail2ban-ssh

-A INPUT -p tcp -m multiport --dports 80.443 -j fail2ban-nginx-http-auth


-A GİRİŞ -p tcp -m çoklu bağlantı noktası --dports 22 -j fail2ban-ssh

-A GİRİŞ -i lo -j KABUL
-A GİRİŞ -m conntrack --ctstate İLGİLİ,KURULMUŞ -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 22 -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 80 -j KABUL
-A GİRİŞ -j DÜŞÜR
-A fail2ban-nginx-http-auth -j RETURN

-A fail2ban-ssh -j DÖNÜŞ

Kırmızı çizgiler fail2ban politikası tarafından oluşturulur. Şu anda trafiği yeni, neredeyse boş zincirlere yönlendiriyorlar ve ardından trafiğin INPUT zincirine geri akmasına izin veriyorlar.

Bu zincirlere engelleme kuralları eklenecektir.

Engelleme politikasını test etme

Artık fail2ban sunucusunda kimlik bilgileri olmayan başka bir sunucudan bağlanarak kuralları test edebilirsiniz.

Var olmayan kimlik bilgilerini kullanarak sunucuya bir SSH bağlantısı oluşturmayı deneyin:

ssh [e-posta korumalı] _sunucu_IP'si

Parola için rastgele bir karakter dizisi girin. Birkaç kez tekrarlayın. Bir noktada, fail2ban erişimi reddeder ve "İzin reddedildi" mesajını görüntüler.

İlk sunucuya dönün ve yeni iptables kurallarını gözden geçirin:

sudo iptables -S
-P GİRİŞ KABUL
-P İLERİ KABUL
-P ÇIKTI KABUL
-N fail2ban-nginx-http-auth
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80.443 -j fail2ban-nginx-http-auth
-A GİRİŞ -p tcp -m çoklu bağlantı noktası --dports 22 -j fail2ban-ssh
-A GİRİŞ -i lo -j KABUL
-A GİRİŞ -m conntrack --ctstate İLGİLİ,KURULMUŞ -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 22 -j KABUL
-A GİRİŞ -p tcp -m tcp --dport 80 -j KABUL
-A GİRİŞ -j DÜŞÜR
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-ile icmp-port-ulaşılamaz
-A fail2ban-ssh -j DÖNÜŞ

Yeni kural kırmızı renkle vurgulanmıştır. İkinci sunucunun IP adresinden gelen trafiği engeller. SSH bağlantı noktası. Yakında istemcinin engellendiğine dair bir bildirim alacaksınız.

Çözüm

Artık fail2ban'ın temellerine aşinasınız ve bu araç için temel bir yapılandırma oluşturabilirsiniz.

Bu yazıda, SSH'yi korumanın temel yöntemine bakacağız. yığın kaba kuvvet saldırıları. Bu durumda, toplu kaba kuvvet saldırısı, özellikle SSH'niz için hedefli parola tahmini anlamına gelmez, ancak bir parola seçiminde kararsız olan oturum açma-parola çiftlerinin daha sonra tanımlanması için bir dizi sunucunun kapsamlı bir şekilde ele geçirilmesi anlamına gelir.

Bir SSH toplu kaba kuvvet saldırısının ana özellikleri, IP aralıklarının kapsamlı bir şekilde taranmasıdır. açık bağlantı noktası 22 ve sık kullanılan bir kullanıcı adı ve şifre olarak kullanın (örn. root:passwd123, admin:server123, vb.).

Sunucunuzdaki başarısız SSH yetkilendirme girişimlerinin günlük dosyalarından istatistikleri görüntülemek için şu komutu girin:

Kedi /var/log/güvenli* | grep "Başarısız parola" | grep sshd'si | awk "($1,$2 yazdır)" | sıralama -k 1,1M -k 2n | benzersiz -c

Bu ekran görüntüsü, günlere göre başarısız yetkilendirmelerin sayısına ilişkin istatistikler sağlar. Benzer verileri çalarsanız, SSH'nizi toplu kaba kuvvetten korumak için adımlar atmalısınız.

1. Eğer kullanma yetkilendirme için yaygın olarak kullanılan kullanıcı adları, örneğin kök, yönetici, yönetici, kullanıcı vb. ve yetkilendirme için karmaşık bir şifre kullanın, ardından hemen ikinci adıma geçebilirsiniz. Parolayı daha karmaşık bir parolayla değiştirmek için şu komutu girin:

Parola #your_login#

Nerede #Kullanıcı girişin#- Kullanıcı adınızı.
Yeni bir şifre girerken şifre görüntülenmez, imleç tek bir yerde olacaktır.

SSH üzerinden sunucuya gidelim, yeni bir kullanıcı oluşturalım ve ona bir şifre belirleyelim, bunun için şu komutları gireceğiz:

adduser #newuser# şifre #newuser#

Nerede #yeni kullanıcı#- Yeni kullanıcı adınız, yaygın olarak kullanılan kullanıcı adlarını kullanmayın, fena bir seçenek değil senin_nickadmin(ör. foxadmin, useralex, rootidler).

2. Bundan sonra, yeni bir kullanıcı adı ve şifre ile SSH'den geçiyoruz. Ve SSH arka plan programı yapılandırmasını (sshd_config) şu komutla açın:

Vi /etc/ssh/sshd_config

O zaman şöyle bir şey görmelisiniz:

ile başlayan satırlar # yorumlanır.

İle SSH'yi toplu kaba kuvvetten koruyun, açıklamayı kaldırın ve değiştirin veya ekleyin aşağıdaki seçenekler dosya:
A) liman- hangi bağlantı noktası SSHD bağlantıları kabul eder ve hizmet verir. Açıklamayı kaldır (satırın başlangıcından önce kaldır # ) ve varsayılan değeri değiştirin 22 , 1024'ten 65536'ya kadar, ayrılmış olanlar hariç - ayrılmış bağlantı noktalarının listesi, örneğin:

Liman 2022

Silmek # ve değeri değiştir bağlantı noktası 22, önce klavyede basın Ben, gerekli satırı düzenledikten sonra tuşuna basın ESC

B) GirişGraceTime— sisteme kullanıcı kaydı için bekleme süresi. Kullanıcının bu yönerge tarafından ayrılan süre boyunca sisteme giriş yapmak için zamanı yoksa, oturum sonlandırılır. Bu değeri azaltalım:

GirişGraceZaman 1dk

C) İzin verRootGiriş- kullanıcıya izin ver kök SSH protokolü ile giriş yapın. Değişmek HAYIR.

PermitRootGiriş no

D) Kullanıcılara İzin Ver— boşlukla ayrılmış olarak SSH protokolü aracılığıyla oturum açmaya izin verilen kullanıcı adları. Burada #your_login# yerine yeni oluşturulan kullanıcı adını belirtiyoruz.

Kullanıcılara İzin Ver #your_login#

e) MaxAuthTries- Oturum başına oturum açma girişimi sayısı. İzin verilen maksimum deneme sayısına ulaşıldığında oturum sonlandırılır.

MaxAuth Denemeleri 2

Sonuç olarak, şunları elde edeceğiz:

Bağlantı Noktası 2022 LoginGraceTime 1 dk PermitRootLogin İzin VerilmezKullanıcılar #your_login# MaxAuthTries 2

Bu yazımızda kurulumu tamamlayacağız. SSH kütleye karşı korumak acımasız güç. Düzenledikten sonra , klavyede basın : , aşağıda bir çizgi belirir ve ardından içine girin wq ve tuşuna basın Girmek. Bu durumda, yapılan tüm değişiklikler kaydedilecektir.

Yanlış bir şey yaptıysanız (örneğin, yanlışlıkla bir şeyi sildiyseniz), kaydetmeden çıkmak klavye kısayolu yerine kullan wq, anahtarlar Q!

SSH yapılandırmasını tamamladıktan sonra arka plan programını şu komutla yeniden başlatın:

hizmet sshd yeniden başlatma

Artık SSH protokolü ile bağlanırken yeni bağlantı noktasını kullanın 2022 (veya ayarlarda belirttiğiniz) yerine standart bağlantı noktası 22.

SSH kurulumuyla ilgili bir sonraki yazıda, şifre yetkilendirmesini yasaklarken ve sadece özel bir SSH anahtarı kullanarak yetkilendirmeye izin verirken, kendimizi mümkün olduğunca şifre tahmininden koruyacağımızı söylemek isterim.

Temas halinde