Daniel Blogu
15 Jun/11 0

Bir Linux Apache MySQL PHP web sunucusu kök LAMBA 12 tedbirler güvence altına


Hack sıklığı son aylarda önemli ölçüde artmıştır. Özellikle çok miktarda veri web sunucularında kesmek tarafından duyulabilir. Hatta Sony PSN hack Apache Web Sunucusu bir yamanmamış güvenlik açığı yararlandı. Yani burada sunucu dışarıdan gelen saldırılara karşı biraz daha güvenli sahip olabilmesi artırma önlemleri ediyorum. Tabii ki, bu da% 100 koruma sağlamaz, ama kötü adamlar biraz daha zor bir oyun yapmak daha iyidir. Önlemlerin bazıları sadece minimal bir kurulum ve bakım gerektirir. Diğerleri zaman ve yakalamak için PHP, bir çok bilgi gerekiyor. Her zaman güvenlik önlemlerinin seçiminde fayda-maliyet oranı dikkat etmelidir. Bu, Federal Rezerv Bankası gibi küçük, özel sitesi korumak için hiçbir mantıklı. Ancak, sistem birkaç belirli değişiklikler zaten büyük bir anlamı daha fazla güvenlik vardır. Ve sen çok geç bile önce tedavi gerektiğini ....

Tüm ipuçları ve Codesnips güncel bir Debian kutusuna bakın.

Ilk Güvenlik duvarı - Her şeyi yasaklamak

Varsayılan kurulumlarda Çoğu Linux dağıtımı kesinlikle gerekli değildir dışındaki herhangi bir bağlantı noktalarını açın. Bu durum, bununla birlikte, hızlı bir şekilde değiştirebilir bile sunucusu
oynamak ve yapılacak çalışıyorum. Aniden, hatta medya sunucusu Internet veya veritabanı dinlediği
İnternet bağlantıları kabul eder. Bu nedenle, kendilerini disipline ve temelde sadece (kendi kendine) seçilmiş bileşikler dışından sonra tüm bağlantıları yasaklayan sağlar ve çok kısıtlayıcı bir güvenlik duvarı koymak yanlış olmaz. Neyse ki, bu iptables ile hızlı bir şekilde yapılır. Bu şekilde bir orada artık hiçbir iş var dünya için erişilebilir hale getirmek hizmetleri sağlayabilir. Ne yazık ki, biraz konfor ödemek - Güvenlik duvarı, yeni hizmetler sunmak isteyen her zaman ayarlanması gerekir. Bununla birlikte, efor küçük ve büyük faydalar.

 # / Bin / bash

 # Varolan tabloları sil
 iptables-F

 # Gelen tüm bağlantıları engelle
 iptables-P INPUT DROP
 iptables-P FORWARD BIRAKMA

 # Tüm giden İzin
 iptables-P OUTPUT ACCEPT

 # SSH İzin
 iptables-A INPUT-j ACCEPT-p tcp - dport 22 

 # HTTP İzin
 iptables-A INPUT-j ACCEPT-p tcp - dport 80 

 # Ilave servisi (UDP), örneğin, oyun sunucusu izin
 iptables-A INPUT-j ACCEPT-p tcp - dport 4534 

 # Localhost her şeyi verin.  (Sunucu kendisini, hizmetlerine engelsiz erişim izni vermek için,
 Yerel veritabanı # Örneğin, PHP
 iptables-A INPUT-s 127.0.0.1-j ACCEPT

 # Zaten kurulan bağlantıları her limanda kabul edilecektir
 # (Bazı servisleri için gereklidir)
 iptables-A INPUT-m devlet - devlet KURULU, İLGİLİ-j ACCEPT

