Güvenli yerel barındırma için Linux kutusu kurma A'dan Z'ye


12

İşletmemiz için birkaç uygulamayı barındırmak için kullanılacak bir makineye işletim sistemini yeniden yükleme sürecindeyim. Başvurular sadece yerel olacaktır; harici istemcilerden erişim yalnızca VPN üzerinden yapılacaktır.

Önceki kurulum, yöneticinin çoğu için bir barındırma kontrol paneli (Plesk) kullandı ve yeniden yükleme için benzer bir yazılım parçası kullanmaya bakıyordum - ama sonunda nasıl çalıştığını öğrenmem gerektiğini düşündüm. Yazılımın benim için yapacağı şeylerin çoğunu yapabilirim, ancak hepsinin simbiyozundan emin değilim. Bu , mümkünse, kendimi Yapılandırma Programcısı / Programcısı ülkesinden daha fazla uzaklaştırma girişimidir .

Aradığım şey için hiçbir yerde tam bir yol bulamıyorum, bu yüzden bu soruyu ortaya koyacağımı düşündüm ve insanlar bana yardımcı olabilirse, cevapları ile bunu düzenleyeceğim ve ilerlememi belgeleyeceğim / tuzaklar. Umarım bir gün bu birisine yardımcı olacaktır.

Ayrıntılar:

  • CentOS 5.5 x86_64
  • httpd: Apache / 2.2.3
  • MySQL: 5.0.77 (yükseltilecek)
  • PHP: 5.1 (yükseltilecek)

Gereksinimler:

  • GÜVENLİK!!
    • Güvenli dosya aktarımı
    • Güvenli istemci erişimi (SSL Sertifikaları ve CA)
    • Güvenli veri depolama
    • Başka bir yerel makineye güvenli bağlantı (MySQL)
  • Sanal ana bilgisayarlar / çoklu alt alanlar
  • Yerel e-posta iyi olurdu, ancak kritik değildir

Adımlar:

  • En son CentOS DVD-iso'yu indirin (torrent benim için harika çalıştı).

  • CentOS'u Yükle: Yükleme
    sırasında, başka bir Plesk benzeri yönetici kullanacağımı düşünerek Sunucu Bileşenleri seçeneğini kontrol ettim. Geçmişte, kendi yoluma gitmeye karar verdiğimi düşünürsek, bu muhtemelen en iyi fikir değildi.

  • Temel yapılandırma:
    Kullanıcıları, ağ / IP adresini vb. Kurun. Yum güncelleme / yükseltme.

  • PHP / MySQL'i Yükseltme:
    PHP ve MySQL'i en son sürümlere yükseltmek için CentOS dışında başka bir repota bakmak zorunda kaldım. IUS harika görünüyor ve bulduğum için mutluyum!
  • IUS deposunu paket yöneticimize ekleyin

    cd /tmp
    wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm
    rpm -Uvh epel-release-1-1.ius.el5.noarch.rpm
    wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-4.ius.el5.noarch.rpm
    rpm -Uvh ius-release-1-4.ius.el5.noarch.rpm
    yum list | grep -w \.ius\. # list all the packages in the IUS repository; use this to find PHP/MySQL version and libraries you want to install
    

    PHP'nin eski sürümünü kaldırın ve IUS'dan daha yeni bir sürümü yükleyin

    rpm -qa | grep php # to list all of the installed php packages we want to remove
    yum shell  # open an interactive yum shell
    remove php-common php-mysql php-cli #remove installed PHP components
    install php53 php53-mysql php53-cli php53-common #add packages you want
    transaction solve #important!! checks for dependencies
    transaction run #important!! does the actual installation of packages.
    [control+d] #exit yum shell
    php -v
    PHP 5.3.2 (cli) (built: Apr  6 2010 18:13:45)
    

    MySQL'i IUS deposundan yükseltin

    /etc/init.d/mysqld stop
    rpm -qa | grep mysql # to see installed mysql packages
    yum shell
    remove mysql mysql-server #remove installed MySQL components
    install mysql51 mysql51-server mysql51-devel
    transaction solve #important!! checks for dependencies
    transaction run #important!! does the actual installation of packages.
    [control+d] #exit yum shell
    service mysqld start
    
    mysql -v
    Server version: 5.1.42-ius Distributed by The IUS Community Project
    

    Yükseltme talimatları IUS wiki'nin izniyle: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .


  • Rssh (kısıtlı kabuk) sağlamak için Yükle scpve sftpizin vermeden erişimi, sshgiriş
  • cd /tmp
    wget http://dag.wieers.com/rpm/packages/rssh/rssh-2.3.2-1.2.el5.rf.x86_64.rpm
    rpm -ivh rssh-2.3.2-1.2.el5.rf.x86_64.rpm
    useradd -m -d /home/dev -s /usr/bin/rssh dev
    passwd dev
    

    Düzenleme /etc/rssh.confrssh kullanıcılara SFTP erişim vermek.

    vi /etc/rssh.conf
    

    Uncomment veya ekle:

    allowscp
    allowsftp
    

    Bu, Transmit'teki SFTP protokolü ile makineye bağlanmamı sağlıyor (benim tercih ettiğim FTP programı; eminim diğer FTP uygulamalarına benzer).

    http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html adresinden uygun rssh talimatları (takdirle!) .


  • Sanal arayüzler kurma
  • ifconfig eth1:1 192.168.1.3 up #start up the virtual interface
    cd /etc/sysconfig/network-scripts/
    cp ifcfg-eth1 ifcfg-eth1:1 #copy default script and match name to our virtual interface
    vi ifcfg-eth1:1 #modify eth1:1 script
    

    # ifcfg-eth1: 1 | şu şekilde değiştirin:
    DEVICE = eth1: 1
    IPADDR = 192.168.1.3
    NETMASK = 255.255.255.0
    AĞ = 192.168.1.0
    ONBOOT = evet
    İSİM = eth1: 1

    Tekrarlayarak daha fazla Sanal arabirim ekleyin. ONBOOT=yesİfcfg-eth1: 1 dosyasındaki satır nedeniyle , bu arabirim sistem önyüklendiğinde veya ağ başlatıldığında / yeniden başlatıldığında ortaya çıkar.

    service network restart
    

    Eth0 arabirimini kapatma: [OK]
    eth1 arabirimini kapatma: [OK]
    geridönüş arabirimini kapatma: [OK]
    geridönüş arabirimini açma: [OK]
    eth0 arabirimini açma: [OK]
    eth1 arabirimini açma: [OK]

    ping 192.168.1.3
    

    192.168.1.3'ten 64 bayt: icmp_seq = 1 ttl = 64 zaman = 0.105 ms


  • VirtualHosts
  • Yukarıdaki rssh bölümünde SFTP için kullanmak üzere bir kullanıcı ekledim. Bu kullanıcıların giriş dizininde 'https' adında bir klasör oluşturdum. Burası bu site için belgeler yaşayacağı yerdir, bu yüzden onu işaret edecek bir sanal ev sahibi eklemem gerekiyor. Bu site için yukarıdaki sanal arayüzü kullanacağım (burada dev.site.local olarak adlandırılır).

    vi /etc/http/conf/httpd.conf
    

    Httpd.conf sonuna şunu ekleyin:

    <VirtualHost 192.168.1.3:80>  
        ServerAdmin dev@site.local  
        DocumentRoot /home/dev/https  
        ServerName dev.site.local  
        ErrorLog /home/dev/logs/error_log  
        TransferLog /home/dev/logs/access_log  
    </VirtualHost>  
    

    Her şeyi kontrol etmek için https dizinine bir kukla index.html dosyası koydum. Ona göz atmayı denedim ve izin verilmedi hatalarla karşılandı. Günlükler yalnızca olup bitenler hakkında belirsiz bir referans verdi:

    [Pzt 17 Mayıs 14:57:11 2010] [hata] [müşteri 192.168.1.100] (13) İzin reddedildi: /index.html dosyasına erişim reddedildi

    Ben chmod 777 et denedim. al, ama boşuna. Görünüşe göre, https dizinini ve onun üst dizinlerini chmod + x yapmam gerekiyordu.

    chmod +x /home
    chmod +x /home/dev
    chmod +x /home/dev/https
    

    Bu sorunu çözdü.


  • DNS
  • DNS'yi yerel Windows Server 2003 kutumuz aracılığıyla kullanıyorum. Bununla birlikte, BIND için CentOS belgeleri burada bulunabilir: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html


  • SSL
  • SSL'nin çalışması için httpd.conf'da aşağıdakileri değiştirdim:

    NameVirtualHost 192.168.1.3:443 #make sure this line is in httpd.conf 
    
    <VirtualHost 192.168.1.3:443>  #change port to 443
        ServerAdmin dev@site.local  
        DocumentRoot /home/dev/https  
        ServerName dev.site.local  
        ErrorLog /home/dev/logs/error_log  
        TransferLog /home/dev/logs/access_log  
    </VirtualHost>  
    

    Ne yazık ki, SSL ile bir sayfaya erişmeye çalışırken (Hata kodu: ssl_error_rx_record_too_long) hataları almaya devam ediyorum. JamesHannah'ın aşağıda açıkça belirttiği gibi , httpd.conf'daki certs konumlarını ayarlamamıştım ve bu nedenle tarayıcı tarayıcısı yapan sertifika olarak broswer'da sayfa atıldı.

    Bu yüzden önce bir CA kurmam ve sertifika dosyaları oluşturmam gerekiyordu. Buradaki süreçte büyük (eskiyse) bir yol buldum: http://www.debian-administration.org/articles/284 .

    İşte bu makaleden attığım ilgili adımlar:

    mkdir /home/CA
    cd /home/CA/
    mkdir newcerts private
    echo '01' > serial
    touch index.txt #this and the above command are for the database that will keep track of certs  
    

    Dizin içinde bir openssl.cnfdosya oluşturun /home/CA/ve yukarıda bağlantılı adım başına düzenleyin. (Referans olarak, bitmiş openssl.cnf dosyam şöyle görünüyordu: http://pastebin.com/raw.php?i=hnZDij4T )

    openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf #this creates the cacert.pem which gets distributed and imported to the browser(s)
    

    Adım openssl.cnfadım talimatlara göre tekrar değiştirildi .

    #generates certificate request, and key.pem which I renamed dev.key.pem.
    openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf 
    

    Adım openssl.cnfadım talimatlara göre tekrar değiştirildi .

    #create and sign certificate.
    openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem 
    

    ÖNEMLİ!

    Dosyaları taşıyın ve yeni konumdaki httpd.conf dosyasından referans alın

    cp dev.cert.pem /home/dev/certs/cert.pem
    cp dev.key.pem /home/certs/key.pem
    

    Ben httpd.conf certs yansıtmak ve SSLEngine açmak için güncelledim:

    NameVirtualHost 192.168.1.3:443 
    
    <VirtualHost 192.168.1.3:443>
        ServerAdmin dev@site.local  
        DocumentRoot /home/dev/https  
        SSLEngine on
        SSLCertificateFile /home/dev/certs/cert.pem
        SSLCertificateKeyFile /home/dev/certs/key.pem
        ServerName dev.site.local
        ErrorLog /home/dev/logs/error_log
        TransferLog /home/dev/logs/access_log
    </VirtualHost>  
    

    CA cert.pem dosyasını web'den erişilebilen bir yere koyun ve indirip tarayıcıya aktarın. Şimdi https: //dev.site.local adresini hiçbir hata veya uyarı olmadan ziyaret edebilirim .


    Ve işte buradayım. İlerledikçe bunu düzenlemeye devam edeceğim. SSL e-postasının nasıl yapılandırılacağı ve / veya MySQL sunucusu olacak başka bir Box'a güvenli bağlantı yapılandırılmasına ilişkin ipuçları takdir edilecektir.


    Neden sanal ağ arayüzlerine ihtiyacınız olduğunu anlamıyorum?
    Milan Babuškov

    @Milan çünkü bu makinede birden fazla alan / alt alanım olacak. VirtualHost ve SSL kullanmak için Her alanın / alt alanın kendi IP adresine sahip olması gerekir. httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
    stormdrain

    Bana bir IP adresi israfý gibi görünüyor, ama tamam. Alternatif olarak, her etki alanı için farklı TCP / IP bağlantı noktaları kullanabilirsiniz. Bu şekilde web sunucusu sistem yapılandırmasına daha az bağımlıdır.
    Milan Babuškov

    1
    @Milan: Kurulum yalnızca yerel olduğundan, ihtiyaç duyduğumdan çok daha fazla IP adresi lüksüne sahibim. Ek arayüzler kurmak, nispeten hızlı ve ağrısız bir süreçtir. Apache2.2.x ve TLS yükseltmeleri sayesinde bu sistemi herkese açık olarak kullanacak olsaydım, VirtualHost SSL ile daha iyi çalışıyor gibi görünüyor: serverfault.com/questions/109766/…
    stormdrain

    1
    Çok koltsoff.com/pub/securing-centos - CentOS'u güvenli hale getirme konusunda çok eğitici bir yol öneriyoruz (çoğu diğer dağıtımlara kolayca uygulanabilir) - barındırma hizmetini kapsamaz, ancak içindeki her şey anlaşılmalı ve anladığınız ve kontrol ettiğiniz bir güvenlik duvarının arkasında olmayan herhangi bir CentOS sunucusu.
    dunxd

    Yanıtlar:


    6

    Bu kılavuzda, Apache ile SSL kullanma hakkında birçok yanıt vardır, kendinden imzalı bir sertifika nasıl oluşturulacağını, tanınmış bir sertifika yetkilisinden (CA) nasıl uygun bir sertifika alınacağını ve bir tam sertifika. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

    Sanal ana bilgisayarlar ve SSL'ye gelince, her ana bilgisayarın kendi IP adresine ihtiyacı olacaktır veya daha katı bir çözüm, :443SSL sertifikalarının doğası gereği standarttan farklı bağlantı noktalarında barındırmaktır, ad tabanlı sanal barındırma SSL ile anlaşmaz; bu yüzden farklılaştırmak için başka bir yönteme ihtiyacınız var; farklı bağlantı noktaları / IP'ler.

    SSH'yi kurmak oldukça kolaydır, zaten sunucunuzda çalışıyor olmalıdır. Kilitlemek için birkaç şey yapmak isteyeceksiniz.

    PermitRootLogin no
    AllowGroups admins
    PubkeyAuthentication yes
    PermitEmptyPasswords no
    PasswordAuthentication no
    

    /etc/ssh/sshd_configOturum açmak için genel / özel anahtar çiftlerini kullanmak yerine uzaktan kök erişimini kısıtlamak ve şifre kimlik doğrulamasını kaldırmak için bilgisayarınıza eklenebilir .

    SSH anahtar çiftinizi oluşturmak için puttygenWindows'ta kullanabilirsiniz ; http://putty.very.rulez.org/download.html ya da senin gibi bir Linux ortamında keypair oluşturabilirsiniz: ssh-keygen -b 2048 -t RSA -f my_keypair. Bu bir my_keypairdosya ve my_keypair.pubdosya oluşturur (sadece bu örnek için adlandırılır, kullanıcı adınız için adlandırma veya bırakma -fve oluşturmasına izin verme ~/.ssh/id_rsa).

    Güvenli bir my_keypairşekilde iş istasyonunuza aktarın , gelecekteki SSH erişimi için bu özel anahtardır, kimseyle paylaşmamalısınız. Sonra, sunucuda oluşturmak $HOME/.sshzaten mevcut değilse, mkdir ~/.sshdaha sonra (Ortak anahtarı kopyalamak my_keypair.pub) için ~/.ssh/zaten varsa, authorized_keysiçinde ~/.sshbaşka şeyler için yaptık çünkü, yapabileceğiniz cat my_keypair.pub >> authorized_keysortak anahtarınızı eklemek için, ya cp my_keypair.pub authorized_keyseğer mevcut değil.

    Şimdi çalıştırın chmod 700 ~/.sshve chmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keysizinleri ayarlayın. Sen bir kopyasını tutabilir my_keypairiçinde ~/.ssh/diğer ana bilgisayarlara bağlanırken kullanılacak, ancak yapmalıyım chmod 600 ~/.ssh/my_keypairemin kimsenin kutu erişim yapmak.

    Kendine normal bir kullanıcı hesabı eklemek ve başka bir gruba kendini eklemek isteyeceksiniz usersgibi adminsbenim örnekte.

    Ayrıca , henüz /etc/sudoersetkinleştirmediyseniz, sudokullanımı etkinleştirmek için kullanıcı veya grubunuzu eklemek istersiniz . Bu, visudobu dosyayı düzenlemenin tek yolu olan komutla gerçekleştirilir . visudokullanmadan önce yapılandırmanızda hata ve sözdizimi denetimi gerçekleştirerek sudokullanım kaybını önler .

    username ALL=(ALL) ALL
    

    için eklendi çalıştırılmasına /etc/sudoersizin verecek ve kendi şifrenizi girmenizi isteyecektir. Bu, başka yöneticilerin veya geçici yöneticilerin olması durumunda kullanışlıdır, kök parolayı paylaşmanız gerekmez.usernamesudo yum install blah


    Puttygen'den pencerelerde bir anahtar çifti oluşturursanız, ortak anahtarın biçimini sunucuya yükledikten sonra değiştirmeniz gerektiğini unutmayın. Nasıl olduğunu hatırlamıyorum ama youtube aslında bir video var.
    ESW

    1

    SSL yapılandırmanızdaki sorun aslında SSL'yi etkinleştirmemeniz , bunun için Apache yönergelerine ihtiyacınız olacaktır:

    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
    

    Bu olmadan, bu kayıt çok uzun hatalar alırsınız, çünkü tarayıcınızın beklediği SSL üstbilgileri yerine, büyük bir yığın içinde sadece şifrelenmemiş web sayfası alıyor.


    1
    (bu olmadan, oluşturduğunuz tek şey 443 numaralı bağlantı noktasında düzenli olarak SSL olmayan bir
    hayalet

    1

    Orijinal paketteki MySQL SSL'yi destekler. MySQL derlemenizi kontrol etmek için çalıştırın

    mysqladmin variables | grep ssl
    

    Böyle bir şey bulmalısın have_ssl yes. Seçeneklerini ayarlayın ssl-ca, ssl-keyve ssl-cert.

    SSL gereksinimleri olan kullanıcı hesapları oluşturun:

    create user@host identified by 'password'
    grant privilegelist on database.tables to user@host require ssl
    

    Yanıtınız için teşekkürler. Yine de, bu durumda stunnel daha iyi çalışacak gibi görünüyor böylece ben de db sunucusunda dosyaları depolamak söz bahsetmeyi unuttum.
    stormdrain
    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.