VPSでCentOS7の初期設定と、Docker&Docker Composeのインストールまで


VPSにインストールされたCentOS7の初期設定と、DockerとDocker Composeが動くところまでを自分用メモとして残しておきます。
ConoHa VPSを契約して操作していますが、さくらなど他のVPSでもだいたい一緒だと思います。

VPS契約してCentOS7をインストールする

ConoHaコントロールパネルを操作。CentOSの最新版をインストールしました。
2017年3月時点で、バージョンは7.3.1611

SSHでログインする

サーバーの設定をやっていきます。最初に設定したrootパスワードを入力してログイン。

$ ssh root@[VPSのIPアドレス]

作業用のユーザーを追加

rootで何でもかんでもやるのはまずいので、作業用のユーザーを作成します。
僕の名前にちなんでryoというユーザーを作成することにしよう。

// ユーザー作成
$ adduser ryo
// パスワードの設定
$ passwd ryo

rootになれるユーザーを限定する

suでrootになって作業することができますが、どのユーザーもrootになれたら困るので、wheelというグループに入っているユーザーしかrootになれないように設定します。

// ryoをwheelに追加
$ usermod -G wheel ryo
// 設定ファイルを開く
$ vim /etc/pam.d/su

// 下記のコメントアウトを解除する
#auth       required     pam_wheel.so use_uid
↓
auth       required     pam_wheel.so use_uid

ところで、いきなりvimがインストールされてたんですけど、CentOS7だから?ConoHaだから?分かりません。

一旦ログアウト

$ exit

ここからはローカルで作業します。

公開鍵と秘密鍵の作成と、VPSへ公開鍵の転送

サーバーをいじるたびにssh ryo@[VPSのIPアドレス]と打って、パスワードを入力するのは面倒だし、セキュリティ的にもよくありませんので、公開鍵と秘密鍵を作り、公開鍵認証でログインできるようにします。ついでにパスワードの入力ではログインできないようにしたりします。

// 公開鍵と秘密鍵の作成
$ ssh-keygen -t rsa

僕はconohavps_rsaという名前にしました。.sshconohavps_rsaconohavps_rsa.pubというファイルが生成されればオッケー。

// VPSに公開鍵を転送する
$ scp ~/.ssh/conohavps_rsa.pub ryo@[VPSのIPアドレス]:~

VPSの/home/ryo(ryoのホームディレクトリのトップ)にconohavps_rsa.pubが転送されました。

VPSに再度ログインする

またVPSにSSHログインして、VPS上で作業します。

$ ssh ryo@[VPSのIPアドレス]

公開鍵の設置

現在自分がいる場所は~/、つまり/home/ryoです。
ここに.sshディレクトリを作り、公開鍵を設置します。ついでにパーミッションも変更します。

// .sshディレクトリの作成
$ mkdir .ssh
// .sshディレクトリのパーミッションを変更
$ chmod 700 .ssh
// conohavps_rsa.pubを.sshに移動
$ mv conohavps_rsa.pub .ssh
// conohavps_rsa.pubのパーミッションも変更
$ chmod 600 .ssh/conohavps_rsa.pub

ちなみにパーミッションの700と600は、

  • 700: 自分だけが読み書きと実行ができる
  • 600: 自分だけが読み書きできる

です。

SSHの設定を変更

sshd_configという設定ファイルを変更します。

設定ファイルをいじる時はroot権限じゃないと基本的にダメなんですが、rootで作業すると、ryoに戻ることを忘れて危険なので、sudoを先頭につけてコマンドを実行していきます。

// SSHの設定ファイルを開く
$ sudo vim /etc/ssh/sshd_config
// 以下を探して変更して、保存

// rootでSSHログインできないようにする
PermitRootLogin no

// 鍵認証を有効化
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/conohavps_rsa.pub

// パスワード認証を無効化する
PasswordAuthentication no
// sshdを再起動
$ sudo systemctl restart sshd

CentOS6の時はservice sshd restartでいけたんですが、CentOS7になったら書き方が変わってました。

またログアウト

$ exit

ローカルのSSHの設定を変更する

またローカルで作業です。ssh conohavpsと打つだけで、パスワード不要でVPSにログインできるようにします。

// 設定ファイルを開く
$ vim ~/.ssh/config
// 以下を入力して、保存