Bu küçük omurga biz sadece kendi hizmetleri genişletmek ve eklemeye devam edebilirsiniz. Güvenlik duvarı üzerinde çalışırken, her zaman kendinizi dışarı kilitler vaka için düzenlemeler yapmalı. Özellikle fiziksel erişimi olmayan uzak sunucular için, başarısız bir güvenlik duvarı kendi erişim kural kaybedecek çok sinir bozucudur. Şekilde bu problemi önlemek için, güvenlik duvarının azından geçici olarak sadece bir cron işi başlatmak için çalışma bırakabileceği sıfırlar güvenlik duvarı her birkaç dakika veya sunucu yeniden başlatılır. Kuralları daha sonra test ve sevilen, cronjob bırakır ve yeni kurallar sürekli aktif kalır.

Hizmetleri sadece etrafında kendi sunucunuza dinleyen bulmak için, netstat kullanabilirsiniz:

 # TCP yuva için:
 netstat-LPN | grep tcp

 # Aynı şekilde UDP:
 netstat-LPN | grep udp

Güvenlik duvarı gerçekten inşaat test etmek için, başka bir bilgisayardan kendi sunucu port taraması yapabilirsiniz. Her şey dışarı çalıştı ve açık sadece bile limanlar sebep olmalıdır:

 # TCP için:
 nmap-p1-65 535 meinserver.de

 # UDP için:
 nmap-sü-p1-65 535 meinserver.de

Ikinci SSH giriş yasağı

Kendi kök sunucu üzerinde size tam SSH erişimi vardır. Sunucu kez herhangi bir SSH istemci sadece üzerinde çalışmak gibi bu oldukça kullanışlıdır. Bu olumsuz seyri maalesef bir şekilde kendi şifrelerini ele kimin kimseye olabilir. Sadece geçerli bir anahtar dosya ile SSH bağlantısına izin çok daha güvenlidir. Bu nedenle, sunucu ve kopyalanan interaktif oturumlar için istemci ortak anahtar bir şifre girerek devre dışı bırakılır.

 # Istemci, bir ortak anahtar oluşturmak
 Bir şifre oluştururken belirtilen # ise, tek bir ihtiyaç
 # Tuşuna VE parola, daha sonra dosyayı açın.  Aksi halde
 # Sadece anahtar gerekli.

 ssh-keygen-t rsa

 # Sunucuya oluşturulan anahtar kopyalama

 ssh-copy-id-i ~ /. ssh / id_rsa.pub root@meinserver.de

 # Şimdi sunucuda sshd_config ayarlamak / etc / ssh /
 .
 .
 PasswordAuthentication yok
 .
 .

 # Ardından RearBBpos yeniden başlamak
 / Etc / init.d / ssh yeniden

Burada bile bir şey işe yaramazsa bile sokmamak değil için önlem almalısınız.
Kafanın içinde gelen şifre ile bir USB çubuk üzerinde ortak anahtar bir kabuk elde etmek kötü adamlar için çok daha zor hale getirir.

Üçüncü SSH Bruteforcing denyhosts önlemek

Tavsiye 2 pratik değildir ve parola tabanlı oturumların istiyorsanız size kolaylık vazgeçmek istemiyorsanız, en azından sunucu üzerinde saldırganların otomatik şifre oranları önleyebilir. Internet botlara Bir sürü bütün gün SSH sunucularına başka bir şey yapmak ve çeşitli şifreleri denemek için arıyorum. Makul güvenli bir şifre ile bu mümkün değil olsa bile, büyük bir sorun değil, daha iyi bir his var. Sunucusu ve kullanıcının hesapları üzerinde bulunmaktadır, buna ek olarak, aynı zamanda, kullanıcılarının korur. Burada, güvenli parolalar kullanmalarını güvenemez. denyhosts sürekli olarak gözden geçirilmeli kullanıcı ssh oturum açma hatalı yinelenen kendi şifrenizi girdikten bir süre için kilitler. IP kullanıcılarının geçici olarak artık erişim mümkün olması için, / etc / hosts.deny girer. Bu SSH çok umut verici çok uzun değil, görev Bruteforcing.

 install denyhosts apt-get

 # Denyhosts sağ kurulumdan sonra çalışır.  Bu olabilir
 # / Etc / denyhosts.conf ince ayar olarak

