サーバーのセキュリティを強化する→その1:SSHの設定変更

この記事は1年以上前に投稿されたものです。
内容が古い可能性がありますのでご注意ください。

サーバーを正式に外部公開する前に、SSHの設定変更と各種パッケージをインストールします。

尚、これ以降のサーバー構築過程全般は以下のサイト様を参考にさせて頂きました。この場を借りて感謝申し上げます。

【2010.5.24修正】sshd_config内の記述の修正と、鍵認証についての説明を追加致しました。

OpenSSHの詳細設定

まず始めにOpenSSHの設定を変更しましょう。初期設定ではrootパスワードを設定しているとログイン出来たりするので変更します。

尚、これ以降ファイルの検索等を頻繁に行いますので、高速検索用のデータベースを先に作成します。

sudo updatedb
locate 検索文字 | grep などなど

OpenSSHの設定ファイルは/etc/ssh/sshd_configです。

sudo nano /etc/ssh/sshd_config
Protocol 2 #←SSH2でのみ接続を許可
ServerKeyBits 1024 #←鍵方式時の暗号強度を1024ビットに変更
PermitRootLogin no #←rootでのログインを禁止
AllowUsers xxxxxxxxxx #←ログインを許可するユーザー名を指定

※記載されていない項目は追記して下さい。

(2010.5.24修正)ServerKeyBits 1024はSSHのProtocol 1用の設定です。なのでこの設定を行っても、すぐ上でProtocol 2と指定しているので意味はありませんorz RSA1形式の鍵のみ有効です。
(2010.5.24修正ここまで)

ここまで設定したらSSHサーバーを再起動します。

sudo /etc/init.d/ssh restart

外部にSSHを開放せず、自宅LAN内からのみ使う場合はこれでも良いかと思います。

鍵方式によるログインの導入

外部にもSSHを公開する場合は、さらに鍵方式によるログインのみ受け付けるように設定します。

まずTera Termで公開鍵および秘密鍵を生成します。
Tera Termの「設定」メニューより「SSH鍵生成」を選択します。

SSH2プロトコルの鍵を生成

「鍵の種類」で「RSA」か「DSA」を選択します。これら2つはSSH2です。RSA1はSSH1なので注意して下さい。
「ビット数」には先程のsshd_configで設定したビット数を入力します。選択した鍵の種類とセキュリティ強度を考慮して数値を入力します。ここでは「1024」を入力しました。

(2010.5.24追記)RSA鍵はビット数で最小768ビットから最大2048ビットまで指定出来ます。DSAは現行のOpenSSHでは最大1024ビットまでに制限されているようです。
セキュリティ強度を上げるため、RSAを選択した場合は2048、DSAを選択した場合は1024を入力した方が良いかと思われます。

(2010.5.24追記ここまで)

この状態で「生成」をクリックすると鍵を生成し、鍵のパスフレーズの入力欄が有効になります。ここで鍵専用にパスワードを設定して下さい。このパスワードはSSHで鍵方式にて接続するケース全てに使います。

「公開鍵の保存」「秘密鍵の保存」をそれぞれクリックして保存します。
公開鍵はUbuntuサーバーのログインユーザーの「.ssh」フォルダ内にアップします。
秘密鍵はログインユーザーの手元に保存しておきます。

ssh-keygenコマンドでの鍵作成について(2010.5.24追加)

サーバー上にて公開鍵および秘密鍵を生成することが出来ます。

pwd
/home/ユーザー名
※↑ログインユーザー(この場合管理者ユーザー)のホームディレクトリにいることを確認。いない場合は cd ~/または単なるcdで移動しておいて下さい。

ssh-keygen
※↑オプション無しで実行した場合、SSHプロトコル2の2048ビットのRSA公開鍵および秘密鍵が生成されます。

Generating public/private rsa key pair.
※↑公開鍵および秘密鍵の生成開始

Enter file in which to save the key (/home/ユーザー名/.ssh/id_rsa):
※↑初めて作成する場合は何も入力せずにEnterでOKです。各種鍵を別名で保存したい場合などは鍵を保存する場所をルートからの絶対パスで入力します。ファイル名のみを入力するとコマンドを実行したカレントディレクトリに生成するので注意。

Created directory '/home/ユーザー名/.ssh'.
※↑ホームディレクトリ直下に「.ssh」ディレクトリがない場合、作成したとのメッセージが表示されます。

Enter passphrase (empty for no passphrase):
※↑公開鍵および秘密鍵用のパスフレーズを入力

Enter same passphrase again:
※↑確認として上記パスフレーズを再度入力

