はじめてのUbuntuServer18.04でやったこと

###前書き
ゲーム用のボイスチャットソフト(Teamspeak3)のサーバーをWindowsで立ち上げたことをきっかけに"サーバー"持ってるってなんかかっこよくねって思い，Ubuntuでのサーバー運用に挑戦することにした．同じ問題などにつまずいた人や将来再インストールするときの自分のために残しておく．詳しいことは正直わかりません．
変なところが見つかればコメントください．よろしくおねがいします．

まずやったこと
1.ネットワーク設定 ~プライベートIPアドレス固定のため~
2.SSH有効化 ~公開鍵認証でのリモート通信のため~
3.ファイアウォール設定
4.DiCEインストール ~動的IPをDDNSサービスに自動登録するため~

#Ⅰネットワーク設定
Keywords：NIC，IPアドレス，network
IPアドレスの固定のため/etc/netplan/50-cloud-init.yamlを編集した．
(注意：Ubuntu 16.04 LTS Serverでは /etc/network/interface を編集するようです．)

```yaml:50-cloud-init.yaml
$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp3s0:
            addresses: [192.168.0.11/24]
            gateway4: 192.168.0.1
            dhcp4: no
            nameservers:
                addresses: [192.168.0.1,8.8.8.8,8.8.4.4]
            optional: true
    version: 2
```
編集後は反映のために以下のコマンドを打った．

```shell:
$ sudo netplan apply
```

# ⅡSSH有効化
Keywords：SSH,公開鍵認証，パスワード認証
サーバーにはディスプレイを接続する予定はないので外部からSSHで接続できるようにする．(ここまでの作業はディスプレイとキーボードを接続していた)

##インストール
以下のコマンドでopenSSHをインストール

```shell:
$ sudo apt install openssh-server
```
動いてることも確認できる

```shell:
$ sudo service ssh status
```

これでとりあえずこれでパスワード認証で同ネットワーク内から(自分の場合はWindowsDesktopPC)から接続できるようになった．
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/239365/b4d71369-c815-43b9-e5d2-b67254df375f.png)
(ポートのデフォルトは22)

# Ⅲ 公開鍵認証
どうやらパスワードでの認証はセキュアじゃないらしいので，よりセキュアな公開鍵認証ができるようにした．
####1．sshd_configの編集 

```shell:
$ cat /etc/ssh/sshd_config

(ずいぶん長いので特記箇所のみ表示)

#ポートの変更
Port 1234

#ルートでのログインを許可しない
PermitRootLogin no

#公開鍵認証を有効化
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2

#公開鍵認証ができるようになったら行頭のシャープを外せばPW認証ができなくなってセキュア
#PasswordAuthentication no

#更新
$ sudo /etc/init.d/ssh restart
```
####2．鍵の生成

```shell:
$ mkdir ~/.ssh
$ ssh-keygen -t rsa
```
このコマンド一発で~/.ssh/の中に秘密鍵id_rsaと公開鍵id_rsa.pubができる．
公開鍵の名前とパーミッションを変更しする．(パーミッションの変更をしていなくてハマった．)

```shell:
$　mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$　chmod 600 ~/.ssh/authorized_keys
```
####3．秘密鍵クライアント側に送る
TeraTerm側でサーバーから秘密鍵をDL
![スクリーンショット (1).png](https://qiita-image-store.s3.amazonaws.com/0/239365/69e279b8-fc4a-6726-e6f8-c2a9abd51cf9.png)

####4．接続
ユーザー名には，鍵を作ったサーバー側のユーザー名を入れる．パスフレーズは鍵を作るときに入力した場合は入れればいいかと．入れなかったら空白でOK．
![キャプチャ1.PNG](https://qiita-image-store.s3.amazonaws.com/0/239365/c3c8e516-fb88-7602-b66f-654facdf5279.png)

####5．ポートマッピング
出先からでも接続できるようにルーターのポートマッピング設定でサーバーにつながるようにした．
![4.PNG](https://qiita-image-store.s3.amazonaws.com/0/239365/6f082b7c-5556-0289-06b1-6592ee47ad22.png)


# Ⅳ ファイアウォール設定
####1．ufw のインストール

```shell:
$ sudo apt-get install ufw
```
####2．各種ポート開放(デフォルトはdeny)
SSHのデフォルトポート22の遮断
SSHの新設定ポート1234の開放
今後使うTeamSpeak3用のポートの開放

```shell:
$ sudo ufw deny 22
$ sudo ufw allow from 192.168.0.8/24 to any port 1234
$ sudo ufw allow 9987
$ sudo ufw allow 10011
$ sudo ufw allow 30033

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

To                         Action      From
--                         ------      ----
22                         DENY IN     Anywhere
1234                       ALLOW IN    192.168.0.8
1234                       LIMIT IN    Anywhere
9987                       ALLOW IN    Anywhere
10011                      ALLOW IN    Anywhere
30033                      ALLOW IN    Anywhere
22 (v6)                    DENY IN     Anywhere (v6)
1234 (v6)                  LIMIT IN    Anywhere (v6)
9987 (v6)                  ALLOW IN    Anywhere (v6)
10011 (v6)                 ALLOW IN    Anywhere (v6)
30033 (v6)                 ALLOW IN    Anywhere (v6)
```



#DiCE導入
我が家は動的IPアドレスなのでIPが変わったときにドメインとの紐付けが切れてしまう．
なのでDNSサービスに変更を自動で通知してくれるソフトDiCEを導入する．

```shell:
$ cd /usr/local/bin
$ sudo wget http://www.hi-ho.ne.jp/cgi-bin/user/yoshihiro_e/download.cgi?p=diced019
$ sudo mv download.cgi\?p\=diced019 diced01913.tar.gz
#解凍
$ sudo tar xzvf diced01913.tar.gz

$ sudo apt install lib32stdc++6
    #64bitOSで32bitソフトのDiceを動かすため
$ sudo apt install nkf
    #日本語文字化け解消のため


$ sudo /usr/local/bin/DiCE/diced | nkf -uw
    # u:改行コードをLFに w:漢字コードをUTF-8で出力
=-=-=- DiCE DynamicDNS Client -=-=-=
Version 0.19 for Japanese
Copyright(c) 2001 sarad

:
#ここで"?"を入力すると使い方が表示される
:?
#（起動オプションやコマンド一覧が表示される）

```



ここからはサーバー自体を再起動したときにDiCEも自動起動できるようにする．
まずはシェルスクリプトを書く．
/usr/local/bin/DiCE/diced -d -l
で起動するようにしていたがCPU使用量が異常に高かった(10％くらい)

```
$ sudo vi /etc/rc.local
    #!/bin/sh
    /usr/local/bin/DiCE/diced -s -l >> /usr/local/bin/DiCE/log/dice.log &
    # s:起動と同時に開始 d:起動と同時にバックグラウンドで開始 l:ログ作成
    # (旧 )

$ sudo chmod 755 /etc/rc.local
#crontabに再起動したときに作ったシェルスクリプトを読むように設定
$ echo '@reboot /etc/rc.local' | crontab
$ sudo cat /var/spool/cron/crontabs/hideko
    #行末に @reboot /etc/rc.local が追加される

$ sudo reboot
$ ps aux | grep dice
    #再起動でdiceが動いていることが確認できる


```