Linux sertleştirme - web sunucuları


31

Bir Linux web sunucusu kurarken denetim listeniz / rutininiz nedir?

Maksimum güvenlik sağlamak için neler önerirsiniz?

Tekrarlanan bakımı yapmak için tercih edilen herhangi bir yol var mı?

Yanıtlar:


27
  • Öncelikle, Apache'deki (php, cgi, ruby, ...) herhangi bir komut dosyası oluşturma özelliğinin, komut dosyasını çalıştıran kullanıcının ayrıcalıklarına sahip bir kabuk hesabının potansiyel eşdeğeri olduğunu unutmayın.

  • Sunucu birden fazla kullanıcıyla paylaşılıyorsa, suexec (- veya ITK MPM - David Schmitt tarafından Önerilen ) kullanmayı düşünebilirsiniz, böylece her komut dosyası aynı apache kullanıcısı olarak çalışmaz.

  • Apache'yi sanallaştırın ya da chroot yapın, böylece herhangi bir uzlaşma en azından ek bir güvenlik katmanında yer alır. Apache'yi düşürdüğünüzde, kütüphaneleri hapse attığınız için bakımın zorlaşabileceğini unutmayın. FreeBSD'deyseniz bunun yerine bir hapishane kullanabilirsiniz, bunun için bakımı çok daha kolaydır, çünkü sadece apache'yi kurabilirsiniz. portlardan alın ve herhangi bir kütüphane bağımlılığı için endişelenmenize gerek kalmadan portaudit'i çalıştırın ve dosyaları el ile hareket ettirin, bu her zaman çirkin bir karışıklık olur. BSD hapları ile sadece paket yönetim sistemini (limanlar) kullanmaya devam edebilirsiniz. (GNU / Linux'ta VServer'ı sanallaştırma için de kullanabilirsiniz . - David Schmitt tarafından önerilmiştir )

  • (Açıkçası) Güncellemeleri ve yamaları takip edin, yalnızca Apache için değil, PHP, ruby, perl, vb ... için de yalnızca işletim sisteminize tüm güncellemeleri vereceğinize güvenmeyin. Bazı distrolar yamaları ile oldukça yavaştır. Maruz kalma süresini mümkün olduğu kadar 0 günlük güvenlik açıklarıyla sınırlayın. Sok milw0rm , RSS okuyucunuza beslemeyi abone insecure.org vb ... Bu sadece OS bir yama oluşturması için etrafında kötüye gitmeden, ayrıca bazı php açıkları öğrenecektir açıkları hakkında bilgi yardımcı olacak, e-posta listeleri Örneğin, işletim sisteminiz tarafından bile yönetilemeyecek veya düzeltilemeyen uygulamalar.

  • Dosya sisteminizdeki değişiklikleri takip etmek için tripwire / aide, denetim veya mtree (BSD'de) gibi bir şey kullanın . Bu gerçekten önemli. Değişikliklerinizin size düzenli olarak postalanmasını sağlayın, bunları her gün manuel olarak gözden geçirin. Değişmemesi gereken herhangi bir dosya değişikliği olursa, nedenini araştırın. Bazı kötü niyetli javascript, herhangi bir yöntemle sayfalarınıza bir şekilde eklenirse, bu şekilde yakalayacaksınız. Bu, yalnızca web sitenizi değil, kullanıcılarınızı da korur, çünkü kendi web sayfalarınız ziyaretçilerinizi etkilemek için kötüye kullanılabilir. (Bu çok yaygın bir taktiktir, saldırganlar sunucunuzu bile umursamazlar, sadece keşfedilene kadar ziyaretçilerinize olabildiğince fazla virüs bulaştırmak isterler. Böyle bir uzlaşmayı olabildiğince hızlı yakalamak çok önemlidir.)

  • PHP'yi korumak için suhosin gibi şeyler kullanmak yardımcı olur. Ama ayrıca anlamayı da öğrenin, uygulamanızın beklenen parametrelerine göre yapılandırın.

  • PaX gibi bir çekirdek yaması kullanmak sizi birçok arabellek taşması güvenlik açığından korumanıza yardımcı olabilir. Yazılımınız savunmasız olsa bile. (Bu sizi yenilmez yapmaz, sadece bir başka küçük, katmandır.)

  • Bazı güvenlik araçlarını kullanırken fazla güvenme. Kullandığınız araçları anlayın ve sağduyunuzu kullanın. Oku, öğren, yapabildiğin kadar yetiş.

  • Zorunlu erişim kontrolünü kullanmayı düşünün (örneğin: SELinux ). Her uygulama için ne yapmasına izin verildiğini çok ayrıntılı bir şekilde belirtmenizi sağlar. Hangi dosyalara erişim izni var? Çekirdeğin ne demek istediğini yapmasına vb. İzin verir. Bu çok ilgili bir süreçtir ve çok fazla anlayış gerektirir. Bazı dağıtım şirketleri paketleri için önceden hazırlanmış SELinux politikaları sağlar (örneğin: Gentoo ). Bu öneri, aşağıdakinin aksine bir çelişkidir, ancak yine de geçerlidir.

  • İşleri basit tutun. Size karşı karmaşık bir güvenlik stratejisi işe yarayabilir.

  • Apache'de çok kısıtlayıcı bir varsayılan kural belirleyin (Seçenek Yok, Tümünden Reddet, vb ...) ve belirli VirtualHosts için gerektiği şekilde geçersiz kılın.

  • Tüm nokta dosyalarına erişimi engelle (bu, hemen .htaccess dosyalarını da kapsar)

  • Her zaman herhangi bir şifre kimlik doğrulamasının olduğu her yerde https kullanın.

  • Güvenlik duvarı varsayılan olarak reddetme politikası olmalıdır. Belirli bir trafiği günlüğe kaydetmek için güvenlik duvarınızda bazı özel kurallar oluşturun.

  • Günlüklerinizi anomalilere karşı taramak için günlük ayrıştırma komut dosyaları ayarlayın. ( başlangıç ​​IDS paketi bunu yapabilir, ancak dürüst olmak gerekirse, kendi araçlarınızı ve kurallarınızı daha iyi anlamanıza yardımcı olacağı için zaman içinde kendi komut dosyalarınızı oluşturmanızı öneririm.)

  • Sunucuya en son giriş yapan kullanıcılar, etkin bağlantılar, kullanılan bant genişliği vb.

  • Suid ikili dosyaları, yazılabilir dosyalar ve benzeri şeyler için bir cron taraması yapın ve bunları size postayla gönderin.

  • Size gönderilecek olan herhangi bir şey için, zaman içinde bir istisna listesi oluşturmalısınız. (dosya sistemi değişikliklerini göz ardı eden klasörler, izin verilecek 777 dosya, izin verilen ikili dosyaları izin ver). Olmaması gereken şeylerden yalnızca haberdar olmanız önemlidir. Her gün önemsiz şeyler içeren bir posta alırsanız, onları görmezden gelmeye başlayacaksınız ve onlar anlamsız hale gelecektir.

  • İyi bir katı katmanlı yedekleme yedekleme stratejisine sahip olun. Ve sadece her şeyin bir görüntüsünün veya kopyasının işe yaradığını varsaymayın. Örneğin, MySQL yedeklemeniz sırasında bir tabloya yazmanın ortasındaysa, yedeklemenizi geri yüklediğinizde MySQL ikili dosyalarınız bozulabilir. Bu nedenle, mysqldump'ın düzenli görüntülerin veya gece tarball'ların veya sürüm kontrolünün veya başka bir kurulumun üstündeki veritabanlarını oluşturduğu bir crona ihtiyacınız olacak. Yedekleme stratejinizi düşünün. Demek istediğim, gerçekten düşün.

  • Güvenlik için böyle listelerine güvenmeyin :) Cidden! Bunların hepsini internet üzerinden bulabilir, hepsini okuyabilir, her öneriyi araştırabilir ve kendi kararınızı vermek için sağduyunuzu ve deneyiminizi kullanacaksınız. Sonunda, deneyim ve sağduyu, sizi kurtaracak şeylerdir. Listeleri değil araçları da. Okuyunuz, fakat sadece anlamadan kopyalamayınız.


