[[FrontPage]] #contents 2011/09/18からのアクセス回数 &counter; CMS(コンテンツマネジメントシステム)の各記事にふさわしい広告を表示する実験と Sageの公開サーバを構築するために、さくらのVPSを使うことにしました。 ここでは、VPSの申し込み直後から最低限必要な設定 - 管理ユーザアカウントの作成 - SSHの設定 - IPTables(ファイアーウォール)の設定 - Apacheの設定 - MySQLの設定 - PHPの設定 方法を紹介します。 ** さくらコントロールパネル [#wafc7333] さくらのVPSを申し込むと、「さくらコントロールパネル」のURLとIPアドレス、パスワードが送られてきます。 VPSの初期画面は以下のようなものです。 &ref(さくらVPSコントロールパネル.png); 何の準備もなく、いきなりサーバを起動するのは危険です。 必要最低限のセキュリティ対策を整えてからはじめましょう。 ** テンプレートの必要性 [#gc443693] 少し調べて見ましたが、さくらのサイトには、VPSサーバ構築の情報は提供されていませんでした。 ((すみません、[[さくらインターネット創業日記>http://tanaka.sakura.ad.jp/archives/001065.html]]に設定方法がありました。)) ユーザが何の対処もしないでVPSサーバを起動した場合、セキュリティーの甘いサーバが多数現れることが予想されるため、サーバテンプレートを提供する等の策を講じたが良いと思われます。 Googleで検索したところ、色々な方がさくらのVPSの構築方法を紹介されていますが、 ここでは、独断と偏見で参考になるサイトを紹介し、私の取った設定方法について説明します。 参考にしたサイト、 - 樋口 彰久氏の [[さくらVPSでWebサーバを構築するテンプレ>http://www.unlimited-extreme.com/akihisa.higuchi/development/sakura-vps-web-server.html]] - cross cloverの [[[さくらのVPS] サーバ移行戦記 (2)>http://www.cross-clover.cc/memo/archives/2010/09/server-move-2.html]]、 [[サーバ移行戦記 (3)>http://www.cross-clover.cc/memo/archives/2010/09/server-move-3.html]] - jitsu102の日記の [[さくらVPSサーバの初期設定いろいろ>http://d.hatena.ne.jp/jitsu102/20110417/1303050903]] です。 ** 管理者アカウントの作成 [#need3c8d] 「さくらコントロールパネル」「起動」ボタンを押して、サーバを起動します。 続いて、「リモートコンソール」ボタンを押して、リモートコンソールを表示します。 改行キーを押すとloginプロンプトが表示されますので、rootとさくらから送られたパスワードを入力します。 &ref(remote_console.png); *** rootパスワードの変更 [#ad1c6d16] 最初にrootのパスワードを自分の覚えやすいものに変更します。 #pre{{ # passwd }} *** 管理者アカウントの作成 [#sa3ff185] インターネットと直接つながったサーバなので、 - rootでのログインは、リモートコンソールに限定する - 管理者は、suコマンドを使用しようしないで、すべてsudoコマンドを使用する ことを原則します。 まず、管理者用のアカウントを作成します。 #pre{{ # useradd 管理者アカウント # passwd 管理者アカウント }} suコマンドの使用をwheelグループに限定します。 #pre{{ # cp /etc/pam.d/su /etc/pam.d/su.org # vi /etc/pam.d/su 以下の行のコメント(#)を外す # auth required pam_wheel.so use_uid }} これで、wheelグループ以外のユーザがsuコマンドを使用すると #pre{{ $ su su: incorrect password }} のエラーが表示され、suコマンドが使えなくなります。 どうしても管理者アカウントにsuコマンドの使用を許したい場合には、 #pre{{ # usermod -G wheel 管理者アカウント }} としてください。 *** sudoの設定 [#m5f58300] 管理者にsudoコマンドの使用を許可するために以下の行を追加します。 #pre{{ # visudo 管理者アカウント ALL=(ALL) ALL }} これで、管理者アカウントの設定は完了です。rootアカウントをログアウトし、管理者アカウントでログインします。 ** SSHの設定 [#ka7543f8] SSHの設定ポリシーは、 - SSHでのrootログインを許可しない - パスワード認証を許可しない - RSA認証のみを許可する とします。 まず、管理者アカウントにSSH用のディレクトリを作成します。 #pre{{ $ mkdir .ssh $ chmod 700 .ssh }} *** クライアントの公開鍵の転送 [#eeaa970b] クライアント側のホームディレクトリに.sshが存在しない場合、 #pre{{ $ ls -a }} で.sshが表示されない時には、クライアント側の公開鍵を作成します。パスフレーズを入力しない場合には、-N ''を追加するかパスフレーズを空で指定する。 #pre{{ $ ssh-keygen -t rsa }} 作成された公開鍵をVPSサーバに転送します。 ((SCPの認証はデフォルトのパスワード認証を使っています。)) #pre{{ $ scp .ssh/id_rsa.pub 管理者アカウント@サーバアドレス:/home/管理者アカウント/ }} *** サーバ側のSSH設定 [#bf54c1a9] サーバに戻って、sshdの設定をします。 #pre{{ $ sudo cp /etc/sshd/sshd_config /etc/sshd/sshd_config.org $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org $ sudo vi /etc/ssh/sshd_config 以下の項目を追加・変更します Port 10022 PermitRootLogin no RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no $ sudo /etc/init.d/sshd restart }} *** SSH接続元の制限 [#u1636c05] SSHのポート番号を22から10022に変更した他に、SSH接続元の制限することでセキュリティを強化します。 以下の例では.jpとしましたが、VPSに接続するポートやプロバイダーのアドレスが分かっている場合には、そのアドレスをセットするとより安心です。 #pre{{ $ sudo vi /etc/hosts.allow 以下を追加 ALL: 127.0.0.1 sshd: .jp $ sudo vi /etc/host.deny 以下を追加 sshd: ALL }} ここで、クライアントからパスワード入力なしで、VPSサーバにログインできることを 確認しましょう。 ** IPTablesの設定 [#n0fc4a91] ファイアウォールは以下のポリシーで設定します。 - 不要なパケットは破棄する - 必要なパケットのみ通す *** ファイアウォール停止とオリジナル設定の保存 [#x0162330] IPTablesの設定は、/etc/sysconfig/iptablesにあります。 #pre{{ $ sudo /etc/init.d/iptables stop $ sudo /etc/sysconfig/iptables /etc/sysconfig/iptables.org $ sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.org }} *** デフォルトルール設定 [#d193f608] 既存の設定をクリアし、ポリシーに従ってデフォルトのルールを定義します。 ここで、ループバックloのルールをセットするのを忘れないように。 #pre{{ $ sudo iptables -F $ sudo iptables -P INPUT DROP $ sudo iptables -P OUTPUT ACCEPT $ sudo iptables -P FORWARD DROP $ sudo iptables -A INPUT -i lo -j ACCEPT $ sudo iptables -A OUTPUT -o lo -j ACCEPT }} *** プライベートなIPアドレスからの接続を拒否 [#q340c935] インターネットからの接続でプライベートIPアドレスからの接続があれば、不正なアドレスなので破棄します。 #pre{{ $ sudo iptables -A INPUT -s 10.0.0.0/8 -j DROP $ sudo iptables -A INPUT -s 172.16.0.0/12 -j DROP $ sudo iptables -A INPUT -s 192.168.0.0/16 -j DROP }} *** PINGの許可 [#k1b735ef] PINGを許可します。 ((ネット攻撃を考えるとすべてのPINGを許可するのは問題があります、詳しくは[[ファイアウォール構築(iptables)>http://centossrv.com/iptables.shtml]]を参考にしてください)) #pre{{ $ sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT }} *** ブロードキャストアドレス、マルチキャストアドレス宛のパケットを破棄 [#x527e716] #pre{{ $ sudo iptables -A INPUT -d 255.255.255.255 -j DROP $ sudo iptables -A INPUT -d 224.0.0.1 -j DROP }} *** サーバで必要とするポートへのアクセスを許可 [#y79f6231] 構築するサーバで若干ことなりますが、 ここではSSH, HTTP, Sage用の8000, HTTPS, DNS, SMTP, POP3, SPOP3を許可します。 #pre{{ $ sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT $ sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT }} *** 設定の後処理 [#rc97c3d9] 既に接続されているコネクションの処理を追加し、設定を保存した後、IPTablesを再起動します。 #pre{{ $ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $ sudo /etc/init.d/iptables save $ sudo /etc/sysconfig/iptables /etc/sysconfig/iptables.bak $ sudo /etc/init.d/iptables restart }} ** Apacheの導入 [#k36b02a7] yumを使ってApacheをインストールした後、必要な設定を行います。 #pre{{ $ sudo yum install httpd $ sudo ln -s /usr/bin/perl /usr/local/bin/perl $ sudo chown -R apache:apache /var/www $ sudo chmod 2775 /var/www/cgi-bin $ sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcom e.conf.org $ sudo mv /var/www/error/noindex.html /var/www/error/noindex.html .org $ sudo vi /etc/httpd/conf/httpd.conf 以下の項目を追加・変更 ServerTokens Prod ServerName サブドメイン名.sakura.ne.jp:80 DirectoryIndex index.php index.html ServerSignature Off }} ** MySQLの導入 [#l7ab0ad9] Apacheと同様yumでmysqlをインストールした後、必要な設定をします。 #pre{{ $ sudo yum install mysql.x86_64 mysql-devel.x86_64 mysql-server.x86_64 $ sudo vi /etc/my.cnf 以下を追加 [mysqld] character-set-server=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8 }} ** PHPの導入 [#gc171e96] PHPでは、DBとしてMySQLを想定し、マルチバイト対応とPearのパッケージをインストールします。 ((各自のニーズに合わせて変更してください)) #pre{{ $ sudo yum install php $ sudo yum install php-mbstring php-mcrypt php-mysql php-pear $ sudo vi /etc/php.ini 以下を追加・変更 expose_php = off error_log = /var/log/php-errors.log mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off $ sudo pear channel-update pear.php.net $ sudo pear upgrade –force PEAR $ sudo pear upgrade-all }} ** コメント [#nbb5d09f] #vote(おもしろかった[2],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha