Ubuntuサーバの初期設定をした話

Ubuntuサーバの初期設定をした話

はじめに

とあるお仕事で、UbuntuなVPSの初期設定をしなくちゃいけなくなりました。
毎日やるような仕事でもないので、何やればいいんだっけ???ってなったので次の機会に思い出すのを楽にするためのメモ書きです。

筆者は本来、フロントエンドが専門な人間なので、不正確な情報を含む可能性があります。なにとぞ。
また、最低限の内容しか書かない予定です。なにとぞなにとぞ。


目標

今回の目標はこんな感じです。
意識埋没系なので、最低限のことしかしません。

  • 諸々の初期設定を終えること。
  • rootログインができないこと。
  • SSHで公開鍵方式なログインができること。
  • パスワードログインが禁止されてること。
  • 最低限の不正アクセス対策なんかを終えること。

UFWとかそのあたりは、過去にメモ書きしてるので、そちらも参照のこと。
nginxとかいれる記事も、メモ書きしてるのでそちらもどうぞ。

UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その1 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。
UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その2 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。
nginxのリバースプロキシの設定例
dockerなんかでいろいろ建てるのはいいけど、それらの振り分けってめんどいから、テンプレ的なのを書きつけて、あとからてきとうにコピペで時短できるようにしておくためだけの記事。

前提条件

手元のPCにSSHできるターミナルが入ってることを前提とします。
macならTerminal、windowsならWSLが入ってる前提です。
teratermでもいいと思いますが、使ったことがないのでよくわかりません。

筆者はwindows+WSLな構成が手元にあるので、それを前提に進めます。

また、Linuxのコマンドなどの基礎知識があるってなことを前提とします。
別に、そんな危ないことするつもりはないのでコピペで同じことを再現してもいいとは思うけど、何やってるのかわからない場合には、ちゃんとぐぐってからコマンド打とうね!!


準備

VPS

とにもかくにも、VPSの契約をします。
AWSのLightsailでもSAKURAのVPSでもGMOのConoHaでも、別になんでもいいと思います。

わたしにはこれといったこだわりないです。

ドメイン

これもRoute53で管理しようがsakuraで取得しようがなんでもいいと思います。
AWSで構成つくるならRoute53の方が小回り効くしいいとは思うけど、本題とは関係ないことなので、とりあえず懇意会は小難しいことは考えないことにします。


はじめてのつうしん

VPS契約したら、とりあえずつないでみます。
しかし、毎回毎回ユーザ名やらIPやらを打つのは面倒くさすぎるので、まずは手元の環境(WSL)の~/.ssh/configを編集していきます。

ssh configの編集

$ sudo vim ~/.ssh/config

とりあえず、以下のようにしてみました。
Hostの部分はなんでもいいです。コンソールでssh example.comと打ってつなげるようになるってだけです。別にドメイン名である必要性すらありません。
HostNameには、仕入れてきたVPSのIPアドレスを書いときましょう。
Userは、その名の通りユーザ名です。
portは、初期状態ならたぶん22なんじゃないかな?そうでない場合には指定されてる番号を書きましょう。

Host example.com
        HostName        123.45.67.89
        User            ubuntu
        port            22

接続

configを編集出来たら、とりあえずつないでみます。

$ ssh example.com

この際に、たぶん、パスワードを聞かれます。契約した時に発行されるパスワードを入力しましょう。


最初にやっとくべき細々したこと

ユーザの追加

初期ユーザで問題ない人には必要ないかもしれないけど、ubuntuとかって名前のユーザだったりするなら、自分の名前とかにするほうがいいかもしれない。

$ sudo adduser eight_pm

追加したら、sudoグループにいれときましょう。

$ sudo usermod -aG sudo eight_pm

新しいユーザでログインしなおしてみる。
新しいコンソールを開いて、手元のPC(WSL)の ~/.ssh/configをもう一度編集。
ユーザ名を差し替えます。

$ sudo vim ~/.ssh/config
Host example.com
        HostName        123.45.67.89
        User            eight_pm
        port            22
$ ssh example.com

ちゃんとつながったならokです。

もし、初期ユーザが必要ないなら、そのユーザを消して置いた方がセキュリティ的にもよいと思います。

$ sudo userdel -r ubuntu

user <username> is currently logged inみたいなエラーが出た場合には、ログアウトしてみたり、ps aux | grep <username>でプロセス探してkillするなり、めんどうならsudo -u <username> kill -9 -1でそのユーザの使ってるプロセスを全部落としてもいいと思います。

💡
ユーザを探してプロセス全停止させるコマンドについては、もし、そのユーザがDBやWebサーバなんかの重要サービスを扱ってると、サービスが混乱したりするかもしれないです。
つまり、運用中のサーバでは使わない方がいいです。

パッケージの更新

とりあえず、aptの更新をかけておきます。

$ sudo apt update

updateが完了したら、

$ sudo apt upgrade

も流しておきましょう。

ホスト名の変更

別になんの名前でもいいと思うのですが、とりあえずhost.example.comという名前にした想定

$ sudo hostnamectl set-hostname host.example.com

公開鍵認証にする

まずは手元のPCで鍵を作る。

$ ssh-keygen -t rsa -b 4096

たぶん、~/.sshディレクトリ内に秘密鍵と公開鍵の2つができてるはずなので、確認。

$ cat ~/.ssh/<鍵の名前>.pub

rsa AAAA............(中略).............==

もし、 -----BEGIN OPENSSH PRIVATE KEY-----ってのが先頭に出てきてたら、それは秘密鍵です。それではないです。
その文字列をコピーして、リモートサーバに入れます。
ssh-copy-idなんかで飛ばしてもいいと思いますが、なんかいろいろめんどいので直に書いちゃいます。

リモートサーバにログインして、

$ vim ~/.ssh/authorized_keys

でファイルを作り、先ほどの文字列をペーストし、保存。

rsa AAAA............(中略).............==

鍵の準備が出来たら、sshdの設定をいじります。
鍵認証のついでに、ポート番号も替えて、認証試行回数も有効にします。

$ sudo vim /etc/ssh/sshd_config

設定ファイルを開いたら、以下2行を追加します。既存の文字列を編集してもよいとおもいます。
また、ポート番号(Port)については、なんとなく2002と指定してみましたが、てきとうな数字に変えてもよいと思います。

Port 2002
PubkeyAuthentication yes
PasswordAuthentication no
MaxAuthTries 6

そしたら、sshdを再起動します。

$ sudo systemctl restart sshd

もし、Failed to restart sshd.service: Unit sshd.service not found.とか言われたら、

$ sudo systemctl enable ssh
$ sudo systemctl start ssh

で立ち上げるとよいと思います。

またまたログイン情報が変わったので、手元のPCの設定も併せて変更しましょう。

$ sudo vim ~/.ssh/config
Host example.com
        HostName        123.45.67.89
        User            eight_pm
        IdentityFile    ~/.ssh/<鍵の名前>
        port            2002
$ ssh example.com

無事、接続ができたら完了です。


ファイアウォールなどの設定

これは以前にUFWとfail2banを組み合わせる方法を記載したのでそちらで解決したことにします。

UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その1 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。
UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その2 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。