+1, harika liste! Suexec yerine ITK MPM'ye ( mpm-itk.sesse.net ) ve chroots yerine Linux VServer'a ( linux-vserver.org ) bir göz atmanızı tavsiye ederim. Ayrıca, dosya sistemi taramaları için tripwire veya aide ve chkrootkit var.
David Schmitt

Sonuçta, bir web sunucusunu korumak neredeyse bir ömür sürer. Yeterince iyi hazırlanamıyor gibi görünüyorsunuz, bu yüzden garip olaylar hakkında düzenli güncellemeler paket yöneticisinde bulabileceğiniz ilk güvenlik aracından çok daha iyidir. :) Harika bir liste, ama zamanımı alacağım. Büyük olasılıkla bu cevap bir cevap olacak. :)
pestaa

@David: Evet, tripwire'dan bahsetmiştim ki, ima ettiğim bir yardımcı oldum, sadece bu durumda bir yardımcı bağlantı ekleyeceğim. Ayrıca vserver önerisini de ekleyeceğim. Evet, sanallaştırma ve / veya paravirtualizasyon chroot'tan daha iyi olacak, bu yüzden FreeBSD hapishanelerinde de bahsetmiştim. Sanal makinelere sahip olan bir şey de, her vm için userland + gerekli araçları çoğaltmak zorunda kalmanın çok fazladan fazla disk alanını
tüketmesidir

