LAMP Sunucusunu Güvende Tutmanın İpuçları


Yanıtlar:


107

David'in cevabı, sunucu sertleştirmenin genel prensiplerinin iyi bir temelidir. David'in dediği gibi, bu çok büyük bir soru. Uyguladığınız belirli teknikler, ortamınıza ve sunucunuzun nasıl kullanılacağına bağlı olarak değişebilir. Uyarı, bunun doğru bir şekilde yapılması ve yapılması için bir test ortamında çok fazla çalışma yapmanız gerekebilir. Üretim ortamınıza ve daha da önemlisi iş sürecinize entegre etmek için yapılan çok fazla çalışmanın ardından geldi.

Ancak, önce kuruluşunuzun herhangi bir sertleştirme politikası olup olmadığını kontrol edin; bunlar doğrudan ilgili olabilir. Değilse, rolünüze bağlı olarak, bunları oluşturmak için uygun bir zaman olabilir. Ayrıca her bir bileşeni aşağıdan yukarıya doğru ayrı ayrı ele almanızı 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ğini sağlamak için eğlenceli olabilir. İşletim sistemini sertleştirmeyi ve kullanılabilirliği sürdürmeyi Apache veya PHP'den daha kolay buluyorum.

M

P
Bu, tamamen kendi başına bir disiplin olan Güvenli Programlama Uygulamaları fikrine tam olarak devam eder. SANS ve OWASP konuyla ilgili çok saçma bir bilgiye sahipler, bu yüzden burada kopyalamaya çalışmıyorum. Çalışma zamanı yapılandırmasına odaklanacağım ve geliştiricilerinizin geri kalanı için endişelenmesine izin vereceğim. Bazen LAMP içindeki 'P', Perl, ancak genellikle PHP anlamına gelir. İkincisini farz ediyorum.


1
Bu cevabı en az 10 defa oylamak istiyorum.
user58859

10
Sessiz N - IPTable'lar veya harici bir güvenlik duvarı ile, halkın erişmesi için gerekli olan ağ bağlantılarını engelleyin.
Matt

Bu bir topluluk wiki olmalı
Brian Adkins

1
Güvenlik duvarını unutmak çok kolaydır. Bir web sitesi için bir web sunucusu yapan ve hatta 80 numaralı bağlantı noktası olmayan trafiği atmak için TCP / IP yığınını hacklemeye kadar giden birisini duydum. Açmak için kapatın.
Aaron Mason

4
@AaronMason: Tebrikler! Başarılı bir fıkra var. Özel durumunuzun iyi sonuç verdiğini hatırlayalım, ancak gelecekteki okuyucularınızın olağandışı ortamınızı anlamalarını umalım. Genel durumda bu tavsiye oldukça tehlikelidir.
Scott Pack,

14

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

  1. Güncel Tutun. Bu, işletim sistemi, tüm hizmetler ve özellikle çalıştırdığınız tüm webapps'ler anlamına gelir.
  2. Gereksiz hizmetleri devre dışı bırakın, gerekli olanları minimum maruz kalmaya sınırlandırın (eğer MySQL'e uzaktan bağlanmadıysanız, TCP'den dinlemiyorsanız) ve ana bilgisayar tabanlı bir güvenlik duvarı çalıştırın. (Bu kesinlikle LAMBA ise, 80 ve 443’te iyi olmalı, belki de SSH’nin idaresinde de iyi olmalısınız.)
  3. Güçlü şifreler kullanın. Daha da iyisi, SSH kullanıyorsanız, yalnızca anahtar tabanlı 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 getirmese de, logwatch gibi araçları çalıştırmalısınız, böylece sunucunuzda neler olduğunun farkındasınız.

Umarım bu başlamanıza yardımcı olur.


1
Ben NSA tarafından yazılan "Red Hat Güvenli Yapılandırma Enterprise Linux 5 için Kılavuzu" okumak için önerecektir
ALex_hha

1
Partiye geç kaldı, ancak son zamanlarda okudum "root olarak giriş yapmamanın" artık böyle büyük bir şey olmadığını, özellikle de genel / özel anahtarlara dayalı SSH auth kullanıyorsanız.
saat

8

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

Firewall

  • İyi bir yaklaşım, herhangi bir trafiğin başlamasına izin vermemek, daha sonra sadece ihtiyacınız olanı açmak , istediğiniz kadar açmaktır. Bu, işleri yürütmek için minimum portları / IP'leri açmakla sonuçlanır ve bu da maruz kalmanızı en aza indirir.
  • Bir LAMP sunucusu için yalnızca dünyaya http / https için bağlantı noktalarını ve sysadmins için ssh'yi açmanız gerekebilir.
  • Kullanmıyorsanız ipv6 trafiği gibi şeylerin kilitlendiğinden emin olun
  • AWS güvenlik grupları sağlar, linux'un seçilebilir paketlerinin yanı sıra seçilebilir paketleri de vardır.

