सुरक्षित स्थानीय होस्टिंग के लिए लिनक्स बॉक्स स्थापित करने का A से Z


12

मैं एक मशीन पर ओएस को फिर से स्थापित करने की प्रक्रिया में हूं, जिसका उपयोग हमारे व्यवसाय के लिए कुछ अनुप्रयोगों को होस्ट करने के लिए किया जाएगा। आवेदन केवल स्थानीय होंगे; बाहरी ग्राहकों से पहुंच केवल वीपीएन के माध्यम से होगी।

पूर्व सेटअप ने अधिकांश व्यवस्थापक के लिए एक होस्टिंग कंट्रोल पैनल (Plesk) का उपयोग किया था, और मैं पुनर्स्थापना के लिए एक अन्य समान सॉफ्टवेयर का उपयोग कर रहा था - लेकिन मुझे लगा कि मुझे यह सीखना चाहिए कि यह कैसे काम करता है। मैं सॉफ्टवेयर का सबसे ज्यादा काम मेरे लिए कर सकता हूं, लेकिन मैं यह सब के सहजीवन पर स्पष्ट नहीं हूं। यह सब विन्यास प्रोग्रामर / प्रोग्रामर की भूमि से खुद को दूर करने का एक प्रयास है , यदि संभव हो तो।

मैं जो कुछ भी खोज रहा हूं, उसके लिए मुझे पूरा वॉकथ्रू नहीं मिल रहा है, इसलिए मुझे लगा कि मैं इस सवाल को उठाऊंगा, और अगर लोग इस तरह से मेरी मदद कर सकते हैं तो मैं इसे उत्तर के साथ संपादित करूंगा, और अपनी प्रगति का दस्तावेज दूंगा / नुकसान। उम्मीद है कि किसी दिन यह किसी को लाइन में मदद करेगा।

विवरण:

  • सेंटोस 5.5 x86_64
  • httpd: अपाचे / 2.2.3
  • MySQL: 5.0.77 (अपग्रेड किया जाना है)
  • PHP: 5.1 (अपग्रेड किया जाना है)

आवश्यकताएँ:

  • सुरक्षा !!
    • सुरक्षित फ़ाइल स्थानांतरण
    • सुरक्षित क्लाइंट एक्सेस (SSL Certs और CA)
    • सुरक्षित डेटा संग्रहण
    • किसी अन्य स्थानीय मशीन से सुरक्षित कनेक्शन (MySQL)
  • Virtualhosts / कई उप डोमेन
  • स्थानीय ईमेल अच्छा होगा, लेकिन महत्वपूर्ण नहीं