çok şeyi sanallaştırmanız ya da nakit / donanım eksikliğiniz varsa. Jails + nullfs bağlantıları bu sorunu çözebilir. ve hapishaneler sanallaştırılmadığından veya taklit edilmediğinden genel bir masraf yoktur. Sanırım vserver GNU / Linux'taki en iyi şey.
jns

Vaov! Bu gerçekten harika .. sans.org'da da mevcut olan kontrol listelerine göz atın. Gerçekten çok yardımcı olur. sans.org/score/checklists
LalakaJ

5

SAN'dan Linux Güvenlik Kontrol Listesi'ni öneriyorum . Bunu, ayrıca başka bir kurum içi prosedür kullanıyorum. Kontrol listesi biraz eskimiş olabilir, ancak kilit noktaların çoğu doğru.


5
  • Bir güvenlik duvarı kurdum ve her bir hizmeti ayrı ayrı eklemek için yalnızca delikler açtım
  • Herhangi bir hizmet için, uygulamanın yardım dosyalarını yapılandırma dosyaları için okudum ve en azından her ayarı gözden geçirdiğimden emin olun.
  • Güvenlik posta listelerine abone oluyorum
  • Bir cron işinde rkhunter ve lynis'i her gece çalıştırıyorum
  • Bana gönderilen belirli bir eşiğin üzerindeki tüm hatalarım var
  • Bana e-postayla gönderilen günlük kaydı (günlük hizmetini yeniden başlatma, vb.) İle ilgili tüm değişiklikler var.
  • Subversion içinde vb tutmak

4

düzenleyin ~ / .ssh / config

permit_root_login no

bu yapar

ssh root@server

cevap değil ama

ssh user@server
user$ su

root olarak giriş yapmak istiyorsanız çalışacaktır.


1

Kontrol etmek için sayısız izinler, sayısız kontrol listeleri, asla yeni hataların / güvenlik açıklarının keşfedilmesi hiç bitmeyecek. Güvenlik, benim açıp kapamanız gereken bir şey değil, sürekli yaptığınız bir şey.

Yazılımın "kaçınılmaz başarısızlığı" göz önüne alındığında, SELinux bazı endişeleri ortadan kaldırmaya yardımcı olur (güvenlik için bir kez daha gümüş kurşun olmaz). Bir kullanıcı alanı uygulamasından ödün verildiğini varsayarsak, doğru SELinux politikası normal (örneğin, eğer SELinux devre dışı bırakılmışsa veya izin veriliyorsa) ayrıcalıklarını koruyacaktır. Bu, tabii ki, denetim kayıtlarınızı izlemenizi ve kurulu politikayı analiz etmenizi ve uygulamaların çalışabilmesi için gerektiğinde bunları değiştirmenizi gerektirecektir.

Varsayılan politikanın işe yaramayacağını söylememek ama kişisel olarak neye izin verdiğini bilmek istiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.