OpenBSD PF ile brute force SSH saldirilarini engellemek

Disariya acik bir SSH sunucu calistiriyorsaniz buyuk risk altindasiniz demektir. Son birkac yildir SSH sunuculara yapilan saldirilarda oldukca fazla artis gozlemleniyor(Oyle ya SSH sunucusu bir sisteme dalmanin en saglam yolu?). Bunun icin genelde bruteforce tarzi yontemler kullaniliyor.

Genelde sinir bozucu loglardan baska bir ise yaramasa da bazen sansli birileri parolayi bulmayi basarabiliyor. Ornek: Dunyanin en guvenli sistemlerinden biri sayilacabilecek OS’lardan birinde(FreeBSD) bir arkadasin baglantisini test etmek icin parolasini cok basit birsey vermistim. Ben problem ile ugrasirken o arada sistemde benden baskalarinin da oldugunu hissettim:) -eve cok kotu bir his bu!- hemen loglara ve calisan/gizli prosesleri detaylica kontrol ettikten sonra biraz once degistirdigim parolayi sansli birinin buldugunu gordum.(Tum bu olanlar 30 dakika surmedi)velhasil davetsiz misafiri kovduk, bir daha gelmesini engelledik ama bu bir daha ayni duruma dusmeyecegimizi garanti etmez.

Bunun icin sistemlere yapilan bruteforce saldirilarina bir cozum bulmam gerekti. Kullanabilecegim tek arguman bir OpenBSD Firewall oldugu icin ben de onun uzerinde cozumler dusunmeye basladim…

Aslinda SSH servislerine yapilan brute force saldirilarini engellemenin en mantikli ve guvenli cozumu SSH default portunu degistirmek, mumkunse public-private key kullanmak ve
sisteme erisim yapabilecek kullanicilari (AllowUsers ile)belirlemek. Ama bazen bu cozumleri uygulamayacak duruda olabiliriz ya da SSH sunucu bizim kontrolumuzde olmayabilir.

Bu gibi durumlarda ise network seviyesinde cozum uretmemiz gerekecek. Kullandiginiz guvenlik duvari/IPS sistemine gore cozum degisecektir ama mantik ayni:

belirli zaman icerisinde belirli sayidan fazla istek yapan hostlari blokla! ve bunu ek programlar gerektirmeden aktif olarak (loglari analiz edip is isten gectikten sonra bloklama gibi degil)yap:)

Gelelim bunu Open/FreeBSD PF’de nasil yapacagimiza.

vi /etc/pf.conf

table <ssh_yasaklilar> persist

pass in on $ext_if proto tcp from any to ($ext_if) port ssh \
flags S/SA keep state (max-src-conn-rate 2/30, overload
<ssh_yasaklilar> flush global)

block  log (all) quick  from <ssh_yasaklilar

max-src-conn-rate 2/30 = Eger 30 saniye icerisinde herhangi bir IP adresinden 2 den fazla SSH

istegi gelirse o IP adresini ssh_yasaklilar tablosuna aktar, ve sonraki block kurali ile ssh_yasaklilar tablosundaki tum IP adreslerini blokla.

*OpenBSD 4.1 ve sonrasi icin keep state ontanimli geldigi icin yazilmasina gerek yoktur.

Yasaklanan IP adreslerinin belirli bir zaman icerisinde silinmesini istersek bunu cron’a yazacagimiz bir satirla halledebiliriz. (4.1 oncesi surumler icin

http://expiretable.fnord.se/ adresinden detayli bilgi edinebileceginiz expiretable, OpenBSD 4.1 ile birlikte pfctl -T expire komutunu kullanabilirsiniz.)

Ben 4.1 surumu kullandigim icin crontab’a asagidaki komutu calistirmasini soyluyorum.

pfctl -t ssh_yasaklilar -T expire saniye_cinsinden_deger.

This entry was posted in OpenBSD. Bookmark the permalink.

1 Response to OpenBSD PF ile brute force SSH saldirilarini engellemek

  1. alper says:

    paylaştiginiz için teşşekürler

Leave a Reply

Your email address will not be published. Required fields are marked *

12 + 7 =