その2,3はこちらです。
https://nskw-style.com/2011/server/centos-nginx-fastcgi-wordpress-2.html
https://nskw-style.com/2011/server/centos-nginx-fastcgi-wordpress-3.html
借りたサーバの環境は、さくらのVPSサーバです。
素の状態なので、CentOS 5.5 x86_64が入っています。
ローカル環境はMacですので、ターミナルで操作します。
セキュリティ設定も書いていますが、責任は持てないです。
参考にしたウェブ上の資料
- WordPants Summer Vol.2 ビアガーデンに掲載された@wokamotoさんの「「VPS で快適 WordPress 生活」 その2」
- WordPants Summer Vol.4 ひまわりに掲載された@wokamotoさんの「「VPS で快適 WordPress 生活」 その4
- WordPress サイトに nginx を導入する | dogmap.jp
- [覚書] CentOS5.4(x86_64)でepel,remiを使ってyumってみた | the ruin of ruinz
- VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定
- その他たくさん。主に上記からのリンク先
ターミナルからログインする
ターミナルからログインすることをリモートログインというようです。
ターミナルを開いて、下記のように打つことで、サーバに入る事ができます。
ssh root@www12345abc.sakura.ne.jp
ssh:ログイン方法の指定
root:ログインしたいアカウント名
www12345abc.sakura.ne.jp:さくらのVPSから知らされたサーバのアドレス。ここではダミー。
セキュリティ設定1:rootログインを無効にして別のユーザを作る
rootとは違うユーザを発行、パスワード作成します。
useradd exuser passwd exuser Changing password for user hogehoge New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
rootユーザというのは、そのサーバを扱うアカウントの中で一番偉くて何でもできるユーザです。それをこれから無効にするので、今作ったexuser
というアカウントでrootと同じことができるようにしておかなければなりません。
usermod -G wheel exuser
これで、exuser
ユーザをwheel
という特殊なグループに属させました。
次に、root
と同じ権限を持たせるのを、wheel
というグループに限定させます。
そのためにまず、/etc/pam.d/
にあるsu
というファイルを編集します。
編集方法などは、こちらから確認できます。
ざっくり書けば、「/auth」
と押すとauth
を含む文字を検索できて、n
を押すと次のマッチが探せます。また、Shift + n
で戻れます。
vi /etc/pam.d/su : #auth required pam_wheel.so use_uid ↓ 行頭の "#" を消す auth required pam_wheel.so use_uid
消したら保存します。escキーを押してから:wq
と押すと「保存して閉じる」です。ターミナルでのふるまい方です。
上記により、exuserでログイン後、
su -
と入力することで、root
に成り代わることが可能になります。
最後にroot
でのログインを禁止します。
vi /etc/ssh/sshd_config : #PermitRootLogin yes ↓ 以下のように変更 PermitRootLogin no
読んだままなので分かりやすいですね:)
そして最後に、今設定したsshd
の設定をサーバに反映させるために、sshd
を再起動します。
service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
ここまでの設定で、root
でのログインができなくなり、exuser
でしかログインできなくなりました。ターミナルのウィンドウをもう一つ開いて確認が必要です。
ssh root@www12345abc.sakura.ne.jp
ではログイン出来ないことを確認します。
パスワードは聞かれますが、ログイン出来ないはずです。
次に、ssh exuser@www12345abc.sakura.ne.jp
でログインしてみましょう。パスワードはさっき作った方になります。
ログインが出来たら、su -
と打ちます。そうすると、root
のパスワードを聞かれるので入力します。それで、exuser@~
と表示されていた所がroot@~
に変われば、ここまでの設定は成功です。
セキュリティ設定2:パスワードでのログインをやめて公開鍵認証にする
パスワードはいつか破られますので、公開鍵認証というもっとすごい方法による認証方法に変更します。この方法を使うことで、限られたパソコンからしかサーバにログイン出来ないようになります。
公開鍵と秘密鍵のペアが必要です。WindowsではPuTTYというので作れるそうです。Macでは、ターミナルを開いて(どこのサーバにもログインしていない状態で)、ssh-keygen
コマンドを入力すると、id_rsa
ファイル(秘密鍵)とid_rsa.pub
ファイル(公開鍵)が作成できます。
2つのファイルは、Macのユーザ直下/.sshフォルダにできます。ファインダーでお家アイコンがあるところのしたです。
.sshファイルのように.から始まるファイルは通常見えない不可視ファイルなので、MacのFinderで不可視ファイルを見えるようにする方法 | 頭ん中で確認しましょう。
次に、サーバにFTPなどでログインします。
一番上の階層から、/home/exuser/
というディレクトリに.ssh
というフォルダを作り、その中に、authorized_keys
というファイルを作成して、公開鍵の中身をコピペします。
この時、.ssh
のパーミッションを700に、authorized_keys
のパーミッションを600にしないとログインできません。
(読めないと認証できないし、開かれすぎてると警告が出て進めません。)
オーナーとグループの両方をexuserにするのも忘れずに。(なんでなの??)
次に、サーバにログインしているroot
アカウントで、sshd_config
を修正してsshdを再起動(前述)します。
sudo vi /etc/ssh/sshd_config : #PubkeyAuthentication yes ↓ 行頭の "#" を消して、公開鍵認証でログインできるように設定 PubkeyAuthentication yes : #PasswordAuthentication yes ↓ 以下のように書き換えて、パスワードログインを禁止 PasswordAuthentication no
セキュリティ設定3:ログの監視
サーバにどういう人たちがアクセスしてきたのかを監視します。そのためのソフトをインストールして、毎日メールが届くようにするための設定です。
ここは、WordPants Summer Vol.2 ビアガーデンを見てください。
この設定を行うと毎日メールが届きますので、読むようにします。
最初はわけがわからないですが、自分がやったことがそれなりの英語で書かれているのでなんとなく分かりそうです。
いつもと違う数字や異常があれば気がつけそうですが、この辺も勉強して詳しくなっていきたいと思います。
セキュリティ設定4:SSHのポート番号の変更
ポート番号というのは、僕の(あくまで僕のm(_ _)m)ざっくり言うとサーバへのドアの番号のようなものです。サーバにはウェブサーバやメールサーバとしての役割があるけど、それぞれの役割には個別の入り口からじゃないと入れません。
ウェブは80番、メール送信なら25番、FTPは21番とだいたい決まっています。SSHの場合には22番です。
この22番というのを変更することで、世界中のサーバの22番ポートに無差別攻撃をしている悪い人から、そもそもサーバを守ろうということです。
変更しても、変更した本人(あなた)がポート番号を覚えていれば問題ない、ということです。
vi /etc/ssh/sshd_config : #Port 22 ↓ 以下のように変更することで ssh 接続する時は 10022 番ポートへのアクセスが必要になる Port 10022
このあと、sshdの再起動です。このあたりも前述のWordPantsに書かれている通りです。
この設定を行ったあとでは、ssh exuser@www12345abc.sakura.ne.jp
ではログインできなくなります。ログインするためには、ssh exuser@www12345abc.sakura.ne.jp -p 10022
と入力します。
セキュリティ設定5:denyhost
僕の環境では、これをインストールすると、ログインができなくなりました。何度もログインに失敗していたからでしょうか?よくわかりませんが、僕はこれを入れていません。
特定のipアドレスから、何度も接続を試みて失敗している場合にそのipアドレスを覚えて、アクセスを禁止してくれるそうです。
やり方は、WordPantsの記載通りですが、PDFで改行が入っている箇所をコピペするとスペースが空いたりして上手くいかないので、下記をコピペしてください。
sudo rpm --import http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL sudo rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm sudo yum -y install denyhosts sudo /etc/init.d/denyhosts start sudo /sbin/chkconfig denyhosts on
セキュリティ設定6:ファイヤーウォール
必要なポート以外を閉じることで、別の入口からのアクセスという攻撃機会を減らします。
必要なインストールや手順はWordPants通りですが、コピペをするとエラーが出るので、下記を使ってください。
(余計なスペースが入るのが問題のようです。環境によっては分かりません。。)
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # HTTP, FTP1, FTP2, SSH -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22222 -j ACCEPT # MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
nginxをインストールする
ここからは、WordPants Vol.4 ひまわりをベースにしています。
まずは、rpmビルドです。
RPMはRedHat Package Managerの略で、サーバに必要なソフトをインストールするための仕組みの一つです。
何かをインストールしているということは、どこかからインストーラを持ってきているわけですが、それをディストリビュート(配布する・流通させる)しているしくみがあるはずで、それのことです。ありがたいことです:)。
ここもWordPantsのPDFをコピペすると、いらないスペースが入るので、僕の成功したものを下記に貼ります。
yum install gcc rpm-build perl-ExtUtils-Embed mkdir $HOME/rpm $HOME/rpm/SOURCES $HOME/rpm/SPECS $HOME/rpm/BUILD $HOME/rpm/SRPMS $HOME/rpm/RPMS $HOME/rpm/RPMS/x86_64 echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
「rpm ビルド用のソースパッケージをインストール後、nginx 最新版(1.0.4)のソースを取得」の部分です。
wget http://download.fedora.redhat.com/pub/epel/5/SRPMS/nginx-0.8.54-1.el5.src.rpm rpm -Uvh nginx-0.8.54-1.el5.src.rpm cd ~/rpm/SOURCES/ wget http://nginx.org/download/nginx-1.0.4.tar.gz cd ~/rpm/SPECS/ vi nginx.spec
以下は、nginx.specの書き換えの時に必要なものですが、PDFで激しくゴチャゴチャ担っているので(もしかしてWindowsだと平気なのかな?)、著者のwokamotoさんのブログも参考にしています(バージョンなどが古いので見比べてくっつけました)。
また、下記は、この記事を書いている2011年8月14日のものなので、バージョン番号などは自分で合わせて書きかえる必要があります。現在の最新バージョンがいくつなのかに気をつけてください。
%define _unpackaged_files_terminate_build 0 : Version: 1.0.4 : #Patch0: nginx-auto-cc-gcc.patch : #%patch0 -p0 : %build # nginx does not utilize a standard configure script. It has its own # and the standard configure options cause the nginx configure script # to error out. This is is also the reason for the DESTDIR environment # variable. The configure script(s) have been patched (Patch1 and # Patch2) in order to support installing into a build environment. export LANG='ja_JP.UTF-8' export DESTDIR=%{buildroot}
次のrpmbuild -bb nginx.spec
をやるとインストールするのに必須なパッケージ(=ソフト?)の一覧が出ます。
rpmbuild -bb nginx.spec
僕のやったときは下記が出ました。
error: Failed build dependencies: pcre-devel is needed by nginx-1.0.4-1.x86_64 zlib-devel is needed by nginx-1.0.4-1.x86_64 openssl-devel is needed by nginx-1.0.4-1.x86_64 libxslt-devel is needed by nginx-1.0.4-1.x86_64 GeoIP-devel is needed by nginx-1.0.4-1.x86_64 gd-devel is needed by nginx-1.0.4-1.x86_64
一つ一つ、yumコマンドでインストールしていきます。
yum install pcre-devel yum install zlib-devel yum install openssl-devel yum install libxslt-devel yum install GeoIP-devel yum install gd-devel
これを行ってから再度、rpmbuild -bb nginx.spec
を行い、rpmビルドが完了します。
今回はかなり長く待ちます。1分くらい。
これで、パッケージがサーバに設置されたことになるのですが、ls -l
コマンドでパッケージの名前を確認する必要があります。
cd ~/rpm/RPMS/x86_64/ ls -l
すると、今回は下の画像のような形になりました。
nginx-1.0.4-1.x86_64.rpm
がパッケージの名前なので、sudo rpm -Uvh nginx-1.0.4-1.x86_64.rpm
として、コマンド入力します。
以上でnginxのインストールが完了です。
fastCGIの導入
Apacheでは、mod_phpというモジュールでphpが動いていました。
nginxでは、fastCGIでphpを動かします。これが速いそうです!嬉しい!
まず、spawn-fcgiをインストールします。
yum install spawn-fcgi
やってもエラーが。。。今日はここまで。
以下は出たエラー。
yum install spawn-fcgi Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: ftp.nara.wide.ad.jp * base: ftp.nara.wide.ad.jp * extras: ftp.nara.wide.ad.jp * updates: ftp.nara.wide.ad.jp Setting up Install Process No package spawn-fcgi available. Nothing to do
コメント
コメント一覧 (1件)
[…] nskw on 2011年8月24日 Check前回と前々回 https://nskw-style.com/2011/server/centos-nginx-fastcgi-wordpress-1.html […]