Host conohavps
  HostName [VPSのIPアドレス]
  User ryo
  Port 22
  IdentityFile ~/.ssh/conohavps_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

早速SSHでログインしてみる

$ ssh conohavps

これでログインできればオッケーです。

秘密鍵なくしたらアカンで!!!!

ローカルに保存してある秘密鍵をなくすとVPSにログインできなくなり、VPSの再構築(初期化)をするはめになり、上記の設定が完全におしゃかになってしまうので、頑張って管理しましょう!
セキュリティ的にどうかはわからないけど、僕はDropboxにコピーしておきました。

iptablesのインストールと、firewalldの無効化

ファイアウォールであるiptablesの設定をしていきます。
CentOS7からfirewalldというものに変わったらしいですが、よく分からないので、CentOS6に引き続きiptablesを使っていきます。

// firewalldを停止
$ sudo systemctl stop firewalld
// firewalldの自動起動をオフ
$ sudo systemctl disable firewalld
// iptablesのインストール
$ sudo yum -y install iptables-services
// iptablesの起動
$ sudo systemctl start iptables
// iptablesの自動起動をオン
$ sudo systemctl enable iptables

iptablesの設定

ConoHa VPSだけど、さくらVPSの設定を参考にしてやっていきます。
iptablesの設定方法 – さくらのサポート情報

// データを持たないパケットの接続を破棄
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

// SYNflood攻撃と思われる接続を破棄
$ sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

// ステルススキャンと思われる接続を破棄
$ iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

// ポートを開ける
// 今回は、ssh/http/httpsのポートを開けます
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT

// 確立済みの通信を許可
$ sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

// 許可した通信以外のサーバに受信するパケットを拒否し、サーバから送信するパケットを許可
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT ACCEPT

上記が完了したら、設定を保存します。

// iptablesの設定を保存する
$ sudo service iptables save
// iptablesを再起動
$ sudo systemctl restart iptables

CentOSのシステムを最新にアップデート

CentOSを最新の状態にしておきます。

// 最新にする
$ sudo yum -y update

Dockerのインストール

DockerとDocker Composeをインストールしていきます。Dockerは自動起動の設定もしておきます。
Dockerはdocker-enginedocker-ioなどがありますが、公式ドキュメントにある通りにdocker-ce(Docker Community Edition)をインストールしてみようと思います。

Get Docker for CentOS - Docker Documentation

// yum-utilsをインストール
$ sudo yum install -y yum-utils
// リポジトリの追加
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
// yumパッケージのアップデート
$ sudo yum makecache fast
// Docker CEのインストール
$ sudo yum install docker-ce
// Docker起動
$ sudo service docker start
// 自動起動の設定
$ sudo systemctl enable docker

Docker Composeのインストール

Docker Composeは、下記を参考にしながらインストールしていきます。
Get Docker for CentOS - Docker Documentation

// Docker Composeのインストール
$ curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// パーミッションの変更
$ chmod +x /usr/local/bin/docker-compose

その時のDockerのバージョンによってcurlのURLが変わってくるので、リンク先を参照するようにしましょう。

sudoなしでDockerを使う

Dockerをインストールしただけだと、sudoをつけないとコマンドが実行できません。
以下の公式ドキュメントを参考にしながらやっていきます。

Post-installation steps for Linux - Docker Documentation

// sudoつけないとこんな感じで実行できない
$ docker ps
↓
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

現在のグループ一覧からdockerという名前のものを抜き出してみます。

$ cat /etc/group | grep docker
↓
docker:x:991:

このdockerというグループにユーザーを追加すれば、sudoなしでDockerを使うことができるようになります。

// ryoというユーザーをdockerグループに追加
$ $ sudo usermod -aG docker ryo
// docker再起動
$ sudo systemctl restart docker

もう一回docker psを実行してみて、以下のように出力されればオッケーです。

// もう一回やってみる
$ docker ps
↓
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                      NAMES

以上

以上、CentOS7の初期設定と、DockerとDocker Composeのインストールでした。あとは別途ドメインの設定など。
CentOS6とCentOS7では、service/chkconfigsystemctlになっていたりと若干の違いがあるので、ググる時によく分からなくなったりして少し大変でした。

上記の作業は、こうしてまとめてしまうとそこまで大変でもないですが、できればここも自動化して設定をgit管理したいなぁと思うし、次はAnsible辺りを試してみたいと思います。

参考