Your identification has been saved in /home/ユーザー名/.ssh/id_rsa.
※↑.ssh/ディレクトリに秘密鍵をファイル名「id_rsa」で作成

Your public key has been saved in /home/ユーザー名/.ssh/id_rsa.pub.
※↑.ssh/ディレクトリに公開鍵をファイル名「id_rsa」で作成

The key fingerprint is:
※作成した鍵のフィンガープリントが表示されます(省略)

The key's randomart image is:
※作成した鍵のrandomart imageと呼ばれるものが表示されます(省略)

※この時点では「authorized_keys」はまだ作成していないと思いますので、公開鍵をそのまま名前変更します。
mv.ssh/id_rsa.pub .ssh/authorized_keys

※既に「authorized_keys」を作成していて、公開鍵を追加したい場合は下記コマンドにて追加してください。
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

※「authorized_keys」ファイルには各行にひとつの鍵が格納されている必要があります。

※秘密鍵は端末上でコピペしてクライアントPCにてファイル名を「id_rsa」として保存するか、後述するSFTP対応クライアントにてダウンロードして下さい。
最後に秘密鍵を削除し、各種パーミッションを変更します。

less ~/.ssh/id_rsa
~表示された内容を最初から最後まで選択してコピーします~
※後述するテキストエディタにて「id_rsa」というファイル名でクライアントPCに保存して下さい。

rm -f ~/.ssh/id_rsa #秘密鍵を削除
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

公開鍵のアップ

次に公開鍵をアップします。
公開鍵のアップには、端末上でやり取りする方法とSFTPでアップする方法があります。
SFTPはSSHの機能の一つで、通常のFTPはユーザー名などが平文のまま送られるのに対し、SFTPはすべてのデータが暗号化されて送られますのでより安全になります。

1.端末上でアップする場合(楽ですのでオススメです)

公開鍵の中身は文字列なので、テキストエディタでそのまま開けます。WinならTeraPadやサクラエディタ、Macならmi等で開き、中の文字列をすべて選択してコピーします。

次にSSHでログインする管理者のホームフォルダに「.ssh」フォルダを作り、その中に「authorized_keys」というファイル名で先程コピーした文字列をペーストして保存します。

その後パーミッションを変更して、公開鍵には当人しかアクセス出来ないようにします。

cd #ユーザーのホームディレクトリに移動
mkdir .ssh
chmod 700 .ssh
nano ~/.ssh/authorized_keys
~ここで公開鍵の中身をペーストして保存~
chmod 600 ~/.ssh/authorized_keys

2.SFTPでアップする場合

SFTPを使えるソフトに「FileZilla Client」がありますのでダウンロードしてインストールします。→ダウンロードサイトはこちら(FileZilla Clientをクリックし、その中でご自身の環境にあったものをダウンロードして下さい)

FileZillaを起動します。起動後、「ファイル」メニューの「サイト マネージャー」を選択し、現在のUbuntu server用の設定を行います。

FileZilla一般設定

左下にある「新しいサイト」をクリックして、設定を行います。
「一般」タブでは、以下の5箇所を設定します。

  • ホスト:サーバーのIPアドレスを入力します。
  • Server Type:SFTPを選択します。
  • Login Type:通常を選択します。
  • ユーザー:SSHでログインするユーザー名を入力します。
  • パスワード:SSHでログインする際のパスワードを入力します。

FileZilla詳細設定

「詳細」タブでは、「標準のリモートディレクトリー」のみ設定します。Ubuntu serverの場合、個人ユーザーのホームディレクトリは「/home/ユーザー名」です。

接続したらリモートサーバー側の画面にて右クリックし、コンテキストメニューより「ディレクトリーを作る」を選択し、「.ssh」ディレクトリを作成します。
※ここでもしドット「.」付のファイル・フォルダが表示されない場合は、FileZillaの「サーバー」→「強制的に隠しファイルを表示」にチェックを入れて下さい。

次に作成した「.ssh」ディレクトリを選択し、右クリックより「ファイル パーミッション」を選択し、「700」に変更します。
作成した「.ssh」ディレクトリに移動し、ローカルにある秘密鍵をアップし、秘密鍵の名前を「authorized_keys」に変更し、最後に秘密鍵のパーミッションを「600」に変更します。

OpenSSHサーバーの再設定

最後にsshの設定を変更して、鍵方式でしかログイン出来ないようにします。

sudo nano /etc/ssh/sshd_config
RSAAuthentication yes #←yesで純粋なRSA認証を許可(※)
PubkeyAuthentication yes #←yesで公開鍵認証を許可
ChallengeResponseAuthentication no #←noにしておく
PasswordAuthentication no #←noで鍵認証のみログイン可
sudo /etc/init.d/ssh restart