कदम:

  • नवीनतम CentOS DVD-iso डाउनलोड करें (टोरेंट ने मेरे लिए बहुत अच्छा काम किया)।

  • CentOS इंस्टॉल करें: इंस्टॉल
    से गुजरने के दौरान, मैंने सर्वर कंपोनेंट्स के विकल्प की जाँच करते हुए सोचा कि मैं एक और Plesk- जैसे एडमिन का उपयोग करने जा रहा हूँ। दृष्टिहीनता में, मैंने अपने तरीके से जाने का प्रयास करने का विचार किया, यह शायद सबसे अच्छा विचार नहीं था।

  • मूल विन्यास:
    सेटअप उपयोगकर्ता, नेटवर्किंग / आईपी पता, आदि यम अद्यतन / उन्नयन।

  • PHP / MySQL
    को अपग्रेड करें : PHP और MySQL को नवीनतम संस्करणों में अपग्रेड करने के लिए, मुझे CentOS के बाहर एक और रेपो को देखना होगा। IUS बहुत अच्छा लग रहा है और मुझे खुशी है कि मैंने इसे पाया!
  • हमारे पैकेज मैनेजर में IUS रिपॉजिटरी जोड़ें

    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 के पुराने संस्करण को निकालें और IUS से नया संस्करण स्थापित करें

    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)
    

    IUS रिपॉजिटरी से MySQL अपग्रेड करें

    /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
    

    आईयूएस विकी के सौजन्य से अपग्रेड निर्देश: http://wiki.iuscommunity.org/Doc/ClientUsageGideide


  • लॉगिन की अनुमति के बिना, प्रदान करने scpऔर sftpउपयोग करने के लिए rssh (प्रतिबंधित शेल) स्थापित करेंssh
  • 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
    

    /etc/rssh.confRssh उपयोगकर्ताओं को SFTP तक पहुंच प्रदान करने के लिए संपादित करें ।

    vi /etc/rssh.conf
    

    Uncomment या जोड़ें:

    allowscp
    allowsftp
    

    यह मुझे ट्रांसमिट में SFTP प्रोटोकॉल के माध्यम से मशीन से कनेक्ट करने की अनुमति देता है (मेरी पसंद का एफ़टीपी प्रोग्राम; मुझे यकीन है कि यह अन्य एफ़टीपी अनुप्रयोगों के साथ समान है)।

    rssh निर्देश http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html से विनियोजित (प्रशंसा के साथ!) ।


  • वर्चुअल इंटरफेस सेट करें
  • 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 | संशोधित करें तो यह इस तरह दिखता है:
    DEVICE = eth1: 1
    IPADDR = 192.168.1.3
    NETMASK = 255.255.255.0
    NETWORK = 192.168.1.0
    ONBOOT = हाँ
    NAME = eth1: 1

    दोहराने से आवश्यकतानुसार अधिक वर्चुअल इंटरफेस जोड़ें। की वजह से ONBOOT=yesifcfg-eth1 में लाइन: 1 फ़ाइल, इस इंटरफेस ऊपर लाया जाएगा जब सिस्टम जूते, या नेटवर्क शुरू होता है / पुनरारंभ।

    service network restart
    

    शट डाउनिंग इंटरफ़ेस eth0: [ओके]
    शट डाउन इंटरफ़ेस एथ 1: [ओके]
    शट डाउन लूपबैक इंटरफ़ेस: [ओके]
    लूपबैक इंटरफ़ेस लाना: [ओके]
    इंटरफ़ेस एथ0 लाना: [ओके]
    इंटरफ़ेस एथ 1 लाना: [ओके]

    ping 192.168.1.3
    

    192.168.1.3 से 64 बाइट्स: icmp_seq = 1 ttl = 64 समय = 0.105 एमएस


  • VirtualHosts
  • ऊपर के rssh अनुभाग में मैंने SFTP के लिए उपयोग करने के लिए एक उपयोगकर्ता जोड़ा। इस उपयोगकर्ता की होम निर्देशिका में, मैंने 'https' नामक एक फ़ोल्डर बनाया। यह वह जगह है जहां इस साइट के लिए दस्तावेज़ लाइव होंगे, इसलिए मुझे एक वर्चुअलहोस्ट जोड़ना होगा जो इसे इंगित करेगा। मैं इस साइट के लिए उपरोक्त आभासी इंटरफ़ेस का उपयोग करूँगा (यहाँ dev.site.local कहा जाता है)।

    vi /etc/http/conf/httpd.conf
    

    Httpd.conf के अंत में निम्नलिखित जोड़ें:

    <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>  
    

    मैंने https निर्देशिका में एक डमी index.html फ़ाइल डाल दी है ताकि सबकुछ ठीक से जांचा जा सके। मैंने इसे ब्राउज़ करने की कोशिश की, और अनुमति से इनकार त्रुटियों के साथ मुलाकात की। लॉग्स ने केवल एक अस्पष्ट संदर्भ दिया कि क्या चल रहा था:

    [सोम 17 मई 14:57:11 2010] [त्रुटि] [ग्राहक 192.168.1.100] (13) अनुमति से इनकार: /index.html तक पहुंच से इनकार किया गया

    मैंने 777 एट चामोड की कोशिश की। अल।, लेकिन कोई फायदा नहीं हुआ। पता चला, मुझे https निर्देशिका और इसके 'मूल निर्देशिका' को chmod + x करने की आवश्यकता है।

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

    इससे वह समस्या हल हो गई।


  • डीएनएस
  • मैं अपने स्थानीय विंडोज सर्वर 2003 बॉक्स के माध्यम से DNS को संभाल रहा हूं। हालाँकि, BIND के लिए CentOS प्रलेखन यहाँ पाया जा सकता है: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html


  • एसएसएल
  • SSL काम करने के लिए, मैंने httpd.conf में निम्नलिखित बदलाव किए:

    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>  
    

    दुर्भाग्य से, मुझे SSL के साथ पृष्ठ तक पहुँचने का प्रयास करते समय त्रुटि (त्रुटि कोड: ssl_error_rx_record_too_long) मिलती रहती है। जैसा कि जेम्सहन्ना ने इनायत से नीचे बताया , मैंने httpd.conf में समारोहों के स्थानों की स्थापना नहीं की थी, और इस तरह ब्रॉसर पर फेंके गए पेज को प्रमाणित किया जा रहा था, क्योंकि ब्राउज़र को बाल्क बनाया गया था।

    इसलिए पहले, मुझे एक CA सेट करने और प्रमाण पत्र फ़ाइलें बनाने की आवश्यकता थी । मुझे इस प्रक्रिया पर एक महान (यदि पुराना) walkthrough मिला: http://www.debian-administration.org/articles/284

    यहाँ उस लेख से प्रासंगिक कदम उठाए गए हैं:

    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  
    

    डीआईआर openssl.cnfमें एक फाइल बनाएं /home/CA/और इसे ऊपर दिए गए वाकथ्रू के अनुसार संपादित करें। (संदर्भ के लिए, मेरी समाप्त हुई Opensl.cnf फ़ाइल इस तरह दिखती है: 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)
    

    openssl.cnfफिर से चलने वाले निर्देशों के अनुसार संशोधित किया गया।

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

    openssl.cnfफिर से चलने वाले निर्देशों के अनुसार संशोधित किया गया।

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

    जरूरी!

    फ़ाइलों को स्थानांतरित करें और उन्हें नए स्थान पर httpd.conf से संदर्भित करें

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

    मैंने httpd.conf को अपडेट किया कि वे सिल्ट को प्रतिबिंबित करें और SSLEngine को चालू करें:

    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 रखो, और इसे मेरे ब्राउज़र में डाउनलोड / आयात किया। अब मैं कोई त्रुटि या चेतावनी के साथ https: //dev.site.local पर जा सकता हूं ।


    और यह वह जगह है जहां मैं हूं। प्रगति करते ही मैं इसका संपादन करता रहूंगा। SSL ईमेल कैसे कॉन्फ़िगर करें, और / या MySQL सर्वर होगा एक अन्य बॉक्स के लिए सुरक्षित कनेक्शन कॉन्फ़िगर करने के बारे में कोई सुझाव।


    मुझे समझ नहीं आता कि आपको वर्चुअल नेटवर्क इंटरफेस की आवश्यकता क्यों है?
    मिलन बाबूकोव

    @Milan क्योंकि मेरे पास इस मशीन पर कई डोमेन / उप डोमेन होंगे। VirtualHost और SSL का उपयोग करने के लिए प्रत्येक डोमेन / उपडोमेन को अपना स्वयं का आईपी पता होना चाहिए। httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
    तूफानी

    मुझे आईपी पते की बर्बादी लगती है, लेकिन ठीक है। वैकल्पिक रूप से, आप प्रत्येक डोमेन के लिए अलग-अलग टीसीपी / आईपी पोर्ट का उपयोग कर सकते हैं - सभी एकल आईपी पर। इस तरह वेब सर्वर सिस्टम कॉन्फ़िगरेशन पर कम निर्भर है।
    मिलन बाबूकोव

    1
    @ मायन: चूंकि सेटअप केवल स्थानीय है, इसलिए मेरे पास ज़रूरत से ज़्यादा आईपी पते उपलब्ध हैं। अतिरिक्त इंटरफेस स्थापित करना, मैंने पाया है, तुलनात्मक रूप से एक त्वरित और दर्द रहित प्रक्रिया है। अगर मैं इस प्रणाली को सार्वजनिक उपयोग के लिए स्थापित कर रहा था, तो Apache2.2.x और TLS अपग्रेड के लिए धन्यवाद, VirtualHost SSL के साथ बेहतर काम करने लगता है: serverfault.com/questions/109766/…
    तूफान

    1
    अत्यधिक सलाह देते हैं koltsoff.com/pub/securing-centos - CentOS को सुरक्षित करने पर एक बहुत ही शैक्षिक पूर्वाभ्यास (जो कि आसानी से अन्य डिस्ट्रो पर लागू होता है) - यह होस्टिंग को कवर नहीं करता है, लेकिन वहां की हर चीज को समझा जाना चाहिए और उस पर लागू होना चाहिए कोई भी CentOS सर्वर जो आपके द्वारा समझ और नियंत्रण में फ़ायरवॉल के पीछे नहीं है।
    dunxd

    जवाबों:


    6

    इस गाइड के पास अपाचे के साथ एसएसएल का उपयोग करने के बारे में बहुत सारे उत्तर हैं, आपको बताता है कि एक स्व-हस्ताक्षरित प्रमाण पत्र कैसे बनाया जाए, किसी मान्यता प्राप्त प्रमाण पत्र प्राधिकरण (सीए) से उचित प्रमाण पत्र कैसे प्राप्त करें और अपना खुद का, अविश्वसनीय सीए बनाने के लिए कैसे करें पूर्ण प्रमाण पत्र। http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

    वर्चुअल होस्ट और एसएसएल के लिए, प्रत्येक होस्ट को अपने स्वयं के आईपी पते की आवश्यकता होगी या एक अलग तरह के पोर्ट पर होस्ट करने के लिए डस्टीयर समाधान :443की आवश्यकता होती है, एसएसएल प्रमाणपत्र की प्रकृति के कारण मानक की तुलना में , नाम-आधारित वर्चुअल होस्टिंग एसएसएल के साथ नहीं मिलती है; जिसके कारण आपको अंतर करने के लिए दूसरी विधि की आवश्यकता होती है; अलग पोर्ट / आईपी।

    SSH की स्थापना करना बहुत आसान है, यह आपके सर्वर पर पहले से ही चलना चाहिए। आप इसे लॉक करने के लिए कई चीजें करना चाहेंगे।

    PermitRootLogin no
    AllowGroups admins
    PubkeyAuthentication yes
    PermitEmptyPasswords no
    PasswordAuthentication no
    

    इसे /etc/ssh/sshd_configदूरस्थ रूट एक्सेस को प्रतिबंधित करने, और लॉग इन करने के लिए सार्वजनिक / निजी कीपेयर का उपयोग करने के बजाय पासवर्ड प्रमाणीकरण को हटाने के लिए जोड़ा जा सकता है।

    अपने एसएसएच कीपर बनाने के लिए, आप puttygenविंडोज में उपयोग कर सकते हैं ; http://putty.very.rulez.org/download.html या आप लिनक्स वातावरण में कीपर बना सकते हैं जैसे ssh-keygen -b 2048 -t RSA -f my_keypair:। यह एक my_keypairफ़ाइल और एक my_keypair.pubफ़ाइल बनाएगा (केवल इस उदाहरण के लिए नाम दिया गया है, मैं आपके उपयोगकर्ता नाम या बंद करने -f, और इसे उत्पन्न करने के लिए नाम देने का सुझाव दे सकता हूं ~/.ssh/id_rsa)।

    सुरक्षित रूप my_keypairसे अपने कार्य केंद्र में स्थानांतरित करें, भविष्य के एसएसएच पहुंच के लिए, यह निजी कुंजी है, आपको इसे किसी के साथ साझा नहीं करना चाहिए। फिर, सर्वर पर, बनाएं $HOME/.sshअगर यह पहले से मौजूद नहीं है, mkdir ~/.sshतो सार्वजनिक कुंजी ( my_keypair.pub) की प्रतिलिपि बनाएँ ~/.ssh/, यदि आपके पास पहले से authorized_keysहै ~/.sshक्योंकि आपने अन्य चीजों के लिए ऐसा किया है, तो आप cat my_keypair.pub >> authorized_keysअपनी सार्वजनिक कुंजी को संलग्न करने के लिए कर सकते हैं , या cp my_keypair.pub authorized_keysयदि यह मौजूद नहीं है।

    अब रन करें chmod 700 ~/.sshऔर chmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keysपरमिशन सेट करें। आप की एक प्रति रख सकते my_keypairमें ~/.ssh/जब अन्य मेजबान से कनेक्ट करने के उपयोग के लिए है, लेकिन आप क्या करना चाहिए chmod 600 ~/.ssh/my_keypairयकीन है कि कोई और एक्सेस कर सकते हैं इसे बनाने के लिए।

    आप अपने लिए एक सामान्य उपयोगकर्ता खाता जोड़ना usersचाहेंगे, adminsऔर मेरे उदाहरण के रूप में खुद को किसी अन्य समूह में जोड़ सकते हैं ।

    यदि आप पहले से ही उपयोग नहीं कर पाए हैं, तो आप संभवतः उपयोग /etc/sudoersको सक्षम करने के लिए अपने उपयोगकर्ता या समूह को जोड़ना चाहेंगे sudo। यह कमांड के साथ पूरा किया गया है visudoजो इस फाइल को एडिट करने का एकमात्र तरीका है। उपयोग की visudoहानि को रोकने, इसे लिखने से पहले अपने कॉन्फ़िगरेशन पर त्रुटि और वाक्यविन्यास की जाँच करता है sudo

    username ALL=(ALL) ALL
    

    जोड़ा /etc/sudoersअनुमति देगा usernameचलाने के लिए sudo yum install blahऔर अपने खुद के पासवर्ड के लिए संकेत देगा। यह उस घटना में आसान है, जब आपके पास अन्य व्यवस्थापक या अस्थायी व्यवस्थापक हैं, आपको रूट पासवर्ड साझा करने की आवश्यकता नहीं है।


    यदि आप पोटीन से खिड़कियों में एक कीपर बनाते हैं, तो ध्यान रखें कि सर्वर पर अपलोड करने के बाद आपको सार्वजनिक कुंजी का प्रारूप बदलना होगा। मुझे याद नहीं है कि कैसे youtube लेकिन यह वास्तव में एक वीडियो है।
    ईएसडब्ल्यू

    1

    आपके SSL कॉन्फ़िगरेशन के साथ समस्या यह है कि आपने वास्तव में SSL सक्षम नहीं किया है , इसके लिए आपको Apache निर्देशों की आवश्यकता होगी:

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

    इसके बिना आपको वे रिकॉर्ड बहुत लंबी त्रुटियां मिलेंगी, ऐसा इसलिए है क्योंकि एसएसएल हेडर के बजाय आपका ब्राउज़र अपेक्षा कर रहा था, यह बदले में केवल एक अनएन्क्रिप्टेड वेब पेज को बड़ी संख्या में मिल रहा है।


    1
    (इसके बिना, आपने जो कुछ भी बनाया है, वह एक नियमित गैर-SSL vhost है जो पोर्ट 443 पर सुन रहा है)
    जेम्सहैन

    1

    मूल पैकेज से MySQL SSL का समर्थन करता है। अपने MySQL बिल्ड की जाँच करने के लिए, रन करें

    mysqladmin variables | grep ssl
    

    आपको कुछ ऐसा ढूंढना चाहिए have_ssl yes। विकल्प सेट करें ssl-ca, ssl-keyऔर ssl-cert

    SSL आवश्यकताओं के साथ उपयोगकर्ता खाते बनाएँ:

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

    जवाब देने के लिए धन्यवाद। हालांकि, मैं यह उल्लेख करना भूल गया कि मैं भी db सर्वर पर फाइलें संग्रहीत कर रहा हूं, इसलिए ऐसा लगता है कि इस मामले में stunnel बेहतर काम करेगा।
    तूफान
    हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
    Licensed under cc by-sa 3.0 with attribution required.