読者です 読者をやめる 読者になる 読者になる

Tahoo!!

自分の勉強していること(コンピュータ関連 / ネットワーク / セキュリティ / サーバ)や趣味について書いていきます

takahoyo.netを構築した

最近、自分のプロフィールページのようなものを何となく作った。Webサーバだけど今まで自分がやって来なかったことを色々やったので、何をやったかをまとめようと思う。
ちなみに作ったページはこちら
takahoyo.net
f:id:takahoyo:20150105000131p:plain

サーバの調達

まずは、サーバから。と、いっても自分の家にサーバマシン本体があるという訳ではなく、VPS(Virtual Private Server)を借りた。
やっぱりハードの調達とか運用とか少し手間なので、手軽に始めるにはVPSは良い。

今回は#ssmjp 2014/10の時に、ConoHaの3,000円クーポンを頂いたのでConoHaを使ってみた。

ConoHa - 1分ではじめる、クラウドのようなVPS。ひと月930円から。

ConoHaは、クラウドのようなVPSということでワンクリックで簡単にVPSを始められる。コントロールパネルも個人的に好きなデザインで良い。

今回は以下表のようなスペックのVPSを作った。

CPU メモリ HDD OS
2コア 1024MB 100GB CentOS7-1406(64bit)

ちなみに、IPアドレスはv4が1個、v6が16個貰える。v6そんなに要らな(ry
SSHの設定が完了するまでは、ConoHaコントロールパネルから操作を行った。

ユーザの作成

VPSを作った時はrootアカウントしかないので、一般のユーザを作った。そうしないと、sshでrootログインを許可しないといけなくなるので。
例えば、hogeというユーザを作ってパスワードを付けたい場合は以下のようになる。

# adduser hoge
# passwd hoge
Changing password for user hoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

SSHの設定

今回は、公開鍵認証、rootログイン禁止の設定を変えた。

サーバ側

まず秘密鍵と公開鍵を作成する。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
Created directory '/home/hoge/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
15:89:64:4c:09:fc:93:bb:0c:e6:4a:20:da:6e:8d:cc hoge@takahoyo.net
The key's randomart image is:
+--[ RSA 2048]----+
|     ..=+o..     |
|      ..+ ..     |
|       . ..      |
|        +.       |
|. .     So       |
|.o .  o .        |
|.o.o.o o .       |
| .E.. . o        |
| .. ..           |
+-----------------+
$ ls ~/.ssh
id_rsa  id_rsa.pub
$ chmod 600 id_rsa.pub

このコマンドを実行すると、~/.sshにid_rsaという秘密鍵ファイルとid_rsa.pubという公開鍵ファイルが作成される。
秘密鍵ファイルはクライアント側で、公開鍵ファイルはサーバ側でログイン時に使用。公開鍵のファイルはパーミッションを変更しておく。

次に、/etc/ssh/sshd-configを変更する。

# rootログインの禁止
PermitRootLogin no
# 公開鍵認証の設定
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/id_rsa.pub

sshdを再起動する。

# systemctl restart sshd

参考:CentOS で公開鍵認証による SSH ログイン設定を行う | Webセキュリティの小部屋

また、クライアント側で公開鍵認証が行えることを確認し公開鍵認証のみにしたい場合は、sshd-configの以下の設定を変更する。

PasswordAuthentication no

もちろん、sshdの再起動を忘れずに。

# systemctl restart sshd

クライアント側

ssh, scpコマンドが使える場合

scpを利用して秘密鍵ファイルをサーバからダウンロードする。

$ scp hoge@takahoyo.net:~/.ssh/id_rsa ~/.ssh/

sshコマンドで接続する場合、~/.ssh秘密鍵ファイルを保存して、以下のコマンドを実行するとホスト名のホストにSSH接続できる。

$ ssh -i ~/.ssh/id_rsa hoge@takahoyo.net

ちなみに、~/.ssh/configというファイルを作って設定を保存しておくと、Hostに設定した名前で接続できるので便利。
~/.ssh/config

Host test
	HostName	takahoyo.net
	Port		22
	Protocol	2
	User		hoge
	IdentityFile	~/.ssh/id_rsa  #秘密鍵ファイルのパス
$ ssh test

参考:~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶろ

補足
Cygwinsshをする場合、以下のようなエラーが出る場合がある。

$ ssh -i ~/.ssh/id_rsa hoge@takahoyo.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/home/hoge/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/hoge/.ssh/id_rsa
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

この場合は、以下のサイトを参考にしてid_rsaパーミッションを変えると、接続できるようになる。
tIV.net: Cygwin: Permissions 0660 for '~/.ssh/id_rsa' are too open.

TeraTermを使う場合

SCPは、ログインして「ファイル(F)→SSH SCP...」から行うことができる。
TeraTermで公開鍵認証を行う場合は、「SSH認証」画面で「RSA/DSA鍵を使う」でダウンロードしてきた秘密鍵を選択して、ログインする。
参考:CentOS で公開鍵認証による SSH ログイン設定を行う | Webセキュリティの小部屋

Nginxのインストール、設定

Webサーバは、Apache HTTP Serverを使用することが多いと思うが、今回は最近流行りのNginxを使用した。
まず、Nginxリポジトリを設定し、yumを使ってインストールを行う。

$ rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ yum -y install nginx

次に、/etc/nginx/nginx.confの編集と/etc/nginx/conf.d/server.confというファイルを作成する。
/etc/nginx/nginx.conf

user  nginx nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

   # gzip  on;

    include /etc/nginx/conf.d/*.conf;
    server_tokens	off;  #レスポンスヘッダにバージョンを含めない
}

/etc/nginx/conf.d/server.conf

server {
    listen       80;
    server_name  takahoyo.net;

    location / {
	root	/var/www/html;
        index  index.html index.htm;
    }
}

設定ファイルを編集したら、Nginxを起動する。

systemctl enable nginx.service
systemctl start nginx.service

参考 : CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編) | レンタルサーバー・自宅サーバー設定・構築のヒント

firewalldの設定

CentOS 7を使ってるので、iptablesではなくfirewalldの設定をfirewall-cmdを使って変更。
サーバをリモートから操作するためにsshで利用するポート、Webサーバとして使うためにhttpのサービスを開ける。
デフォルトでは、ゾーンがpublicになっていてsshサービスが使えるが、今回は不正なアクセスを遮断するために、自分が利用しているIPアドレス以外からSSHへの接続は遮断する。
※自分が利用しているIPアドレスは、sshでアクセス後に/var/log/secureファイルを見ると記録されている。
※w.x.y.zは自分のIPアドレス

# firewall-cmd --permanent --add-service=http --zone=public
# firewall-cmd --permanent --remove-service=ssh --zone=public
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="w.x.y.z" port port="22" protocol="tcp" accept' --zone=public

firewall-cmdで--permanentを指定した場合、firewalldのサービスをreloadもしくはrestartする必要があるので以下のコマンドのいずれかを実行する。

# systemctl reload firewalld.service

もしくは

# systemctl restart firewalld.service

参考

Linux女子部 firewalld徹底入門!

Webページの作成

今回はWebページを作るために、Bootstrapというフレームワークを利用した。

Bootstrap · The world's most popular mobile-first and responsive front-end framework.

cssとかjsを弄らなくても、htmlファイルでclassに指定するだけで、いろいろな機能を使える。レスポンシブデザイン対応なので、画面サイズに応じてサイトを見やすくしてくれる。
Bootstrapの公式サイトから、コンパイル済みのファイルをダウンロード。

Getting started · Bootstrap
ダウンロードして展開するとcss, js, fontsのディレクトリが出来るので、これを/var/www/html/に置く。
そして、index.htmlを作成して、css, jsを読み込む。
takahoyo.netで使ってるコンポーネントは、navbar, jumbotron, collapseと呼ばれるものである。
navbarはページ上部にあるナビゲーションで、collapseは俗に言うアコーディオン
navbarもしくはcollapseの見たい項目を押すと、アコーディオンが開く仕組みとなっている。
特にカスタマイズはしていないから、まあ既視感がw

bootstrap関連は以下のサイトを参考に進めたので、この辺の話はリンク先を参照すると良いかも(汗)

感想

Webサーバの基盤的な部分(サーバの調達 ~ nginxのインストール、設定くらい)までは比較的すぐ出来たけど、WebページでHTMLを書くとなると少し時間がかかってしまった。Webの話をもっと勉強したいなと思った今回の構築でした。