【サーバー移行大作戦! Part-3】ターミナルソフトからリモートログインする

こんにちはー、ニアです!

今回はターミナルソフトを使って、前回起動したVPSにSSH接続し、SSH接続の設定やファイアウォールの設定をしていきます。

1. SSH接続するための秘密鍵をダウンロードする

まずは、ConoHaのコントロールパネルのVPSのコンソールページを開いて、コンソールの上にあるVPSの情報から、SSH Private Keyにあるダウンロードボタンをクリックし、SSH接続用の秘密鍵をダウンロードします。

sv17
Nia-TN-SDfs-normal2.png
秘密鍵を紛失したり、盗まれたりしないよう、気を付けてね

2. ターミナルソフトでVPSにリモートログインする

ここでは「Tera Term」を使用していきます。本記事ではインストール方法は割愛します。

Tera Termを起動します。

新しい接続のダイアログが現れたら、ホストにはVPSのIPアドレス(IPv4)を入力し、サービスは「SSH」を選択して、ポートは22(SSH接続のポート番号です)を入力し、OKボタンをクリックします。

sv13

Tera Termは今まで接続したことのないサーバー接続しようとした時に、このダイアログが現れます。

そのまま続行ボタンをクリックしてもよいですが、心配であればVPSのRSA公開鍵(ssh_host_rsa_key.pub)の鍵指数を確認してみましょう。

sv14

RSA公開鍵の鍵指数を確認する時は、「ssh-keygen」コマンドを使用します。

表示された文字列の中の「6e:22:83:db:4a:b1:1b:2e:12:c7:d4:7b:9b:ad:70:53」が鍵指数です。その指数とセキュリティ警告のダイアログにある鍵指数と同じであるか確認します。

# ssh-keygen -lf [RSA公開鍵のファイル]
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 6e:22:83:db:4a:b1:1b:2e:12:c7:d4:7b:9b:ad:70:53 /etc/ssh/ssh_host_rsa_key.pub (RSA)

SSH認証のダイアログでは、ユーザ名に「root」と入力します。

今回はパスワードの代わりにRSA鍵を使用しますので、ラジオボタンから「RSA/DSA/ECDSA鍵を使う」を選択し、先ほどダウンロードしたSSH接続用の秘密鍵のファイルパスを入力します。

sv16

正しくログインすると、以下のような画面になります。タイトルバーには「ホスト名:ポート番号 – root@ホスト名」と表示されます。

sv18

3. 一般ユーザー用のRSA鍵を作成する

次に、前回作成したユーザーでログインするためのRSA鍵を作成していきます。

ConoHaのコントロールパネルのコンソール側で、前回作成したユーザーでログインし、「ssh-keygen」コマンドを入力します。

ssh-keygen -t rsa

すると、RSA鍵の保存場所を聞かれますので、ファイルパスを入力します。何も入力しない場合、ファイルパスは「/[ユーザー名]/.ssh/id_rsa」となります。

ここでは「nia_rsa」とします。

Generating public/private rsa key pair.
Enter file in which to save the key (/xiia/.ssh/id_rsa): nia_rsa

次に、RSA鍵のパスフレーズを2回入力します。パスフレーズは省略できます。

Enter passphrase (empty for no passphrase):[RSA鍵のパスフレーズ]
Enter same passphrase again:[RSA鍵のパスフレーズ(上と同じ)]

これで、RSA鍵を作成することができました

Your identification has been saved in nia_rsa
Your public key has been saved in nia_rsa.pub.
The key fingerprint is:
[RSA鍵の鍵指数] xiia@[ホスト名].z1d20.static.cnode.jp
The key's randomart image is:
[RSA鍵のランダムイメージ]

あとはRSA公開鍵を、mvコマンドでautherized_keysにリネームし、chmodコマンドでパーミッションを600に設定します。

# mv [リネームするファイル名] [新しいファイル名]
mv nia_rsa.pub authorized_keys

# chmod [パーミッション] [ファイル or ディレクトリ名]
chmod 600 authorized_keys

3.1. 作成した鍵をローカルPCにダウンロードする

Tera Termに戻って、先ほど作成したSSH接続用の秘密鍵をSCP経由でローカルPCにダウンロードしていきます。

メニューバーから「ファイル」→「SSH SCP」を選択します。

sv20

Secure File Copyの画面が現れたら、下側のFromにRSA鍵のファイルパスを、ToにローカルPCでの保存先を入力し、Recieveボタンをクリックします。

sv21

