WebARENA Indigo上にインストールしたUbuntu20.04のセキュリティほか初期設定について。
Cent OSほか他のOSの場合は他のサイトを見ていただきたい。
ファイアウォールの設定
ファイアウォールといっても様々なレベルで存在しているが、ここでは、
- WebARENA Indigoでのファイアウォールの設定
- Ubuntuでufwを用いたファイアウォールの設定
について記述する。また、ファイアウォールの設定とともにSSHの設定を変更する
手順としては、
- 一旦今SSHのポートとして使用している22番と、ポート変更後に使用する番号のポート(1234とする)を開ける
- SSHのポートを変更する。
- デフォルトの22番を閉じる。
といったことになる。
WebARENA Indigo でのファイアウォール設定
これはWebARENA、つまりVPSのプロバイダーが提供しているレベルのファイアウォールである。
管理画面でファイアウォールを作って、インスタンスに割り当てる。
管理ページを開き、ネットワーク管理→ファイアウォールへ。
右上「ファイアウォールの作成」ボタンを押す。作成画面に遷移。
任意の名前を入力する。
インバウンドルールを作成する。「新規ルール」ボタンを押下。「Custom」を選択。
デフォでSSHで使用しているポートである22(なおこれは後で閉じる)と、これからSSHのポートとして使用したい番号のものを入力する(ここでは例として1234とする)。
IPアドレスは「0.0.0.0」にしておくとどこからでもアクセス可能。
ファイアウォールをインスタンスに割り当てる。更新ボタンを押下すれば割り当て完了。
これで、22番と1234番のポート以外へのアクセスは遮断された。
SSHのポート変更
$ sudo vim /etc/ssh/sshd_config
Vimか何かでsshd_configのファイルを開いて
#Port 22
Port 1234
ポートの設定を1234とする。:wqで閉じて、
設定を反映させるため、sshdを再起動する。
$ sudo systemctl restart sshd
この状態でターミナルで別タブを開いて、クライアント側から
$ ssh -p 1234 ubuntu@{サーバーのIPアドレス} -i {秘密鍵のパス}
として、接続できていればOK。
最後に、ファイアウォールの設定で22を外せば、設定完了。
ufwによるファイアウォール設定
これはVPSのインスタンスにインストールされているOS上の、アプリケーションレベルのファイアウォールである。
スーパーユーザで作業する。まずはインストール。
apt install ufw
IPv6サポートを切る。
※2023年10月27日追記 この記事を書いた2021年9月17日当時、Webarena IndigoではIPv6対応インスタンスが作れなかったのだけど、今現在はIPv4/IPv6どっちも対応しているみたい。なのでIPv6に対応させるのであればサポート切っちゃダメだよ。
vim /etc/default/ufw
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
#IPV6=yes
IPV6=no
デフォルトでアクセスを拒否するようにする。
ufw default deny
必要なポートを開放する。
ufw allow1234 #SSHのポート番号
ファイアウォールの設定は以上。
作業ユーザの作成
デフォルトユーザはubuntuだが、これを別の任意の名前に変更する。サーバーにSSH接続のうえ、
$ sudo adduser USERNAME
とする。
パスワードを2回タイプしろと言われるので、タイプする。
フルネームとか部屋番号とかいろいろ入力しろと言われるが、これは空欄でも良い。
sudoグループにさっき作ったユーザを足すには、
$ sudo gpasswd -a USERNAME sudo
としてやれば、さっき作ったユーザがsudo権限を持つようになる。
作業ユーザでSSHログインできるようにする
このままだとさっき作ったユーザ(USERNAME)から公開鍵にアクセスできないので、SSHログインもできない。
公開鍵を新たに作って、USERNAMEのホームディレクトリに配置するのもいいけど、面倒なのでubuntuのホームディレクトリのやつをコピーする。ubuntuのホームディレクトリから、
$ sudo cp -r .ssh/ /home/USERNAME/
$ sudo chown -R USERNAME:USERNAME /home/USERNAME/.ssh/
これで、
$ ssh -p 1234 USERNAME@{サーバーのIPアドレス} -i {秘密鍵のパス}
とすることでログインできるようになった。
初期ユーザを削除する
初期ユーザ「ubuntu」を削除する。
$ sudo userdel -r ubuntu
すると、他のプロセスで使ってるからアカンとか言われる。
$ userdel: user ubuntu is currently used by process 137333
何のプロセスで使ってるのか一応みておく。
ps aux | grep ubuntu
root 138939 0.0 0.8 13796 8900 ? Ss 07:19 0:00 sshd: ubuntu [priv]
ubuntu 139020 0.0 0.5 13928 5540 ? S 07:19 0:00 sshd: ubuntu@pts/2
ubuntu 139021 0.0 0.5 10032 5064 pts/2 Ss+ 07:19 0:00 -bash
root 137322 0.0 0.8 13796 8872 ? Ss 06:38 0:00 sshd: ubuntu [priv]
ubuntu 137333 0.0 0.9 18588 9680 ? Ss 06:38 0:00 /lib/systemd/systemd --user
ubuntu 137336 0.0 0.4 170216 4872 ? S 06:38 0:00 (sd-pam)
ubuntu 137440 0.0 0.5 13928 5472 ? S 06:38 0:00 sshd: ubuntu@pts/0
ubuntu 137441 0.0 0.5 10032 5136 pts/0 Ss+ 06:38 0:00 -bash
...
問題なさそうなのでkillしちゃう。
sudo kill 137333
で、改めて、
$ sudo userdel -r ubuntu
これでOK。
userdel: ubuntu mail spool (/var/mail/ubuntu) not found
こんな反応が返ってくるが、これはディレクトリがありまへんでした、と言われてるだけなのでOK。
これでユーザubuntuが消え、ユーザUSERNAMEからのみログインできるようになった。
日本語環境のインストール
ロケールを確認。
$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
LANGUAGEが空欄なのでデフォルトの言語設定になっている。使用可能な言語を確認する。
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
日本語パッケージがないのでインストールする。呪文みたいにこれを入力。
$ sudo apt install language-pack-ja-base language-pack-ja ibus-mozc
で、インストールした言語を設定。
$ sudo localectl set-locale LANG=ja_JP.UTF-8
タイムゾーンをAsia/Tokyoに
デフォルトではタイムゾーンがUTCになっている。
$ date
2021年 9月 17日 金曜日 09:01:03 UTC
これを日本時間に変える。
sudo timedatectl set-timezone Asia/Tokyo
$ date
2021年 9月 17日 金曜日 18:04:17 JST
日本時間になった。
Moshの設定
不安定なネットワーク環境でもSSH接続っぽいことをしたい場合はMoshをインストールする。
$ sudo apt-get install mosh
サーバ側のポートを開く。デフォだと60000-61000のどれかを使う設定だが、たくさん開いておくと不用心な感じがするので60000-60010を開く設定にしてある。
注:プロトコルはUDP
クライアント側もよしなに設定。Macの場合はHomebrewでインストール。
$ brew install mobile-shell
なおかつ、.ssh/configに設定を書いておけば、sshコマンドを叩く代わりに
$ mosh {接続先}
みたいな感じでアクセスできるようになる。
続きはこれ: