安全なローカルホスティングのためにLinuxボックスをセットアップするAからZ


12

私は、私たちのビジネスのためのいくつかのアプリケーションをホストするために使用されるマシンにOSを再インストールする過程にあります。アプリケーションはローカルのみです。外部クライアントからのアクセスはVPN経由のみになります。

以前のセットアップでは、ほとんどの管理者にホスティングコントロールパネル(Plesk)を使用し、再インストールに別の同様のソフトウェアを使用することを検討していましたが、最終的にすべての仕組みを学ぶ必要があると考えました。ソフトウェアが私のために行うことのほとんどを行うことができますが、すべての共生については不明です。これは、可能な限り、Configuration Programmer / Programmerの土地から遠ざけるための試みです。

私が探しているものの完全なウォークスルーをどこにも見つけることができないので、私はこの質問を立てると思った、そして答えでこれを編集し、私の進捗状況を文書化する方法で人々が私を助けることができるかどうか落とし穴。いつかこれが誰かの助けになることを願っています。

詳細:

  • CentOS 5.5 x86_64
  • httpd:Apache / 2.2.3
  • MySQL:5.0.77(アップグレード予定)
  • PHP:5.1(アップグレード予定)

要求事項:

  • セキュリティ!!
    • 安全なファイル転送
    • 安全なクライアントアクセス(SSL証明書とCA)
    • 安全なデータストレージ
    • 別のローカルマシン(MySQL)への安全な接続
  • 仮想ホスト/複数のサブドメイン
  • ローカル電子メールはいいですが、重要ではありません