これで、SSH接続用の秘密鍵をローカルPCにダウンロードできました。

4. 作成した秘密鍵でリモートログインする

4.1. その前に、RSA鍵でログインできるようにする

早速、ダウンロードした秘密鍵を使ってログイン・・・っと、その前に、VPSでSSH接続の設定ファイル「sshd_config」を編集する必要があります。

vi /etc/ssh/sshd_config

sshd_configの中にある「RSAAuthentication」、「PubkeyAuthentication」、「AuthorizedKeysFile」の3つのコメントアウトを解除します。
また、RSAAuthenticationとPubkeyAuthenticationの値は「yes」を、AuthorizedKeysFileの値は「.ssh/authorize_keys」を指定します。

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody

# ↓

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody

編集したら、sshd_configを保存してviを閉じます。

Nia-TN-SDfs-normal2.png
sshd_configの内容に問題がないかをチェックする時は「sshd -t」コマンドを実行します。何も表示されなければOKです
sshd -t

sshd_configの変更を反映させるには、sshdを再起動します。これで先ほどダウンロードした秘密鍵でログインできます。

service sshd restart

4.2. VPSにリモートログインする

sshdを再起動したら、今回作成した秘密鍵でリモートログインしてみます。

メニューバーから「ファイル」→「新しい接続」を選択します。

sv22

新しい接続のダイアログが現れたら、2.と同じ内容を入力してOKボタンをクリックします。

SSH認証では、ユーザ名に前回作成したユーザー名を入力します。ラジオボタンから「RSA/DSA/ECDSA鍵を使う」を選択し、3.1.でダウンロードしたSSH接続用の秘密鍵のファイルパスを入力し、OKボタンをクリックします。

sv23

sv24

5. SSHの設定ファイルを編集する

今度は、sshd_configをいくつか編集していきます。

5.1. SSH接続のポート番号を22番以外にする

まず、セキュリティ対策のために、SSH接続のポート番号を22番以外に変更します。「Port」のコメントアウトを解除して、値にSSH接続のポート番号を指定します。ここでは10022を指定しています。

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# ↓

Port 10022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

5.2. SSH接続でのrootログインを禁止する

次に、SSH接続でrootログインできないように設定します。「PermitRootLogin」のコメントアウトを解除して、値を「no」と指定します。

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

# ↓

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

5.3. パスワードでのログインを禁止する

RSA鍵でSSH接続ができるのであれば、パスワードでのログインを無効にしてしまいましょう。

「PasswordAuthentication」の値を「no」にすることで、パスワード認証でSSH接続できなくなります。

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

6. ファイアウォールの設定をして、SSH接続用のポートを開ける

変更後のSSHのポートにして、VPSに再接続しようとすると、ホストに接続できないエラーになりました。

sv25
sv26

これは、ファイアウォールの設定によって、先ほど設定したポート番号での通信が許可されていないのが原因です。
「iptables」を編集して、ファイアウォールの設定をしていきます。

vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

10行目にある、「-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT」で、SSH接続に使用していた22番ポートを開放しています。そのポート番号を5.1.で設定した番号に変更することで、そのポート番号でSSH接続することができます。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# ↓

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT

あとは、開放する分だけ「-A INPUT -m state –state NEW -m tcp -p tcp –dport [ポート番号] -j ACCEPT」を追加し、開放するポート番号を指定します。

ここでは、HTTP用の80番ポートとMySQL用の3306番ポートを開放します。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT   DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT  ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -i lo -j ACCEPT

# データなしのパケット接続及び、SYNフラッド攻撃、ステルススキャンと思われる攻撃を破棄します。
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# 指定したポートを開放します。
# SSH
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
# HTTP / HTTPS
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
# FTP / FTPS(ここでは使用しませんので、コメントアウトしています)
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
# MySQL(MariaDBでも同じです)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptablesを編集したら、iptablesを再起動します。

service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

再起動したら、「iptables -L」コマンドを実行し、設定内容を確認します。

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:10022
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:mysql
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

これで、10022番ポートでSSH接続ができます。

sv27

7. おわりに

今回は、Tera TermでVPSにSSH接続し、一般ユーザー用のRSA鍵の生成やSSH接続のポート番号の設定、ファイアウォールの設定によるポートの開放をしました。

次回はいよいよ、WordPressに必要なPHPとデータベースのインストールをしていこうと思います。

[END]

参考サイト

サーバー移行大作戦の記事一覧

コメント

タイトルとURLをコピーしました