Soru LAMP Sunucusunun Güvenliğini Sağlamak İçin İpuçları


Bu bir Kanonik Soru LAMP yığını güvenliğini sağlama hakkında

LAMP sunucusunu güvenli hale getirmek için mutlak yönergeler nelerdir?


91
2017-12-14 01:52


Menşei




Cevaplar:


David'in cevabı, sunucu sertleşmesinin genel prensiplerinin iyi bir dayanağıdır. David'in belirttiği gibi, bu büyük bir sorudur. Aldığınız belirli teknikler, ortamınıza ve sunucunuzun nasıl kullanılacağına bağlı olabilir. Uyarı, bu, test ortamında doğru bir şekilde inşa edilmesi ve yapılması için çok fazla iş gerektirebilir. Üretim ortamınıza ve daha da önemlisi iş sürecinize entegre etmek için çok fazla işin peşinden git.

Bununla birlikte, öncelikle, kuruluşunuzun herhangi bir katı politikaları olup olmadığını kontrol edin, çünkü bunlar doğrudan en alakalı olabilir. Aksi takdirde, rolünüze bağlı olarak, bunları oluşturmak için harika bir zaman olabilir. Ayrıca, her bileşenin aşağıdan ayrı olarak ele alınmasını da tavsiye ederim.

L
Size yardımcı olacak birçok iyi rehber var. Bu liste dağıtımınıza bağlı olarak size yardımcı olabilir veya olmayabilir.

A
Apache güvenli hale getirmek için eğlenceli olabilir. İşletim Sistemini sertleştirmek ve kullanılabilirliği Apache veya PHP'den daha kolay buluyorum.

M

P
Bu, başlı başına kendi başına bir disiplin olan Güvenli Programlama Uygulamaları fikrine uzanıyor. SANS ve OWASP bu konuda çok saçma bir bilgi birikimine sahipler, bu yüzden burada çoğaltmaya çalışmam. Çalışma zamanı yapılandırmasına odaklanacağım ve geliştiricilerin geri kalanı için endişelenmelerine izin vereceğim. Bazen LAMP'de 'P' Perl'e, fakat genellikle PHP'ye atıfta bulunur. İkincisini kabul ediyorum.


105
2017-12-14 14:50



Bu cevabı en az 10 kez oylamak istiyorum. - user58859
Sessiz N - IPTables veya harici bir güvenlik duvarı ile ağ bağlantılarını yalnızca halkın erişmesi için gerekenleri engelleyin. - Matt
Bu bir topluluk wiki olmalı - Brian Adkins
Güvenlik duvarını unutmak çok kolay. Bir web sitesi için bir web sunucusu oluşturan ve hatta bağlantı noktası 80 olmayan trafiği atmak için TCP / IP yığınını kestirmeye kadar ilerleyen birisini duydum. Göz ardı edilen başka bir şey gereksiz servisler. açmak için kapatın. - Aaron Mason
@AaronMason: Tebrikler! Başarılı bir anekdot var. Özel durumunuzun iyi sonuç verdiğini unutmayın, ancak gelecekteki okuyucuların olağandışı ortamınızı anlamasını umalım. Genel durumda bu tavsiye oldukça tehlikelidir. - Scott Pack


Açıkçası, konuyla ilgili birkaç kitaba layık olan bir soru sordunuz. Ancak iyi çalışan bazı genel temel kurallar vardır:

  1. Güncelleme yap. Bu, işletim sistemi, tüm hizmetler ve kullandığınız tüm webapps'leri ESPECYALLY anlamına gelir.
  2. Gereksiz tüm hizmetleri devre dışı bırakın, en az pozlama için gerekenleri sınırlayın (uzaktan MySQL ile bağlantı kurmuyorsanız, TCP'de dinlemiyorsanız) ve ana makine tabanlı bir güvenlik duvarı çalıştırın. (Eğer bu kesinlikle LAMP ise, 80 ve 443 ile iyi olmalısınız, ancak yönetim için de SSH olabilirsiniz.))
  3. Güçlü şifreler kullanın. Daha da iyisi, SSH kullanıyorsanız, yalnızca anahtar temelli yetkilendirme kullanın.
  4. Kök olarak giriş yapmadığınızdan emin olun. Kullanıcılar olarak giriş yapın ve su & sudo kullanın.
  5. İşleri daha güvenli hale getirmezken, sunucunuzda neler olup bittiğini anlayabilmeniz için günlüğü gibi araçları çalıştırmalısınız.

Umarım başlamana yardım eder.


13
2017-12-14 02:23



NSA tarafından yazılan "Red Hat Enterprise Linux 5'in Güvenli Konfigürasyon Rehberi" ni okumanızı önereceğim - ALex_hha
partiye geç geldim, ancak son zamanlarda özellikle "kök olarak giriş yapmamanın" artık büyük bir anlaşma olmadığını, özellikle de kamu / özel anahtarlara dayalı SSH yetkisini kullanıyorsanız. - the0ther


İşte başlamak istediğim iyi bir kontrol listesi.

Firewall

  • Güzel bir yaklaşım, herhangi bir trafiğin başlaması için izin vermemektir. sadece ihtiyacın olanı aç, ihtiyacın olduğu gibi. Bu açılışıyla sonuçlanır işleri yapmak için minimum bağlantı noktaları / ips poz.
  • Bir LAMP sunucusu için sadece portları açmanız gerekebilir. dünyaya http / https ve sysadmins için ssh.
  • Kullanmıyorsa, ipv6 trafiği gibi şeylerin kilitlendiğinden emin olun.
  • AWS güvenlik grupları sağlar, linux iptables yanı sıra bol paket seçmek için dan.

SSH ve Kullanıcılar

  • Şifre yok ssh erişimi için (özel anahtar kullan)
  • Köküne ssh izin verme (uygun kullanıcılar ssh, sonra su veya sudo olmalıdır)
  • Kullanıcılar için sudo kullanın, böylece komutlar günlüğe kaydedilir
  • Yetkisiz giriş denemeleri yapın (ve sunucunuza sunucuya erişmeye çalışan kullanıcıları engellemek / engellemek için, fail2ban gibi)
  • standart dışı bağlantı noktasındaki ssh (bu, meyvenin düşük kalmamasını sağlamak ve sinir bozucu bir çok trafiği uzak tutmak için yararlı olabilir, ancak özellikle güvenlik açısından çok fazla bir şey yapmaz)
  • ssh'i sadece ip aralığınıza kilitleyin (büyük bir aralık menzilden daha iyi)

Veritabanı

  • Kullanıcı verilerini düzenleyin
  • Sorguları parametrele
  • DB'yi kendi makinesine soyutlamayı düşünün. Bu ayrılık, bir saldırganın web kümenize ulaşmasını ve bunun tersini zorlaştırabilir.
  • Herhangi bir yazılım gibi güncel tutmak önemli.
  • Her amaç için bir kullanıcı. Kullanıcıları oluştururken, hiçbir ayrıcalık olmadan başlayın ve yalnızca rollerini önceden oluşturmak için gerekenleri ekleyin. Farklı uygulamalar (veya bazen uygulamaların farklı bölümleri) için ayrı kullanıcılara sahip olmak, bir saldırganın herhangi bir hesabı tehlikeye atması için elde ettiği avantajı azaltmaya yardımcı olacaktır. Ayrıca, hafif bir şekilde verilmemesi gereken GRANT gibi özel ayrıcalıklara dikkat edin.
  • Şifreleri düzenli olarak değiştirmek için bir politikaya sahip olmak iyi bir fikirdir. Daha az sıkışık hatırlamak için gereken çabadan endişe ediyorsanız, hiç olmadığı kadar iyidir.
  • Şifre şifrelemeyi anlayın. Tuz şifreleri. Md5 kullanmayın!

Yazılım

  • Yazılımı güncel tutun (os, web sunucusu, komut dosyası dili, CMS). Dışarıdaki birçok insan, eski (gönderilmemiş) sürümlerde bilinen güvenlik açıklarını tarar.
  • İhtiyacınız olmayan herhangi bir yazılımı kaldırın (ideal olarak, yazılımları üretim sunucularında derlemek için paketi saklamayın, yazılımı önceden derlemek ve üretim makinelerinize bir paket olarak kullanılabilir)
  • Emin olun dosya izinler kilitlendi (özellikle kullanıcı yüklemeleri ve yapılandırma dosyaları gibi şeyler için)
  • Şifre, CMS için yönetici alanını web sunucusu düzeyinde korur (http kimlik doğrulaması bir güvenlik açığı CMS'nin önüne oturabilir ve erişimi engelleyebilir, bu da saldırıları önlemenin iyi bir yoludur.
  • SSL kullan yönetici alanı ve diğer hassas veriler için
  • Sunucularınızın ve altyapınızın yönetimini otomatik hale getirin (Kukla, Şef veya SaltStack gibi bir şey. AWS CloudFormation kullanılıyorsa). Bu, birçok sunucu arasında bir şeyler yapmanıza ve Sunucu A'daki izinleri düzeltme, ancak B Sunucusu'nda bunu yapmayı unutma gibi senaryoları azaltmanıza yardımcı olur.
  • Mümkünse CMS, PHP veya WebServer'ınızın belirli bir sürümünü vermeyin. Bu bilgiyi gizlemek bir güvenlik değilken, farklı yazılımların belirli sürümleri için tarama yapan birçok kişi var ve saldırganın daha fazla çalışması için özgürce verdiğiniz daha az bilgi var. Bu düşük asılı meyvelerden biri olmadığından emin olmanın iyi bir yoludur. Tabii ki bu biraz daha fazla çaba harcamak isteyen birine hiçbir şey yapmaz.
  • Sunucuya erişimi olan kişileri sınırlayın

7
2017-08-10 08:08





David'in önerdiği şeylere ek olarak, kurulumunuz ne kadar modüler olursa, bu da özellikle tek bir görev için oluşturulan ve kapsamlarını sınırlayan belirli kullanıcılara / gruplara erişimi kısıtlamak anlamına gelir, LAMP yığınınızı daha güvenli hale getirir: Bunun bir örneği bir Apache kullanıcısına sahip olmaktır. İzinleri ayarlanmış Apache dosyaları / klasörleri için, kritik sistem dosyalarına / klasörlerine erişebilen herhangi bir grupta değil. Web sitelerinizle ilişkilendireceğiniz MySql tablolarına ve yalnızca bu tablolara erişebilen bir kullanıcı. Ek olarak, bir PHP çağrısından en az miktarda erişim sağlamak için erişimlerini kısıtlayabilirsiniz. Ayrıca, PHP dosyasında kullanılan / kullanılan MySQL kullanıcı adının, başka bir kullanıcı için kullanılan aynı kullanıcı adı veya parola olmadığından emin olun.

Bunun anlamı: apache kullanıcısı veya MySql kullanıcısı tehlikeye düşerse, apache'nin (apache kullanıcısı durumunda) ve tablonun dışında olduğu klasör (ler) in kapsamı dışında herhangi bir zarar veremezler. s) / veritabanı (ler) (MySQL veritabanı için kullanıcı durumunda).

Eğer bir şekilde MySQL kullanıcısı ele geçirilseydi, örneğin veritabanına erişemediler ve tüm veritabanlarını MySQL'den alamadılar ve tüm verilerinizi mahvedebilirler. Bazı durumlarda tabloları bırakabilir veya bazı tablolara bilgi içeren bir veritabanına bilgi ekleyebilirler. Bu nedenle, yalnızca gerekli olduğunda ve yalnızca gerekli izinleri vermek için masaya erişim vermek önemlidir. Bırakma tabloları ayrıcalıklarına sahip olmalı veya ayrıcalıklarını güncellemeli, sonra bunları kullanıcıya vermeyin.

Ayrıca, herhangi bir nedenden ötürü, yönetim hesabınızın kullanıcı adı ve şifresi MySQL için bulunursa, sisteminizdeki herhangi bir kullanıcı adından farklı bir kullanıcı adı kullanırsanız, zarar vermek için veritabanınıza girmeden önce sisteminizin güvenliğini kırmaları gerekir. Aynısı apache kullanıcısı ve dosyalara erişim konusunda da geçerlidir.

Örnek zaman! Fikri basitleştirmek için bir sistem örneği vereceğim.

sisteminizde kullanıcılarınız olduğunu belirtin (kök, umod -l veya passwd -l gibi bir şeyden güvenlik için devre dışı bırakılmalıdır, vb.): john, barney, terence ve lisa.

MySQL'de bigbird adıyla bir kullanıcı yaratabilirsiniz (karma şifre kullandığınızdan emin olun). Bigbird, yalnızca seçkin ayrıcalıklara ve güncelleme ayrıcalıklarına sahiptir, ancak bırakma veya oluşturma, ve kesinlikle değil . Buna ek olarak, MySQL veritabanında çalışmak için garfield adıyla başka bir yönetimsel MySQL kullanıcısı oluşturursunuz ve root kullanıcısını MySQL veritabanından silmenize izin vermezsiniz. Garfield verildi . MySQL boyunca ayrıcalıklar (etkili, bu sadece kökleri yeniden adlandırıyor).

şimdi, bir apache grubu veya bir kullanıcı oluşturursunuz ve biz buna apweb2 diyoruz. Appweb2 diğer grupların bir üyesi değildir ve apache için tüm dosyalar / klasörler / home / apweb2 / dizininde saklanır. Her sanal ana bilgisayarın kendi alt klasörü olacaktır ve bu ana bilgisayarların her biri bu alt klasöre ayarlanmış belge köküne sahip olacaktır. Yanlışlıkla sistemin geri kalanına erişim sağlamak için Symlinks devre dışı bırakılacaktır.

Ayrıca, ssh erişimini yalnızca belirli kullanıcılarla kısıtlayabilirsiniz (ya da belirli gruplar, bunları ssh grubuna koymak istiyorum ve ssh'i kullanabilen tek şey).

Ayrıca, hangi kullanıcıların işleri daha da kısıtlamak için sudo ayrıcalıklarına sahip olduklarını seçebilirsiniz. Bunu daha da ileriye götürebileceğiniz bir diğer adım, ssh kullanıcılarının sudo yapamaması, ssh kullanamayan sudo'yu kullanabilecek özel kullanıcılar yaratabilirsiniz, böylece bir kez ssh, bir başka kullanıcıya giriş yapmanız gerekir. sudo'ya erişim.

Dolayısıyla, her segmenti modüle ederek, eğer bir tanesi tehlikeye girerse, tüm yığın tehlikeye girmeyecek ve sıfırdan baştan başlamak zorunda kalmak yerine 1 problemi çözebilirsiniz.


4
2017-07-30 04:49





Bu belgeyi SANS.org'dan gerçekten yararlı buldum http://www.sans.org/score/checklists/linuxchecklist.pdf


2
2017-08-10 11:50



Sunucu Hatası'na Hoş Geldiniz! Genelde sitemizde kendi başlarına ayakta durabilmemiz için cevapları severiz - Bağlantılar harika, ancak bu bağlantı hiç koparsa, cevabın hala yararlı olması için yeterli bilgiye sahip olması gerekir. Lütfen daha fazla ayrıntı eklemek için cevabınızı düzenlemeyi düşünün. Bakın SSS daha fazla bilgi için. - slm


Şu anda, konteyner sanallaştırmasını, yani Docker'ı, systemd-nspawn'ı ve üzerinde oluşturuldukları konteynır sanallaştırma mekanizmalarını ihmal etmeyin (ad alanları, gruplar). Kapsayıcı sanallaştırmayı kullanmak işlemleri engeller; örneğin, hizmetlerden biri ele geçirilirse, bir saldırgan diğer hizmetlere erişemez.

LAMP durumunda, örneğin SSH-sunucu, Apache, MySQL, PHP-FPM / Python / Perl / etc ile dört Docker konteyner kullanmak mümkündür.


0
2017-07-27 20:00