手順:

  • 最新のCentOS DVD-isoをダウンロードしてください(私にとってはトレントが非常に役立ちました)。

  • CentOSのインストール:インストール
    中に、別のPleskのような管理者を使用することになると考えて、サーバーコンポーネントオプションをチェックしました。後から考えると、私は自分の道を歩もうと決めたので、これはおそらく最良のアイデアではなかったでしょう。

  • 基本設定:
    ユーザー、ネットワーク/ IPアドレスなどを設定します。Yumの更新/アップグレード。

  • 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
    

    IUSのwikiのアップグレードの手順礼儀:http://wiki.iuscommunity.org/Doc/ClientUsageGuide


  • ログインを許可せずに、rssh(制限付きシェル)をインストールして提供scpおよびsftpアクセスする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
    

    コメント解除または追加:

    allowscp
    allowsftp
    

    これにより、TransmitでSFTPプロトコルを介してマシンに接続できます(選択したFTPプログラム。他のFTPアプリケーションと同様だと確信しています)。

    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 = yes
    NAME = eth1:1

    繰り返して、必要に応じて仮想インターフェイスを追加します。ONBOOT=yesifcfg-eth1:1ファイルの行のため、このインターフェイスは、システムの起動時またはネットワークの起動/再起動時に起動されます。

    service network restart
    

    インターフェースeth0のシャットダウン:[OK]
    インターフェースeth1のシャットダウン:[OK]
    ループバックインターフェースのシャットダウン:[OK]
    ループバックインターフェースの起動:[OK]
    インターフェースeth0の起動:[OK]
    インターフェースeth1:の起動:[OK]

    ping 192.168.1.3
    

    192.168.1.3から64バイト:icmp_seq = 1 ttl = 64 time = 0.105 ms


  • 仮想ホスト
  • 上記の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>  
    

    すべてをチェックアウトするためだけに、ダミーのindex.htmlファイルをhttpsディレクトリに配置しました。私はそれをブラウズしようとしましたが、許可が拒否されましたエラーが見つかりました。ログは、何が起こっているかについてのあいまいな参照のみを提供しました。

    [2010年5月17日14:57:11] [エラー] [クライアント192.168.1.100](13)許可が拒否されました:/index.htmlへのアクセスが拒否されました

    chmod 777 etを試しました。だが、役に立たない。結局のところ、httpsディレクトリとその親ディレクトリをchmod + xする必要がありました。

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

    これで問題は解決しました。


  • DNS
  • ローカルWindows Server 2003ボックスを介してDNSを処理しています。ただし、BINDのCentOSのドキュメントは次の場所にあります:http : //www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html


  • SSL
  • 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)エラーが発生し続けます。JamesHannahが以下に優雅に指摘したように、httpd.confで証明書の場所を設定していなかったため、ブラウザが動かなくなる証明書としてページがブラウザにスローされました。

    そのため、最初にCAをセットアップし、証明書ファイルを作成する必要がありました。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  
    

    dirにopenssl.cnfファイルを作成し、/home/CA/上記のリンクのチュートリアルごとに編集します。(参照用に、完成したopenssl.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をWebアクセス可能な場所に置き、ブラウザにダウンロード/インポートします。これで、エラーや警告なしでhttps://dev.site.localにアクセスできます。


    そして、これは私がいるところです。進行中にこれを編集し続けます。SSL電子メールの設定方法、および/またはMySQLサーバーとなる別のBoxへの安全な接続の設定に関するヒントをいただければ幸いです。


    仮想ネットワークインターフェイスが必要な理由がわかりません。
    ミラノバブシュコフ

    @Milan。これは、このマシンに複数のドメイン/サブドメインがあるためです。VirtualHostとSSLを使用するには、各ドメイン/サブドメインに独自のIPアドレスが必要です。httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
    stormdrain

    私にはIPアドレスの無駄のように見えますが、大丈夫です。または、ドメインごとに異なるTCP / IPポートを使用することもできます-すべて単一のIP上で。そうすれば、Webサーバーはシステム構成にあまり依存しません。
    ミラノバブシュコフ

    1
    @Milan:セットアップはローカルのみであるため、必要以上に多くのIPアドレスを使用できます。追加のインターフェイスの設定は、比較的迅速で簡単なプロセスであることがわかりました。私は公共の使用のためにこのシステムをセットアップした場合は、Apache2.2.xおよびTLSのアップグレードのおかげで、VirtualHostのは、SSLをよりよく動作するようです:serverfault.com/questions/109766/...
    stormdrain

    1
    koltsoff.com/pub/securing-centos(CentOSのセキュリティに関する非常に教育的なチュートリアル(そのほとんどは他のディストリビューションに簡単に適用可能)を強くお勧めします)-ホスティングはカバーしませんが、そこにあるすべてを理解して適用する必要があります理解して制御しているファイアウォールの背後にないCentOSサーバー。
    dunxd

    回答:


    6

    このガイドには、ApacheでSSLを使用することに関する多くの回答があり、自己署名証明書の作成方法、認識された認証局(CA)から適切な証明書を取得する方法、および独自の信頼できないCAを作成して完全な証明書。http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

    仮想ホストとSSLについては、各ホストが独自のIPアドレスを必要とするか、:443SSL証明書の性質上、名前ベースの仮想ホスティングはSSLに対応していません。これが、差別化のために別の方法が必要な理由です。異なるポート/ IP。

    SSHのセットアップは非常に簡単で、すでにサーバーで実行されているはずです。あなたはそれをロックダウンするために多くのことをしたいと思うでしょう。

    PermitRootLogin no
    AllowGroups admins
    PubkeyAuthentication yes
    PermitEmptyPasswords no
    PasswordAuthentication no
    

    に追加して/etc/ssh/sshd_config、リモートルートアクセスを制限し、パスワード認証を削除して、代わりにパブリック/プライベートキーペアを使用してログインすることができます。

    SSHキーペアを作成するにはputtygen、Windowsで使用できます。http://putty.very.rulez.org/download.htmlまたは、次のようなLinux環境でキーペアを作成できますssh-keygen -b 2048 -t RSA -f my_keypair。これにより、my_keypairファイルとファイルが作成my_keypair.pubされます(この例でのみ名前が付けられています。ユーザー名に名前を付けるか-f、そのままにして、生成させてください~/.ssh/id_rsa)。

    my_keypair将来のSSHアクセスのためにワークステーションに安全に転送します。これは秘密キーです。他の人と共有しないでください。次に、サーバー上で、$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 ~/.sshchmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keysて権限を設定します。他のホストに接続するときに使用するためにmy_keypairinのコピーを保存でき~/.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れ、自分のパスワードの入力が求められます。これは、他の管理者または一時的な管理者がいる場合に便利です。ルートパスワードを共有する必要はありません。


    Windowsでputtygenからキーペアを作成する場合、公開キーをサーバーにアップロードしたら、公開キーの形式を変更する必要があることに注意してください。方法は覚えていませんが、YouTubeには実際にビデオがあります。
    ESW

    1

    SSL設定の問題は、実際 SSLを有効にしていないことです。そのためにはApacheディレクティブが必要です。

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

    これがなければ、ブラウザが期待していたSSLヘッダーの代わりに、暗号化されていないWebページだけが大量に記録されるため、これらのレコードのエラーが長すぎます。


    1
    (これがない場合、作成したのはポート443でリッスンしている通常の非SSL仮想ホストだけです)
    JamesHannah

    1

    元のパッケージのMySQLはSSLをサポートしています。MySQLビルドを確認するには、実行します

    mysqladmin variables | grep ssl
    

    のようなものを見つける必要がありますhave_ssl yes。オプションを設定しssl-cassl-keyそしてssl-cert

    SSL要件のあるユーザーアカウントを作成します。

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

    回答ありがとうございます。ただし、dbサーバーにもファイルを保存することを忘れてしまったので、この場合はstunnelの方がうまく機能するように見えます。
    雨水管
    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.