セキュリティの設定を少しずつしていきましょう。なぜセキュリティが大事かと言うと、世の中には冗談抜きで匠みたいなことをしてくるやつがいるからです。もし何もしない状態のサーバーに潜り込まれて、バルス級のコマンドを叩かれたらあの娘のログイン履歴も、思い出の建築も全て逝ってしまいます。
SSH接続をより強固にしとこう
作業用PCからラズパイを弄ってサーバーの調整を行うので、SSH接続が一番頻度が高いです。何かの拍子にクラッキングされないように、SSHの設定を変更してより安全に通信できるようにしていきましょう。以下のことを行います。
- 鍵のペア生成と配置
- パスワード認証を無効化
- SSHのポート変更(要ufwの設定変更)
- rootログインの禁止
公開鍵認証をざっくりと
SSHの公開鍵認証とは、秘密鍵と公開鍵をそれぞれ、作業用のPCとサーバー側で保持しておき、SSH接続の際に確認する方法です。
パスワードによる認証だと、バレると他のPCから侵入し放題ですが、鍵認証では秘密鍵を持ったPCからしか接続できません。秘密鍵をなくすと詰みますので取り扱い注意です。缶切りのない缶詰状態になります。
秘密鍵と公開鍵の組み合わせが一致した時だけ接続できます。公開鍵は他人に渡しても問題ありませんが、秘密鍵が漏れると侵入し放題になります。缶切りを持った飢えた暴徒が缶詰倉庫を襲ってきます。
鍵のペア生成と配置
実際に鍵のペアを生成して、サーバーとPCに配置していきましょう。色々な方法がありますが、ラズパイの扱いに慣れるためにラズパイで生成することにします。
では例のごとくRLoginでラズパイに接続しておきます。
ssh-keygen -t ed25519 -P "" -f ~/.ssh/serverkey -C server
と入力すると鍵のペアが作られます。
ssh-keygenはキーペア生成のコマンドです
-t :鍵のタイプを指定するオプションです。ed25519は10年は戦えるアルゴリズムっぽいです。
-P:パスワードを指定するオプション。””でなしになります。
-f :鍵の出力ファイル名です。serverkeyの部分は鍵の名前になりますのでお好きに。
-C:鍵の末尾につくコメント。識別用にお好きなのをどうぞ。
ゴニョゴニョ出てきて終わったら、
ls .ssh
と入力してみましょう。今回の場合、serverkey serverkey.pubが表示されれば生成できてます。serverkeyは秘密鍵、serverkey.pubが公開鍵です。ただこのままではまだ使えないので、色々と手を加えて使えるようにしていきます。以下を順に入力していきます。
cd ~/.ssh/
cat serverkey.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 ~/.ssh
rm serverkey.pub
何をしているか軽く解説すると、
1行目で .ssh ディレクトリに移動。
2行目で serverkey.pub の内容を認証に使うファイル authorized_keys に出力。
3行目で authorized_keys の権限を600(所有者のみ読み書き可能)に
4行目で .ssh ディレクトリの権限を700(所有者のみ読み書き実行可能)に
5行目で serverkey.pub を削除
と言った流れです。これで公開鍵が使えるようになりました。続いて秘密鍵を作業用PCにダウンロードします。RLoginのメニュ―の中にあるファイル転送を使いましょう。
ファイル転送を使うとわざわざ他のツールとかを使う必要がないので便利です。
.ssh 内の serverkey をどこでもいいのでわかりやすいところにD&Dでダウンロードできます。この機能、実はここまで使い易いのはなかなかないです。作者様に感謝です。ダウンロードしたら一旦SSH接続を閉じ、編集画面に移動しましょう。
編集画面左のプロトコルを選択し、SSH内にある認証キーを選択します。
インポートを選択
後は全部OKで完了です。実際に接続できるか確認をしてから残りの設定に進みましょう。接続の編集画面で Password/phrase を空にしても繋がるなら鍵認証できています。
パスワード認証を無効化
これで公開鍵認証で接続できるようになりましたが、今のままだとパスワードでも接続できるので意味がないです。パスワードで接続できないようにしてまいましょう。
SSHの設定は /etc/ssh/sshd_config に書かれています。以下のように入力して、設定ファイルを開きましょう。
sudo nano /etc/ssh/sshd_config
ズラーっと出てきた中から、
#PasswordAuthentication yes
と書かれた行を探し # を消して yes を no に変更して保存します。これでパスワードでの接続が拒否されるようになります。簡単ダネ!!
※注 変更後は当たり前ですが、パスワードで接続できません。鍵認証が上手くできてないと一切接続できなくなって詰むので注意してネ☆(何度も経験済み)
SSHのポート変更(要ufwの設定変更)
次はSSHのポートを変更しておきましょう。SSHはデフォルトで22番ポートを使うので、真っ先に狙われます。簡単に変更できますし、変更しとくにこしたことはないでしょう。
ポートの番号も /etc/ssh/sshd_config に書かれています。
#Port 22
と書かれた行があるので # を消して 22 を 49152~65535 の間で他と被らない数字にしましょう。なんでそんな中途半端な数字やねん?と思ったらポート一覧などで調べたって下さい。
前の解説でファイアウォールの設定をufwで行ったので、SSHのポート変更に合わせて変えておきましょう。まず変更後のポートを開放しておきます。
sudo ufw allow from 192.168.X.0/24 to any port XXXXX proto tcp
そしたら今度は22番ポートを使用不可にします。
sudo ufw status #22が上から何番目か確認
sudo ufw delete X #Xに確認した数字を入れる
※注 先に22番ポートを閉じた時に接続が切れる時があります。何となく鍵認証接続の時は起こりやすい気がします。これまた万が一の時に詰む恐れがあるので、順番は注意してネ(何回も経験済み)
rootログインの禁止
基本的にラズパイはデフォルトでrootログインができないようになってますが、より安全な接続を確保するためにrootでの直接ログインを禁止します。root(ルート)は簡単に言うと、そのPC(サーバー)の神みたいなもんです。神は全ての権限を持ち誰の許しもなく何でもできちゃうので、冒頭のバルスも簡単に発動できます。ヤバいっすね。禁止しましょう。
#PermitRootLogin prohibit-password
の部分を探し出し # を消して prohibit-password を forced-commands-only に変えます。
PermitRootLogin forced-commands-only
forced-commands-onlyはパスワード認証不可、rootで直接ログイン不可、ただしroot権限を利用したコマンドは受け付けるといった痒いところに手が届くパラメータです。
どうでしたか?以上でSSHの細かい設定は終わりでいいと思います。もちろん100%の安全はないです。毎日のように色んなところで脆弱性は見つかってますし、今後神がかったクラッキング技術が見つかるかも知れません。できるだけセキュリティの勉強は続けましょう。
ユーザーとパスワード変更に続きます。