不要になったPCで自宅サーバを構築してみた(設定編)

# サマリー
自宅で不要になったPCがあったので、お手軽に計算や情報収集用途に自宅サーバを構築してみました。
セキュリティの知識に不安があったので、グローバルには公開せず、ローカルサーバとして稼働させています。

今回実行したのは、以下のとおりです。
1. Laptop PCにUbuntuをインストール(本稿では割愛)
1. スリープにならないように設定
1. いつものPCからssh接続できるように設定
1. FireWallの設定

# 1. Ubuntuのインストール
Ubuntuのインストールは手順を残していないので本稿では割愛します。
サーバーを更新したら作成します!
参考にしたのは以下

>[ゼロから Mini-PC にUbuntu22.04.4 をインストールする方法](https://zenn.dev/himura/articles/ac77dc4853bbb7)

# 2.スリープにならないように設定
今回私はLaptopPCをサーバにするので、閉じた状態で運用したいと考えていました。

#### 2-1.閉じた状態でスリープにならないように設定
logind.confを開き`HandleLidSwitch`をignoreに設定
```
vi /etc/systemd/logind.conf
```
```text:logind.conf
HandleLidSwitch=ignore
```

#### 2-2.時間経過でスリープにならないように設定
99-local-settingsを開き、`sleep-inactive-ac-timeout`と`sleep-inactive-battery-timeout`の2つを0に設定
```bash
vi /usr/share/gdm/dconf/99-local-settings
```


```text:99-local-settings
[org / gnome / settings-daemon / plugins / power]
sleep-inactive-ac-timeout = 0
sleep-inactive-battery-timeout = 0
```

#### 2-3.systemd-logindサービスを再起動
```bash
systemctl restart systemd-logind.service
```

# 3.いつものPCからssh接続できるように設定(ssh接続の設定)
### ホストPCで実行する設定
いつも使用しているPC(以降、クライアントPC)からアクセスするためにsshの設定を行います。
#### 3-1.openssh-serverのインストール
```bash
sudo apt-get install openssh-server
```
#### 3-2.sshd_config.orgのバックアップを作成

```bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
```

#### 3-3.sshd_config.orgの編集(ssh-key作成までのログイン設定)
ssh-keyを作成してしようするまでにクライアントからログインできるように設定します。
```bash
sudo vi /etc/ssh/sshd_config
```

```text:sshd_config
Port 22
PasswordAuthentication yes
PermitRootLogin yes
```

### クライアントPCでの設定
#### 3-4.クライアントでssh-keyの作成とサーバへのコピー
ssh認証に使用するssh-keyを作成します。今回カギの名前は`ubuntu-local`としました。

以下のusernameはubuntuで設定したユーザ名です。
usernameはubuntu(ホストPC)で`whoami`と入力して出てきます。

サーバのローカルIPが不明な場合は、ホストPCで`ip addr show`を入力すると出力されます。
色々表示されますが、`inet 192.168.0.10`のように`192.168.x.x`となると思います。

```bash
cd ~/.ssh
ssh-keygen -t ed25519
scp ~/.ssh/ubuntu-local.pub username@server-ip:~/.ssh/ubuntu-local.pub
# username、server-ip、key名はご自身の環境に合わせて変更してください
# 私の環境の例は以下
# scp ~/.ssh/ubuntu-local.pub meer@192.168.0.10:~/.ssh/ubuntu-local.pub
```

#### 3-5.ssh-keyの公開鍵をauthorized_keysに追加
コピーが完了したらクライアントPCからホストPCへsshで接続します。
サーバのローカルIPが不明な場合は、ホストPCで`ip addr show`を入力すると出力されます。
色々表示されますが、`inet 192.168.0.10`のように`192.168.x.x`となると思います。

```bash
ssh username@192.168.0.10
```

クライアントPCから接続が成功したら、先ほどコピーした公開鍵を`authorized_key`にコピーし権限の変更を行います。
```bash
cat ~/.ssh/ubuntu-local.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```

#### 3-6.ssh-keyを使用したアクセスが可能かを検証
`Ctrl + D`でクラインアントPCに戻ります。
以下のコマンドを実行します。

```bash
ssh -i ~/.ssh/ubuntu-local username@server-ip
```

ホストPCに無事接続できれば`ssh-key`の設定は完了です。

#### 3-7.sshd_configの設定(ssh-keyを使用したログインのみにする)
6で設定した`sshd_config`の設定をssh-keyを使用したログインのみとするように変更します。
```bash
sudo vi /etc/ssh/sshd_config
```

```text:sshd_config
PasswordAuthentication no
PermitRootLogin no
```

設定が完了したらssh-serverを再起動してssh接続の設定は完了です。
```bash
sudo systemctl restart sshd
```

# 4.Firewallの設定
#### 4-1.ufwのダウンロードと有効化
Firewallを設定するため`ufw`をダウンロードします。
```bash
sudo apt-get install ufw
```

#### 4-2.ポート番号を指定してIP制限をかける
今回はクライアントPCのローカルIPを`192.168.0.2`に設定しました。
この設定はお使いのWiFiルータのコンソールなどから可能だと思います。
```bash
sudo ufw allow from 192.168.0.2 to any port 22
```

#### 4-3. ufwを有効化
```bash
sudo ufw enable
```

#### 4-4. ufwの設定を確認

ちゃんと設定されているかを確認します。
```bash
sudo ufw status verbose
```

私の環境では以下のように表示されました。
```text
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.2
```

以上で、ローカル環境のubuntuサーバーの構築が完了になります。
ローカルからssh接続できるのみの設定にしているので、バッチ処理などにお使いいただけるとおもいます！
私は毎日情報収集したい項目をこちらで構築したサーバーで取得しています。

バッチサーバーの構築編
webサーバの構築編

を今後作成しようと思いますので、ぜひよろしくお願いいたします！！