(※2010.5.24追記)「RSAAuthentication yes」はSSHのProtocol 1の場合のみ有効です。

ここまで設定したら、一旦TeraTermでの接続を解除し、鍵認証の設定 を行って再ログインします。

鍵認証設定

「設定」メニューより「SSH認証」を選択肢、 SSHでログインするユーザー名を入力し、「RSA/DSA鍵」を選択してローカルに保存している秘密鍵を選択します。
設定したら「設定」→「設 定の保存」で上書き保存します。
これ以降、Ubuntu serverには常に鍵方式にてログインすることになります。

※注意点
・ 「新しい接続」にてSSH認証画面が出てきた時、デフォルトで鍵認証が選択されていない場合は、一旦認証画面を閉じて「設定」→「設定の読み込み」より、 設定したファイルを読み込んで下さい。
・鍵認証の際に入力するパスワードは、「鍵を生成したときに設定したパスワード」です。

FileZillaに鍵認証を導入する(制限あり)

SFTPに鍵認証を導入します。但し、FileZillaはパスワード保護付の鍵認証には対応していません。パスワード保護付きでやり取りする場合はWindowsなら「WinSCP」、Linuxなら「gFTP」等を使いましょう。

FileZillaにおけるSFTPの設定(その1)

「編集」→「設定」より、「SFTP」を選択し、右側よりローカルの秘密鍵を選択します。

FileZillaにおけるSFTPの設定(その2)

「鍵ファイルの変換」ダイアログが表示されますので、「はい」を選択します。その後パスフレーズを入力する画面が表示されるので秘密鍵生成時に入力したパスワードを入力します。これで鍵認証による接続が行えるようになります。

WinSCPの設定

FileZillaだとパスワード保護が無いため、急遽WinSCPを導入することにしました(汗
WinSCPではPuTTY形式の鍵で認証するため、Tera Termにて作成した秘密鍵を「PuTTYgen」にて変換します。PuTTYgenはWinSCPをインストールすると一緒に入ってきます。

PuTTYgen

「Conversions」→「Import Keys」より秘密鍵を選択し、その後「Save private key」をクリックして秘密鍵を保存しなおします。PuTTY形式になるので別名で保存しておいたほうが良いかもしれません。

その後WinSCPを起動し、サーバー接続情報を設定します。

WinSCPの設定(その1)

セッションの項目にて、

  • ホスト名:Ubuntu serverに割り当てているプライベートIPアドレス
  • ユーザー名:SSHにてログインする管理者名
  • パスワード:空欄のままでOK
  • 秘密鍵:先ほどPuTTY形式に変換したものを選択

上記の情報を入力します。
次にSSHの項目にて、プロトコルの優先順位を「2のみ」にし、保存します。

WinSCPの設定(その2)

これでUbuntu serverでSFTPが使えるようになります。
ログイン後のダイアログにて秘密鍵のパスフレーズを求めてきますので、パスワードを入力するとSFTPにて接続できます。

TCP Wrappersの設定

最後にTCP Wrappersを使ってアクセス元を制限します。
私はSSHは自宅LAN内からのみアクセス可にしました。TCP Wrappersは他にvsftpdも使用しますので、自宅LAN内からのみ全てのサービスを許可するようにしました。

sudo nano /etc/hosts.deny
ALL:ALL
sudo nano /etc/hosts.allow
ALL: 127.0.0.1
ALL: 192.168.xxx.
ALL: 192.168.xxx.

ピリオド「.」以降を空白にすると、そのネットワーク全体を選択したことになります。
192.168.xxx.は192.168.xxx.0/24と等価になります。
これでまず「hosts.allow」が許可され、それ以外は「hosts.deny」で拒否されます。

参考サイト様

(2010.5.24追加)

「サーバーのセキュリティを強化する→その1:SSHの設定変更」への4件のフィードバック

  1. ピンバック: このブログについて « SkyGarden出張所

  2. ピンバック: FTPサーバーの構築 « SkyGarden出張所

  3. 通りすがり

    WindowsだったらFileZillaでもPuttyでセッション張ってあげれば使えるみたいですよー。
    FileZilla いいですよねー。

    http://goo.gl/Oisd

  4. SkyGarden管理人

    SkyGarden管理人です。
    半年以上コメントをお返し出来ておりませんでした。
    大変申し訳ございませんm(_ _)m

    FileZillaに関する情報をお教え頂きありがとうございます。
    参考サイト、大変助かります。
    ありがとうございますー。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA