モチベーション
パソコンとサーバーの違いは主にスペックや使用用途で、境界は思ったより曖昧です。実際、手元にあるパソコンを、まるでネットワーク上にあるサーバーのように使うことが可能です。そこで、自宅にある2台のパソコンを使って、一方から他方へSSH接続し、リモートサーバー作業をシミュレートしてみます。
用意するもの・前提
- 接続元PC: SSHが使えるもの。OSは任意。
- 接続先PC: Ubuntu or MacBook. 他のLinux ディストリビューションではコマンドが異なる部分がある。Windowsの場合は設定が異なるようなので割愛。
- 両PCが同一のネットワークにつながっていること
接続先PCのIPを確認
Ubuntu の場合
# server ubuntu
$ ip a
...
inet 192.168.X.Y/24 ...
...
MacBook の場合
# server macbook
$ ifconfig
...
inet 192.168.X.Y netmask 0xffffff00 ...
...
上記コマンドで、接続しているネットワークのプライベートIPが表示される。通常は 192.168.X.Y
という形式で、X, Y は0~255の数字。
IP アドレスについて
IPアドレスは 32ビットの数字で、それを8ビットずつに区切り数字で表すとよく目にするIPアドレスになる。8ビットは0~255の数字を表すので、この範囲の数字4つでIPアドレスになる
/24
が付いている場合、それはIPアドレスの初めの24ビットがグループ内で固定されていることを意味する。つまり、最初の3つの数字は固定されていて、最後の数字が異なる。
netmask 0xffffff00
は同じことを表現している。つまり、固定されているビットを1、可変部分を0となるように16進数で書くとこうなる。
プライベートアドレスが通常 192.168
から始まる理由はよく分からなかった。
サーバー側でSSHサービスを開始
初期状態では、外部からSSH接続はできない設定になっています。それを ping
で確認してみます。
# 接続元
$ ping 192.168.X.Y
Request timeout for icmp_seq 0
...
X
, Y
には先ほど確認した値を入れます。この結果は、IPへアクセスできないことを意味しています。
そこで、接続先でSSHサービスを開始してみます。
Ubuntu の場合
# 接続先 Ubuntu
$ sudo apt-get install -y openssh-server
openssh-server
をインストールすると、SSHサービスが自動で起動します。下記のコマンドで確認できます。
# 接続先 Ubuntu
$ sudo systemctl status ssh
...
Active: active (running)
...
なお、次回以降PCを起動すると自動でSSHサービスが起動するようになります。
自動起動をやめたい場合は、次のような方法があるようです(参考)。
-
下記のコマンドで
ssh.conf
ファイルの名前を変える(自動起動させるには名前を元に戻す)$ sudo mv /etc/init/ssh.conf /etc/init/ssh.conf.disabled
-
/etc/init/ssh.conf
内の自動起動に関わる部分をコメントアウトする
...
# start on filesystem or runlevel [2345]
...
MacBook の場合
System Preferences > Sharing において、"Remote Login" を選択し、アクセス可能なユーザーを選択(参考)。
下図のような画面。丁寧に、SSHコマンドを教えてくれる。
ここで、もう一度 ping
をしてみます。
$ ping 192.168.X.Y
64 bytes from 192.168.10.224: icmp_seq=0 ttl=64 time=108.883 ms
...
うまくいっていれば、IPへのアクセスが確認できます。
SSHで接続する
接続方法は、通常のサーバーと同じです。
# 接続元
$ ssh <user>@192.168.X.Y
普通のPCはパスワードログインになっているので、この後パスワードを聞かれることが多いと思います。接続先で通常使っているログインパスワードを入力すると、接続できるはずです。
ファイアウォールを設定する
単にSSHサービスを始めた段階だと不正アクセスに対する防御はパスワードのみです。接続先にファイアウォールを設定することで、アクセス方法に制限をかけます。
Ubuntu の場合
ファイアウォールの現状確認を確認します。
$ sudo ufw status
Status: inactive
inactive
はファイアウォールが設定していないことを意味します。
まず、原則アクセス禁止し、SSHのみを許可することにします。
$ sudo ufw default deny
$ sudo ufw allow ssh
$ sudo ufw enable
これで、SSH(22番ポート)以外へのアクセスが禁止されます。次のコマンドで確認できます。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
もう少しセキュアにするには、接続元を同一ネットワークセグメントに限定することが可能です。
$ sudo ufw reset
$ sudo ufw default deny
$ sudo ufw allow from 192.168.X.0/24 to any port ssh
$ sudo ufw enable
X
は、確認したIPアドレスの数字で置き換えます。/24
により、このIPの最初の24ビット(3つの数字)がマッチしているネットワークからしかアクセスできなくなります。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW 192.168.10.0/24
MacBook の場合
System Preferences > Security & Privacy の "Firewall" タブから設定が可能です。SSHアクセスを許している場合、自動でSSHポートだけはアクセスできるように設定されるようです。