SSH ve Kullanıcılar

  • Ssh erişimi için şifre yok (özel anahtar kullanın)
  • Ssh root izin vermeyin (uygun kullanıcılar, daha sonra su veya sudo, içinde ssh olmalı)
  • Komutlar günlüğe kaydedilir, böylece kullanıcılar için sudo kullanın
  • Yetkisiz oturum açma girişimlerini günlüğe kaydedin (ve sunucunuza erişmeye çalışan kullanıcıları, fail2ban gibi birçok kez engelleyen / yasaklayan yazılımlar düşünün)
  • standart olmayan bağlantı noktasında ssh (bu, meyvelerin asılmadığından ve sinir bozucu trafikten uzak durduğunuzdan emin olmak için kullanışlıdır, ancak güvenlik açısından, özellikle kendi başına pek bir şey yapmaz)
  • ssh'ı sadece ihtiyaç duyduğunuz ip aralığına kilitleyin (büyük aralık, aralıksız olmaktan iyidir)

Veritabanı

  • Kullanıcı verilerini temizle
  • Parametreleri sorgula
  • DB'yi kendi makinesine çekmeyi düşünün. Bu ayrım, bir saldırganın web yığınınıza ulaşmasını zorlaştırabilir ve bunun tersi de geçerlidir.
  • Herhangi bir yazılım gibi güncel tutulması önemlidir.
  • 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 oluşturmak için ihtiyaç duyduklarını ekleyin. Farklı uygulamalar (veya bazı uygulamaların farklı bölümleri) için ayrı kullanıcılara sahip olmak, bir saldırganın herhangi bir hesaptan ödün vermesi durumunda yararının azaltılmasına yardımcı olacaktır. Ayrıca GRANT gibi hafifçe atanmaması gereken özel ayrıcalıklara dikkat edin.
  • Parolaları düzenli aralıklarla değiştirme politikası olması iyi bir fikirdir. Gereken çabanın miktarından endişeleniyorsanız, daha az sıklıkta hiç olmadığı kadar iyi olduğunu unutmayın.
  • Parola şifrelemesini anlayın. Tuz şifreleri . MD5 kullanmayın!

Yazılım

  • Yazılımı güncel tutun (os, web sunucusu, kodlama dili, CMS). Dışarıdaki birçok kişi eski (yamalanmamış) sürümlerdeki bilinen güvenlik açıklarını arayacak
  • İhtiyacınız olmayan herhangi bir yazılımı kaldırın (ideal olarak, üretim sunucularında yazılım derlemek için gerekli paketi saklamayın, yazılımı önceden derlemek ve üretim makinelerinize paket olarak sunmak daha iyidir)
  • Dosya izinlerinin kilitlendiğinden emin olun (özellikle kullanıcı yüklemeleri ve yapılandırma dosyaları gibi şeyler için)
  • Parola, CMS için yönetici alanını web sunucusu düzeyinde korur ( http kimlik doğrulama güvenlik açığı olan bir CMS'nin önüne oturabilir ve erişimi engellemeye yardımcı olabilir, bu da saldırıları önlemenin iyi bir yoludur)
  • Yönetici alanı ve diğer hassas veriler için SSL kullanın
  • Sunucularınızın ve altyapınızın yönetimini otomatikleştirin (Kukla, Şef veya SaltStack gibi bir şey. AWS CloudFormation kullanıyorsanız). Bu, birçok sunucuya bir şeyleri yamalamanıza ve A Sunucusu'ndaki izinleri sabitleme ancak Sunucuyu B'de yapmayı unutmama 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 güvenlik olmasa da, farklı yazılımın belirli sürümlerini tarayan pek çok kişi var ve serbestçe verdiğiniz daha az bilgi, bir saldırganın çalışması gerektiği kadar fazla. Asılı meyvelerden biri olmadığınızdan emin olmanın iyi bir yolu. Elbette bu, içeri girmek için biraz daha fazla çaba harcamak isteyen birine hiçbir şey yapmaz
  • Sunucuya erişimi olan kişileri sınırla

5

David'in önerdiğine ek olarak, kurulumunuz ne kadar modüler olursa olsun, belirli bir görev için özel olarak oluşturulmuş belirli kullanıcılara / gruplara erişimi kısıtlamak ve kapsamlarını sınırlandırmak demek istiyorum, LAMP yığınınız daha güvenli: Bunun bir Apache kullanıcısı olması Apache dosyaları / klasörleri, kritik sistem dosyalarına / klasörlerine erişebilen hiçbir grupta değil, buna göre ayarlanmış izinlere sahiptir. Web sitelerinizle ilişkili MySql tablolarına erişeceğiniz ve yalnızca bu tablolara erişebilecek bir kullanıcı. Ek olarak, bir PHP çağrısından minimum erişim sağlamak için erişimlerini kısıtlayabilirsiniz. Ayrıca, PHP dosyası aracılığıyla 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ı şudur: apache kullanıcısı veya MySql kullanıcısı tehlikeye atılırsa, klasör (ler) in kapsamı dışında (apache kullanıcısı durumunda) ve tablonun dışında erişebildiği hiçbir zarar veremez. s) / database (s) (MySQL veritabanı için kullanıcı durumunda).

Eğer bir şekilde MySQL kullanıcısı tehlikeye atılsaydı, örneğin, veritabanına erişip tüm veritabanlarını MySQL'den çıkaramaz ve tüm verilerinizi mahvedemezlerdi. Bazı koşullar altında izole bir veritabanında tablolar bırakabilir veya bazı tablolara bilgi ekleyebilirler, bu nedenle yalnızca kesinlikle gerekli olduğu durumlarda tablo erişimini sağlamak ve sadece gerekli izinleri vermek önemlidir. tabloların ayrıcalıklarına veya güncelleme ayrıcalıklarına sahip olmanız gerekmiyor, o zaman bu kullanıcıya vermeyin.

Ayrıca, herhangi bir nedenden dolayı yönetici hesap kullanıcı adınız ve şifreniz MySQL için tespit edilirse, sisteminizdeki herhangi bir kullanıcı adından farklı bir kullanıcı adı kullanıyorsanız, zarar vermeden önce veritabanınıza girmeden önce sisteminizin güvenliğini kırmaları gerekir. Aynı apache kullanıcısı ve dosyalara erişim için de geçerlidir.

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

sisteminizde kullanıcılarınızın olduğunu söyleyin (root, umod -l veya passwd -l, vb. gibi bir şey sayesinde güvenlik nedeniyle devre dışı bırakılmalıdır): john, barney, terence ve lisa.

MySQL'de bigbird adıyla bir kullanıcı oluşturabilirsiniz (bir karma parola kullandığınızdan emin olun). Bigbird sadece seçkin ayrıcalıklara ve güncelleme ayrıcalıklarına sahiptir, ancak bırakma veya yaratma ve kesinlikle yapma hakkına sahiptir . Ek olarak, MySQL veritabanında çalışmak için garfield adında başka bir MySQL kullanıcısı oluşturursunuz ve kök kullanıcıyı MySQL veritabanından siler ve böylece dengelenemez. Garfield verildi . MySQL boyunca ayrıcalıklar (etkili, bu sadece kökü yeniden adlandırıyor)

Şimdi, bir apache grubu veya bir kullanıcı oluşturursunuz ve biz buna apweb2 adını veririz. Appweb2 diğer grupların bir üyesi değildir ve apache için tüm dosyalar / klasörler / home / apweb2 / 'de depolanır. Her sanal ana bilgisayarın kendi alt klasörü olur ve bu ana bilgisayarların her birinin o alt klasöre ayarlanmış belge kökü olur. Yanlışlıkla sistemin geri kalanına erişim sağlamak için sembolik bağlantılar devre dışı bırakılır.

Ayrıca, ssh erişimini yalnızca belirli kullanıcılara (veya belirli gruplara, onları ssh grubuna koymak ve ssh'yi kullanabilecek tek şeyin yapmasına izin vermeyi) kısıtlayabilirsiniz.

Ayrıca, işleri daha da kısıtlamak için hangi kullanıcıların sudo ayrıcalıklarına sahip olduğunu seçebilirsiniz. Daha ileriye atabileceğiniz başka bir adım, herhangi bir ssh kullanıcısının sudo yapamamasını sağlamaktır, ssh kullanamayan sudo kullanabilen özel kullanıcılar oluşturabilirsiniz, böylece ssh girdikten sonra, başka bir kullanıcıya giriş yapmanız gerekir. sudo erişimi.

Böylece, her bir parçayı modüler hale getirerek, eğer biri tehlikeye atılırsa, tüm yığın tehlikeye girmez ve sıfırdan baştan başlamak yerine 1 sorunu çözebilirsiniz.


3

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


Sunucu Arızasına Hoşgeldiniz! Genel olarak sitedeki cevapların kendi başlarına durabilmelerini isteriz - Bağlantılar harika, ancak bu bağlantıyı keserse cevap hala yardımcı olmak için yeterli bilgiye sahip olmalıdır. Lütfen daha fazla ayrıntı eklemek için cevabınızı düzenlemeyi düşünün. Daha fazla bilgi için SSS bölümüne bakın .
slm

1

Şu anda, konteyner sanallaştırmasını, yani Docker, systemd-nspawn'ı ve üzerinde oluşturuldukları konteyner sanallaştırma mekanizmalarını (ad alanları, gruplar) ihmal etmeyin. Kap sanallaştırmayı kullanmak, işlemleri yalıtmanıza olanak sağlar; örneğin, hizmetlerden biri tehlikeye girerse, saldırgan diğer hizmetlere erişemez.

LAMP durumunda, örneğin, SSH-server, Apache, MySQL, PHP-FPM / Python / Perl / etc'li dört Docker konteynerini kullanmak mümkündür.

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.