ConoHa VPS (ubuntu 18.04) 初期設定メモ

ConoHaが新プランになったし、再度別のサーバをUbuntu18.04から立ち上げる。[この記事](https://qiita.com/jqtype/items/e394fb9e027892e9a2a4)の更新の位置づけ。本当は20.04を待ちたかったけどまあいいや。

# ConoHa VPSの契約
RAM1GB/SSD100GBプラン＠東京リージョンを契約。月880円。3,4年前より安いわSSDが倍だわ…
- ひとまずポート制限はなし。sshでログインしてから設定。
- イメージタイプはOS。ubuntu 18.04を選択。OSじゃなくてアプリ指定（例えばDocker指定）しても立ち上げられんのね。進化してる！
- SSH Pubkeyは登録しない。仮想マシン作成時はユーザが作られないため、ユーザを作ってから登録する。

# ドメインの設定
ドメイン管理はさくらインターネットのまま保持。
- さくらのドメイン管理画面から、当該ドメイン名のアドレスを変える。
- ConoHaのサーバ管理画面で、逆引きホスト名として当該ドメイン名を入れておく。念のため。

# セキュリティ周りの初期設定
## ユーザ作成 & ssh
SSHかコントロールパネルからrootでシェルログインをしてユーザ作成、sudoersに追加、ssh鍵の設定、viで適当に新しいユーザの公開鍵をコピペして登録、まで一気にやってしまう。

```
# adduser <new user>
# usermod -aG sudo <new user>
# su <new user>
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
$ vi ~/.ssh/authorized_keys
```
`sshd_config`をいじってPort変更、Root/Passwordログインを禁止、公開鍵ログインのみとする。

```diff
$ sudo vi /etc/ssh/sshd_config
- Port 22
+ Port xxx # ポート変更

- PermitRootLogin yes
+ PermitRootLogin no

- PubkeyAuthentication no
+ PubkeyAuthentication yes #公開鍵ログイン

- PasswordAuthentication yes
+ PasswordAuthentication no

- UsePAM yes
+ usePAM no

$ sudo /etc/init.d/ssh restart
```

## `iptables`の設定
`ufw`で楽をする。Port 80/443はdockerのnginx-proxyが勝手に空けてくれるのでわざわざ空けなくてよろしい。

```
$ sudo ufw allow <ssh port> # ssh
$ sudo ufw default deny # デフォルトでは全部拒否
$ sudo ufw enable
```
確認。

```
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip


To                         Action      From
--                         ------      ----
<ssh port>                 ALLOW IN    Anywhere                  
<ssh port> (v6)            ALLOW IN    Anywhere (v6)             
```

# IPv6の設定
ConoHa VPSには、サーバごとに17個のIPv6アドレスが振られている。
しかし、Ubuntu18.04イメージで作成したイメージにはIPv4アドレスのみが割り当てられている。
IPv6でアクセスしたいのでIPv6アドレスも割り当てる。

```diff:/etc/netplan/10-gmovps.yaml
network:
    ethernets:
        eth0:
-           addresses: [] 
+           addresses:
+             - <ipv6_address>/64
            dhcp4: true
            dhcp6: false
            accept-ra: false
            optional: true
+           gateway6: <gateway_address>
    version: 2
```

上記のように変更、あるいは11以上のプレフィックスのついたyamlを作って上記のように入れて設定を上書きする(e.g., `/etc/netplan/20-mynetwork.yaml`)。そして以下を実行して反映。

```
$ sudo netplan apply
```

# ホスト名変更
`/etc/hosts`と`/etc/hostname`が食い違ってるので、

```
/etc/hosts
127.0.0.1 conoha

/etc/hostname
conoha
```
みたいにしておく。

# NTPはもう入れない
もうNTPサーバを立てる必要もなさそう。Ubuntuでは`systemd-timesyncd`が動いているので勝手に時刻同期してくれるようだ。

こんな感じで同期している。

```
$ timedatectl status
                      Local time: Tue 2020-03-17 17:37:26 JST
                  Universal time: Tue 2020-03-17 08:37:26 UTC
                        RTC time: Tue 2020-03-17 08:37:27
                       Time zone: Japan (JST, +0900)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no
```

# Docker
サーバは全部Dockerで動かす所存。

### リポジトリの設定

```
$ sudo apt-get update;
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # DockerのGPG鍵を導入
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable" # リポジトリ追加
```

### Docker Community Editionの導入

```
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world # 動作確認
```

### 作った一般ユーザでDockerが利用できるようにしておく
```
sudo usermod -aG docker <new user>
```

### Docker Composeの導入

```
$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# これ書いてる時点では1.25.4が最新。状況はgithubをチェック。 https://github.com/docker/compose/releases

$ sudo chmod +x /usr/local/bin/docker-compose # 実行権限付与
$ docker-compose --version # チェック
docker-compose version 1.25.4, build 8d51620a
```

参考:
[Get Docker CE for Ubuntu](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/)
[Install Docker Compose](https://docs.docker.com/compose/install/)

# Logwatchでgmail宛にログを投げる。
念のため。

```
$ sudo apt-get install logwatch
$ sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
```

gmail宛に編集。

```diff:/etc/logwatch/conf/logwatch.conf
- MailTo = root
+ MailTo = xxx@gmail.com
```

以下の記事を使って、さくらのメールサーバをリレーサーバとし、postfixからgmailへ送るようにする。

https://qiita.com/jqtype/items/cfb03be0efb8eacd8978