今回は、Linuxサーバにsshで接続したときに表示されるエラーメッセージの違いを検証したいと思います。
iptables、TCPwrapperで通信制御を行った場合、そもそも通信が届かない場合の3パターンで、どのようなメッセージの違いがあるか見てみましょう。
その前にsshについて説明します。
Contents
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だと、また表示が違うのかもしれません。次回はその辺りを検証できればと思います。