情報セキュリティの豆知識~ssh接続のエラーメッセージ~

今回は、Linuxサーバにsshで接続したときに表示されるエラーメッセージの違いを検証したいと思います。

iptables、TCPwrapperで通信制御を行った場合、そもそも通信が届かない場合の3パターンで、どのようなメッセージの違いがあるか見てみましょう。

その前にsshについて説明します。

sshとは

ssh( Secure SHell )とは、パソコンなどから、遠隔にあるネットワーク機器と通信を行うプロトコルです。

例えば、東京にある本社から、沖縄や北海道にある支社のルータやスイッチなどを遠隔で操作することが出来ます。
私は始め、遠隔=無線だと思い込んでいて理解ができなかったのですが(笑)
有線、無線は関係なく、離れている機器と通信を行うためのプロトコルです。

名前にSecureと入っている通り、ssh通信は暗号化されるため、通信を覗かれて操作内容がばれる心配はありません。

今回はCentOSを使用しますが、Linuxではsshdというサービスでsshを使用します。

 

iptablesとは

iptablesとは、どの通信は通って良い、どの通信は通ってはいけない、を設定する機能です。ファイアウォールとも呼ばれますが、Linuxではiptables という名前で機能が搭載されています。例えるなら、受付係や警備員さんのような機能です。

プロトコルにはポート番号という番号がそれぞれ割り振られています。

sshでいえば22番というポート番号が割り振られているので、今回は22番という穴(ポート)を塞いだり開けたりして通信の許可、拒否を設定します。

TCPwrapperとは

TCPwrapperも、通信を制御するLinuxの機能です。 iptablesでは、ポート番号やプロトコル、送信元IPアドレス、宛先IPアドレスや通信の種類によって許可、拒否を設定することが出来ます。またNATという機能も使うことができます。

それに対してTCPwrapperは、プロトコル(サービス)と送信元IPアドレスを元に通信の許可、拒否の設定を行います。

正確には、iptablesとTCPwrapperでは、処理するプロトコルのレイヤがちがうのですが、ざっくりいうと、

iptablesの方が TCPwrapper より作られたのが新しくて、より細かく設定できる。

で、いいと思います。

/etc/hosts.allowが許可する通信を記述するファイル、/etc/hosts.denyが拒否する通信を 記述する ファイルです。 /etc/hosts.allowの方が優先してチェックされます。

エラーメッセージの検証

それではエラーメッセージの違いを見てみましょう。

iptables

まずはiptablesで拒否をした場合のエラーメッセージです。
送信元IPアドレス(WindowsPC)は192.168.100.103、 宛先IPアドレス(CentOSのSSHサーバ)は192.168.100.118です。

下の図のとおり、iptablesに22番ポートを拒否(REJECT)する設定を入れました。

では、Windowsのコマンドプロンプトでsshコマンドを実行します。

Connection timed outとエラーメッセージが表示されました。

 

TCPwrapper

次にTCPwrapperです。先ほどのiptablesの設定は元に戻したうえで、以下のように/etc/hosts.denyファイルを書き換えます。

ssh:192.168.100.103でもよいのですが、今回は全て(ALL)を拒否の設定にしています。

ではコマンドプロンプトからコマンドを実行します。

Connection reset とエラーメッセージが表示されました。

 

ルートがない場合(届かない場合)

最後に、そもそも経路がなくて通信が出来ない場合をやってみましょう。

TCPwrapperの設定を元に戻し、CentOSのIPアドレスを以下の様に変更しました。

ではコマンドプロンプトから実行します。

Connection timed outとエラーメッセージが表示されました。

まとめ

教材などを見ていると、エラーメッセージが異なるという説明もあったりしますが、今回の検証では、iptablesと経路がない場合は同じエラーメッセージでした。

Windowsのコマンドプロンプトだとこのような表示になったので、クライアント側もLinuxだと、また表示が違うのかもしれません。次回はその辺りを検証できればと思います。

この記事の著者