この記事について
本記事は自身の忘備録的な要素も強いですが、出来るだけ読み返し易いようにしたので、良ければ参考にしてください。
実例
以下からは、コマンドの実例を紹介していきます。基本的には順番通りに行うことができるように書きました。
大きくは以下の3つを行います。
・公開鍵認証のみをssh接続に利用するように変更
・sshのポート番号を変更
・ufw(ファイアウォール)の設定
sshログイン
ssh <ユーザー名>@<IPアドレス>
基本的なVPSに接続するためのコマンド
userを追加
目的
rootユーザーを使うのは全ての権限を持ってることもあって危険だから、操作を行うためのユーザーを作成する。
sudo adduser <ユーザー名>
userをsudoグループに追加
目的
sudoグループに追加することで、追加したユーザーにファイル変更などの権限を与えることができる。
sudo gpasswd -a <new_user> sudo
-aは追加を表すオプション
-dで削除などがある
ssh鍵作成
目的
公開鍵認証を行うために作成する。
ssh-keygen -t rsa -b 4096 -C メールアドレス
-tで鍵のタイプ指定、-bでビット数指定する。
秘密鍵と.pubとついた公開鍵が作成される。
鍵の作成先を選べるけど、デフォルトなら~/.ssh以下に作成される。
サーバーにssh鍵を登録
ssh-copy-id -i 公開鍵のパス <new_user>@<your_vps_ip>
デフォルトだと~/.ssh以下に作成された公開鍵のパスを指定
パスワード認証の無効化
目的
パスワード認証は総当たりなどに弱くて安全性が低いから、作成した公開鍵認証のみでVPSに接続したい。
sudo nano /etc/ssh/sshd_config
でテキストエディタ開いて、以下に変更する
PasswordAuthentication no
sshサービスの再起動
目的
sshサービスの変更を更新するために行う。
sudo systemctl restart ssh.service
sshポート番号を変更
目的
sshはデフォルトでPort番号22が設定されてるが、攻撃の対象になりやすいから変更しておく。
cat /etc/services
に書かれていない1024~32767に書かれていないポート番号を適当に選ぶのが良い。
変更には、以下でテキストエディタを開いて
sudo nano /etc/ssh/sshd_config
#コメントアウト
#Port 22
<例: 10022に設定する場合>
Port 10022
のようにする。こうするとssh接続の際は以下のようになることを注意する。
ssh -p 10022 ユーザ名@IPアドレス
さくらVPSなどパケットフィルタが最初から存在する場合は、ポート番号がブロックされるから、パケットフィルタを外す必要がある。
外したら、自前でUFWといったファイアウォールをしっかりと設定する。
ufw(ファイアウォール)のステータス確認
sudo ufw status
デフォルトではinactiveになっており、起動していない。
ufwで外部からの接続を許可する方法
目的
デフォルトでは外部からの接続は拒否されているはずなので、必要な通信プロトコルを許可する必要がある。
sudo ufw allow 通信プロトコル
<例: ssh>
sudo ufw allow ssh
ポート番号を変えているなら、以下のようにポート番号も指定する
sudo ufw allow 10022/ssh
回数制限付きで外部からの接続を許可
目的
総当たりでパスワードを入力することや、大量のアクセスを行う攻撃に対応できる。
sudo ufw limit 通信プロトコル
<例: ssh>
sudo ufw limit ssh
ポート番号を変えているなら、以下のようにポート番号を指定する
sudo ufw limit 10022
limitによる許可は、30秒に6回までの接続を許可する。
sshは多くの接続を普通は行わないので、limitによる許可が好ましい。
ufwの起動
上記のssh接続の許可をしていないと、ssh接続が出来なくなるから注意する。
もしものために、ネットワークを経由しない、仮想コンソールなどのアクセス手段を確保する。
sudo ufw enable
おわりに
他にもsshコマンドでのログイン時に2段階認証をつける方法なども存在します。
ここに追加するかもしれませんが、興味がある方は調べてみてください。
個人的なメモ
特定のサービスの稼働状況を確認
sudo systemctl status サービス名
起動している全てのサービスのリストを確認
sudo systemctl list-units --type=service --state=running