4. Karalisteleri bilinen bir sorun IP'leri çıkışı engellemek için kullanılır

Çeşitli internet blacklists tutulur olarak, hangi liste doğranmış / suç / spam / sahte sunucular çok sayıda. Bu IP listeleri bu güvenilen bilgisayarlar için kendi sunucusuna hiç bağlanamıyor olmadığı bilinmektedir, böylece güvenlik duvarı doğrudan girilebilir. Böylece büyük ölçüde kendi sunucusunda spam miktarı azaltabilir ve Rus vekil aniden durması nedeniyle bir veya diğer script kiddie, lokavt. Ben olmuştur bunu nasıl başka bir blog makalesinde Infiltrated.net ve kara örnek nitelendirdi.

5. Sunucu üzerinde çalışmak için FTP kullanmayın

FTP Internet hala güvenilir küçük bir köy idi daha iyi kez bir kalıntıdır. Web sitelerinin çoğu yöneticileri hala sunucuya dosya aktarmak için ya da kendi web sitesi üzerinde çalışmak için FTP kullanabilirsiniz. FTP tüm verilerin güvenliksiz iletir Ne yazık ki, bu, çok belirsizdir. Şifreler ve veri sunucular ve istemciler arasında her hop herhangi bir problem olmaksızın okunabilir. Çok daha güvenli sshfs ile gitmek. Uzak sunucunun yerel dosya sisteminde ssh ile bir dizin monte sağlar. O yerel bilgisayarda sanki Daha sonra sunucu üzerinde çalışabilirsiniz. Sunucudaki dosyaların tüm dosya erişimi tamamen şeffaf, böylece tasarruf daha sonra doğrudan sunucu üzerinde bir görüntü düzenlemek için yerel grafik programı ile açabilirsiniz. Çok çaba olmadan daha fazla konfor ve güvenlik.

 # Sshfs yükleyin
 install sshfs apt-get

 # Yerel dosya sistemi bağlama noktasını oluştur
 mkdir / media / myserver

 Yerel dosya sistemi monte etmek # Sunucu
 sshfs www-data@mein-server.de :/ var / www / media / myserver

 # Şimdi dizin benim yerel sunucu altında / media / kullanılabilir myserver / var / www

6. Güncelleştirmeleri Yükle

Bir süper güvenli bir sistem sistemin kendisi kusurludur ve bilinen bir güvenlik açığından yararlanılabilir eğer yardımcı olmayacaktır. Çoğu durumda, bu açıkları hızla kapattı, ama sık sık yapmak için sistem admin düzenli güncellemeler unutuldu. Linux sunucularda otomatik güncellemeleri etkinleştirmek ya da tartışmalı bir konudur olmamalıdır olsun. Doğal olarak kötü şans bir çok güncellemeleri sistemi kullanılamaz hale olabilir, çünkü bazıları, işe yaramazdı. Bu Debian sistemlerinde çalışma 10 yıl içinde başıma, ama asla ve sonuçtaki risk çok daha yüksek, zamanında ve düzenli güncellemeler faydalarını takdir ediyorum.

 / Etc / crontab içerisinde bu hat, saat 6 da her gün sistem saatini günceller
 0 6 *** kök apt-get update && apt-get-y yükseltme

Bu hızlı-ve-kirli yöntemi şimdiye kadar hep iyi benim için çalıştı. Geçenlerde Debian depo ve paket içinde katılımsız-yükseltmeleri muhtemelen daha zarif sorunu çözer ki var, ama test edilmemiş olması okuyun.

Hatta bu vollautomtischen sistemi güncellemeleri ile tamamen kurtulmuş değil. Bir çekirdek güncelleme teslim edilmiş olursa, el ile yine sistem önyükleme zorunda, aksi takdirde değişiklik etkin olmayacaktır.

Böyle bir açık kaynak CMS veya bir forum olarak sunucu, üçüncü taraf PHP kodu kullanırsanız, elbette güncel yeni sürümleri kadar kesinlikle gerekli ve bu kodudur. Debian bu el emeği kapsayan kuralları bu uygulamaları kendi değişikliklerini güncel olmadığından gereklidir. Her zaman güncel olması için ilgili ürünleri ile posta listeleri okumak için en iyi yolu.

7. Open_basedir ile PHP hapseden

Birçok hack PHP kodu bir güvenlik açığı sitesine ait olmayan dosya sistemi erişim dosyalara erişmek için kullanılan gerçeğine dayalı, ama bunu özellikle belirlenmiş dizinler salt okunur böylece PHP kilitlemek ve yazmak niçin sistemin kendisi izin verdi. Bunun için, php.ini open_basedir yapılandırma seçeneği. PHP orada dizinleri sadece izin verilen erişim koymak seçeneği vardır. Gibi / etc / passwd gibi dosyaları ulaşamayacağı vardır. Tek bir sunucu üzerinde birden fazla web sitesi barındırma her tarafında her sanal konak yapılandırması open_basedir ayarlamanız gerekir.

 : Via # Küresel php.ini
 # / Etc/php5/apache2/php.ini
 / open_basedir = / var / www / :/ tmp

 VirtualHost config # Site Başına:
 php_value open_basedir / var / www / site / :/ tmp /

Tüm siteler genellikle erişimi olması gerekir komut eklenmiştir olmadığını dikkate almak önemlidir, aksi takdirde sizin PHP uygulama özürlü ve meşru işlevleri olabilir.

8. MySQL kullanıcılar için kendi web oluşturun

Kendi PHP-MySQL uygulamasını kullanın, kesinlikle Apllikation kendi MySQL kullanıcı için oluşturmak ve hiçbir koşul altında MySQL root istekleri kullanmalısınız. Ayrıca PHP gerektiren, şimdiye kadar gerçekten sadece hareketine izin verilmez kullanıcı haklarını kısıtlamak gerekir. TABLE ve DROP TABLE CREATE SQL enjeksiyon gibi yaygın ve gerekli asla en PHP uygulamalarında kullanılmaktadır. Bir sunucu üzerinde birden fazla veritabanı ile birden fazla web sitesi barındıran, tüm kullanıcılar için kendi veritabanları oluşturmanız gerekir. Böylece, başarılı bir saldırıdan sonra, bir saldırganın sadece veritabanlarından birine erişimi vardır ve doğrudan at all. Eğer kullanıcı yönetimi Ayrıca sekme "haklar" altında phpMyAdmin ile oldukça kolay işlevleri MySQL kullanıcı hesaplarını yönetmek için komut satırı denemek istemiyorsanız.

9. PHP hata mesajları kapalı

PHP hata mesajları, bir saldırganın kendi sunucusu hakkında çok şey ortaya çıkarabilir: dizin yapıları, veritabanı yapıları, yapılandırma hataları, vb Onlar da çok profesyonelce kullanıcı arayın. Bu nedenle de sadece günlüklerde görmeye devam edeceğiz, çünkü her zaman kapatın, canlı bir web sunucusunda olmalıdır.

 : Via # Küresel php.ini
 # / Etc/php5/apache2/php.ini
 = Kapalı display_errors

 VirtualHost config # Site Başına:
 php_flag display_errors Kapalı

 # Hata mesajları yine de okuyun:
 cat / var/log/apache2/error.log | grep php

10. ModSecurity ile SQL enjeksiyon sınırı için hedef

SQL enjeksiyonu web sunucuları üzerinde saldırı en sık kullanılan yöntemdir. Web uygulaması üzerinden doğrudan erişilebilir ve bunları gerçekleştirmek için bir tarayıcı karşılamaktadır. Burada kendi veri tabanına tüm bunları okumak veya düzenlemek silecektir veritabanı kullanıcı ayrıcalıklarını gönderilen SQL sorguları inşa kullanıcı değişkenleri tarafından iletilir. PHP kodu bu saldırılara ilişkin sitesi yazılmıştır sadece SQL enjeksiyon karşı gerçek bir gerçek korumaları mevcuttur. SQL sorgusunun içine alabilir kullanıcı girişi, her değişken, test edilmeli ve öncelenmesi gerekir. PHP işlevi real_mysql_escape_string () sunuyor.

Kod temiz olup olmadığından emin değilseniz, Apache için mod_security zaten bu saldırıların, büyük miktarda da önler. mod_security sürekli gözden tüm Web sunucusuna istek ve birçok SQL enjeksiyon saldırıları bloke edilebilir öncesi desen yanıt verir. Ne yazık ki, sadece mod_security manuel çaba ile çalışır. Bir taze install mod_security blokları da tam uygulama yüklemeyi yeniden test etmek gibi bir, başka çaresi vardır, böylece PHP kodu (düzenli) işlevleri, gerekli Genellikle sonra. Ancak o zaman bir mod_security bile fonksiyonları bloke istemeyebilirsiniz öğrenmek yok. Eğer öyleyse, ayarlanmasını filtre listesi yalancı-pozitif ve böylece kaybolmaya.

Mod_security yapılandırması biraz karmaşık ve bu makalenin kapsamı dışındadır, ancak Internet mod_security iyi öğreticiler ton vardır edilir.

11. Kimlik kontrolü - Apache onun kim olduğunu bilmiyor
Bu gerçekten kesmek karşı etkili bir yöntem değil, sunucu sürümleri arıyorsanız, otomatik komut yapar, ama biraz ağır. Hata mesajları (örneğin 404 Bulunamadı) kendi sunucularında imza ile sayfalara Genellikle Apache puan.

 Www.daniel-ritter.de Liman 80 Apache/2.2.16 (Unix) Sunucu

Bu, herhangi bir potansiyel saldırgan eigesetzten Web sunucusu ve sürüm seviyesi hakkında daha önce en az bir kez alacaksınız ortadan kaldırır. Imza sunucu hızla kapatılır:

 # / Etc/apache2/conf.d/security
 Kapalı ServerSignature

12. Apache modülleri devre dışı kullanmayın

Varsayılan olarak, Apache ihtiyaç hemen hemen hiç bazı modüller yüklendikten. Debian yüklenen modüller bulabilirsiniz
/ yumuşak bir bağlantı olarak etc/apache2/mods-enabled.

Neredeyse her zaman çıkarılabilir:

mod_cgi

CGI betikleri çalıştırmak için kullanılır. Bu teknik, Web şafağı kadar uzanır ve dinamik web siteleri için izin vermek, modern programlama dillerine atası oldu. mod_cgi PHP sitelerinin% 99 için gereksiz ve hatalı bir Apache config potansiyel bir güvenlik açığıdır,

 a2dismod cgi

mod_status

Apache durum bilgileri okumak için tarayıcılar verir. Neredeyse "normal" siteler için asla kullanılmaz, ancak saldırganların Apache hakkında durum bilgileri sağlar.

 a2dismod durumu

mod_autoindex

mod_autoindex uygun dizine geçerli bir indeks sayfası yoksa dizinler, web sunucusu üzerinde yer edilebilmesini sağlar. Bu işlevsellik istenmiyorsa o web sunucusu üzerinde bütün dizin ağaçları dışarıdan görünür olabilir yana, onu devre dışı bırakmanız gerekir.

 a2dismod autoindex
Yorumlar (0) Trackbacks (1)

    Yorum yapın

    * Bu şifreyi kopyalayın:

    Burada * yazın veya yapıştırın şifre:

    543 Spam yorumlar tarafından şimdiye kadar Engellenen Spam Free Wordpress

    PvmTQM aşağıdaki alana dize kopyalamak ediniz: