1- SSH Portunun değiştirilmesi

İlk komut ile  ssh config dosyasını açıyoruz ve başında yer alan diyez # işaretini silip farklı bir port numarası belirtiyoruz. İşlem sonrası ssh servisini yeniden başlatarak aktif edebiliriz.

2- SSH için ip izni 

SSH bağlantısını tek bir ip adresi üzerinden yaparak sunucu güvenliğini arttırabilirsiniz.

nano ile hosts.allow dosyasını açarak aşağıdaki satırları eklemeniz yeterli.

3-Ip tables hardering

Centos 7 default kurulumda iptables yerine firewald adında farklı bir servis ile gelmekte. Iptables’ı kurmadan önce bu servisi kaldrmamız gerekiyoır.

İlk olarak firewalld servisini kapatıyoruz

Yeniden başlamaması adına sistem ön yüklemesinden de kapatıyoruz

Otomatik başlamaması için servisi maskeliyoruz

Iptables servisini yükleyerek aktif ediyoruz

Tüm iptables içeriğini boşaltmak için

Script ve bot saldırılarından korunmak için

Syn ve flood saldırıları engellemek için

Xmas paketleri engellemek için

Ip tables hardering

4-Iptables zin verilmesi gereken portlar

İlk yapılacak iş yerel ağdan yani bilgisayarın kendisinden gelen isteklere izin vermek. Böylece VPS’in veritabanı ile iletişimi sağlanabilsin.

Server trafik akışı için 80 ve 443 portları

Pop3 için 110 ve 995

Imap için 143 ve 993

SMTP portu için 25,465,587

SSH için 22

Sistem güncellemeleri ve ping için kullanabilmak amacıyla outgoing bağlantılara izin verelim:

Gerekli olan portları açtıktan sonra diğer tüm hizmetleri sonlandıralım

Tüm ayarlar tamamlandığına göre kurallara bir göz atıp eksik kalan birşey olup olmadığını kontrol edelim:

Tüm iptables uygulamalarından sonra restart etmeyi unutmuyoruz.

4-Iptables Rate Limiting

Iptables güvenlik duvarında temel kurallara ilave olarak dos ve ddos ataklarına önlem almak için ekstra kuralar ekleyebiliriz.

Aşağıdaki komut sayesinde tek bir ip’den Apache servisine (80 portuna) doğru, aynı anda en fazla 100 bağlantıya izin vererek, 101. bağlantı isteği reddelir.

5- Iptables Hit-Count

Son bir dakka içinde aynı ip’den gelen 20’nin üzerinde syn paketi varsa 20 üstü paketleri Linux centos Sunucu Güvenliği Hardeningeder. Rate limit ile benzer çalışır ama bunda zaman kısıtlaması da verebiliriz.

6- Iptables Limit Burst

Apache servisine yani 80 portuna gelen syn paketlere bakar. Eğer 80 portuna bir saniyede 6 ‘dan fazla syn paketi gelirse loglanır. Bu sayede eğer syn saldırı olursa saldırının nerden geldiğini loglardan bakarak anlayabiliriz. Paketleri droplamayıp sadece loglamamızın sebebi syn saldırılarında spoofing yapılabilmesidir.

Eğer syn saldırılarını iptables ile englemeye çalışırsak saldırganlar istemedğimiz halde bizim için önemli olan ip’leri spoof ederek onların ip’si ile bize saldırabilirler bizde o spoof edilmiş ip’leri enggelersek istemediğimiz bir durum oluşur. O yüzden syn flood saldırılarını iptables ile sadece loglarız. Engellemek için syn‐cookie kullanırız. Alt kısımda yer alan 2 komutu iptables içerisine ekliyoruz

sonraki işlemde rsyslog dosyasını açarak, son satıra loglama için 2. komutu ekliyoruz

nano ya da tail -f ile log dosyasını okuyabilirsiniz. çıktı alttaki gibi olacaktır.

Iptables Limit Burst

6- Iptables Booyer Moore Algoritmesı

Wget kullanımını iptables ile engellemek için kullanabiliriz. Wget toolunun user‐agent’i Wget olduğu için paket başlıklarında user‐agenti Wget olan paketler drop edilmiş olur. (Eğer wget kullanırken user‐agent değiştirilirse işe yaramaz)

 

6- Linux dosya güvenliği:

777 iznine sahip dosyaların bulunarak tüm izilerin değiştirilmesi. Aşağıda yer alan komut ile tarama yaptığınız dizinde bulunan ve erişime açık tüm dosyaları 644 olarak düzenleyebilirsiniz.

Sunucu üzerinde  777 izni verilmiş dosyaların bulunması

777 izinli klasörlerin 755 olarak düzenlenmesi

777 izinli dosyaların 644 olarak düzenlenmesi

Alternatif olarak bu komutu da uygulayabilirsiniz.

Kullanıcı olmayan dosyaların yeniden düzenlenmesi.  İlk komut ile kullanıcısı olmayan dosya ve dizileri görebilir, 2. komut sayesinde eksik sahipli ve gurup tüm  kullanıcısını root yapabilirsiniz.

Rhost dosyaları kullanıcıların uzaktan bağlantı yapmalarını sağlayan bir dosya türüdür ve sunucu üzerinde bulundurulması kesinlikle önerilmez. Komut sayesinde  .rgost dosyalarını taratarak silebilirsiniz.

Herkes tarafından yazılabilir dosyaların düzenlenmesi.

SuID biti aktif olan dosyaların bulunması ve düzeltilmesi. İlk komut ile suid’si aktif olan dosyaları bulabilir ve ikinci komut ile bu dosyaları düzenleyebilirsiniz.

 PHP open_basedir Tweak

Aynı sunucuda yer alan ve hacklenen bir içeriğin farklı bir domaine zarar vermemesi için cpanel’de open basedir’i aktif edebilirsiniz. Bu şekilde zararlı shell dosyaları diğer dizinlere ulaşamayacaktır.

cPHulk Brute Force Protection

Yine WHM panel kullanıyorsanız, cphul servisini aktif etmelisiniz. Böylelikle sunucunuza düzenlenen bruteforce ataklarını engelleyebilirsiniz.

cPanel Security Advisor

WHM panel kullanıcıları için önemli bir bölüm olan wsecurity advisor çeşitli zaman aralıklarında sunucunuzu tarayarak güvenlik açıklarını size bildirecektir.

Apache sunucusunda kapatılması gereken PHP fonksiyonları.

WHM’de multi php.ini Editör bölümüne fonksiyon olarak ekleyebilirsiniz.

History ‘i detaylandırın

Bildiğiniz gibi history komutu ile sunucu üzerinde uygulanan geçmişe yönelik komutları görebiliriz, bu gözüken içeriği tarih ve saat ekleyerek detaylandırmak için yapmamız gereken.

açılan editor ile bashrc dosyasına alt kısımda yer alan kod bloğunu eklioruz.

çıktı resimdeki gibi olacaktır.

linux History 'i detaylandırın

Bash Kayıt Dosyalarınızı Loglayın

Tüm bash komutlarınızı loglayarak sunucu üzerinde daha önce hangi işlemleri sağladığınızı görebilirsiniz. Loglama yapabilmemiz için öncelikle bashrc dosyasını açıyoruz

ardından alt kısımda yer alan Promt Comand değişkenini ekliyoruz

2. adım olarak  rsyslog.conf dosyasını açıyoruz ve 2. komutu ekliyoruz ve servisi restart ediyoruz.

aşağıdaki komut ile tüm bash aktivitelerini okuyabilirsiniz.

bashkayit.log dosyasını sadece root kullancısının açabilmesi için iznini 400 olarak ayarlarız.

chmod 400 /var/log/bashkayit.log

6- Apache ve Php Sıkılaştırması

Öncelikle find / -name httpd.conf komutu ile  httpd conf dosyamızı buluyoruz. Sonrasında Apache servisinin versiyonunu telnet vs ile öğrenilmesini engellemek için OS yerine PROD ile değiştiriyoruz. Bu versiyon yeni Centos ile Production Only olarak geliyor.

Diğer bir işlem timeout değeri, saldırı anında bu değerin düşük olması, daha az kaynak tüketmesine neden olacaktır.

Apache servisi tcp protokolünü kullanır. Eğer KeepAlive off seçilirse her get post isteği için tekrar tekrar tcp 3’lü el sıkışma yapıması gerekir. Buda sunucun daha çok kaynak tüketmesine sebeb olur o yuzden on seçmemiz gerekir.

Fakat on seçildiğinde de ddos ataklarına karşı bir dezavantaj oluşabilir. Çünkü http get ddos atağında saldırganlar tek bir connection üzerinden get isteği yaparak bant genişliğini doldurmaya yönelik saldırı yapılabilir.

Keepalive özelliği açık iken bağlantı başına en fazla kaç adet request(istek) yapılabileceğini belirtiyoruz. Daha fazla yüksek performans için bu değer ya 0(sonsuz) yada yüksek bir değerde tutmak gerekir.

Bağlantının kaç saniye geçerli olacağını ayarlarız.15. saniye sonra bağlantı otamatik kapatılır istemci yei bağlantı açmak zorunda kalır.

Apache Çoklu süreç modülleri

ilgili komut ile yine Apache server’ınızın hangi çoklu süreç modülünü kullandığını öğrenebilirsiniz.

MPM PREFORK

Prefork çoklu süreç modülü gelen her istek için ayrı bir süreç(process) oluşturulur. Herbir süreç tek bir theread(iş  arçacığı) kullanır. Her istek birbirinden yalıtıldığı için kararlı bir yapısı vardır ama her istek için ayrı bir süreç  başlattığı için daha yavaştır.

StartServers:  Apache’nin başlatılması sırasında oluşturulacak child process sayısını belirler.

MinSpareServers: Herhangi bir anda gelebilecek isteklere karşı hazır, boşta bulunan minimum child process sayısını belirler. Bu sayıdan az boşta bekleyen çocuk süreç olduğu durumda, Apache ana süreci boşta beklemesi için yeni çocuk süreçler yaratır.

MaxSpareServers: Herhangi bir anda gelebilecek isteklere karşı hazır, boşta bulunan maximum child process sayısını belirler. Bu sayıdan fazla boşta bekleyen child process olduğu durumda, Apache ana süreci fazla olan süreçleri öldürür.

MaxClients: Aynı anda hizmet verilecek istek sayısını belirler. Bu sayıdan fazla istek geldiğinde, bu istekler kuyruğa alınır (Kuyrukta bekletilecek maksimum istek sayısını ListenBacklog yönergesi ile ayarlayabilirsiniz).

MaxRequestsPerChild: Tek bir child process ömrü boyunca cevap verebileceği maksimum istek sayısını belirler. 0 değeri sınırsız anlamına gelir.

MPM WORKER

Daha az memory tüketir ve daha hızlıdır. Bunun nedeni worker çoklu süreç modülünde prefortaki gibi her süreç tek bir thread kullanmaz birden fazla thread (multithread) kullanabilir ve her bir istek için farklı bir süreç oluşturulmaz  bunun yerine thread oluşturulur. Böylece hem daha olur hızlı hemde daha az kaynak tüketir. (thread‐safe  kütüphanleri olan uygulamalar için uygundur)

StartServers: Apache’nin başlatılması sırasında oluşturulacak child process sayısını belirler. Bu süreçlerden her biri ThreadsPerChild yönergesinde belirtilen kadar threade sahip olacaktır.

MaxClients: Aynı anda hizmet verilecek istek sayısını belirler. Bu sayıdan fazla istek geldiğinde, bu istekler kuyruğa alınır.

MinSpareThreads: Bütün süreçlerdeki toplam, minimum boştaki thread sayısını belirler (her sürecin sahip olması gereken boştaki minimum thread sayısını değil). Bu sayıdan az boşta bekleyen thread olduğu durumda, Apache bus sayıya ulaşana kadar yeni süreçler yaratır.

MaxSpareThreads: MinSpareThreads’e benzer şekilde, boştaki maksimum thread sayısını belirler.

ThreadsPerChild: Süreç başına yaratılacak thread sayısını belirler

**THEREAD iş parçacığı demektir. Multithread ve single thread olmak üzere iki çeşittir.multithread şekilnde çalışan süreçler(eğer processorslar destekliyorsa) birden fazla threadla çalışır ve her bir thread farklı cpu da  ç alışabilir.

Örnekle açıklarsak: 0’dan 100 kadar olan sayıların toplamını 0‐50 arasını birinci. threada aynı anda 50‐100 arasını da ikinci thread’a yaptırılarak işlem süresi 2 kat azaltılabilir.

Dizin listelemenin kapatılması:

Yine httpd conf üzerinde aşağıdaki komutları kullanarak dizin listelemeyi kapatabilir ya da istediğiniz dizinleri erişime açabilrsiniz

istediğiniz bir dizini açmak için

 

4.9

1 Yorum

  • Çok başarılı bir rehber olmuş. Belli ki bayağı emek harcanmış (:
    Elinize sağlık. Sitene arada uğrayacağım (:

Yorum Bırakın