
Ubuntu日本語フォーラム

ログインしていません。
アップデートマネージャー、システムモニタとネットワークツール以外の物は何も起動していない状態で、ポートスキャンを行いました。
なぜアップデートマネージャーが起動しているかはこちらを御覧ください。
ちなみに常駐しているだけでDLもインストールもしていません。
http://forum.ubuntulinux.jp/viewtopic.php?pid=15821
の#8です。
それで上記のような状態で、ネットワークツールを用いてポートスキャンを自分のPCに対して行いました。
入れたIPアドレスはENVcheckerで表示されたREMOTE_ADDRを入れました。
結果、2秒に1回間隔で複数回実施したところ、3回に1回ぐらいの頻度でopenportが複数見つかりました。
見つかったポートは30000~60000台のポートで、見つかるときは2個から4個見つかりました.
ただし、同じポートが連続して表示されることはありませんでした。
そのとき、システムモニタを見ても、システムモニタ以外は実行されていませんでした。
iptableは知識がないので何もいじっていません。必要な時のためにiptableをGUIで操作できるKMyFirewallというソフトを入れています。
ですが、これも同じく何もいじっていません。
どなたか解答よろしくお願いします.
最後の編集者: syosinnsya (2008-09-04 00:43:54)
オフライン
誰も返事を書かれていないようなので、ちょっとだけ。
ポートスキャンを行ったと書かれています。たぶん、どこかのポートスキャンサービスにブラウザから繋いだと言うでしょう。
ブラウザの上、アドレスを入れる部分にあるアドレスを書き込んでアクセスすると、それは指定されたアドレスのhttpサーバーに接続されます。アドレスで明記していなくても、こちらから接続するときに、相手先、指定アドレスの80番ポートへ接続をお願いするわけです。
その時、自分のコンピューターでもあるポートから、情報をくださいと要求を流すわけです。要求の中には、いくらかの情報が含まれ、その中にどこから送られた物なのかを示す、アドレス+ポート番号が含まれています。なぜでしょうか?
答えはもちろん、向こうから返事をくれるときに、こちらのアドレスとポート番号が無ければ、住所不明の郵便物と同様、どこへも配達できないからです。
例えば自分のコンピューターの30000ポートから相手先の80ポートへリクエストを送ると、相手先からあなたのコンピューターの30000ポートへ、お返事がくるわけです。
そこで、もし、あなたのコンピューターの30000ポートが閉じられていると、せっかく帰ってきた相手の通信が受け取れないと言うことになります。
syosinnsyaさんが、ブラウザか何かを通して、ポートスキャンの結果を知ることができているのは、こちらから、相手先へ通信するためのポートが開いています。多分、その通信の間のスキャン結果が、表示されたのではないかと思います。
とはいえ私、何番ポートからどうのこうのと言う話しは、すっかり忘れています。
面倒な途中の難しい話しは無しに、簡単に「こうではないか」という推測を書きました。今の世の中、通信技術者はたくさんいらっしゃると思いますので、詳しい方、つっこみよろしくです。
オフライン
HiroKws による投稿:
ポートスキャンを行ったと書かれています。たぶん、どこかのポートスキャンサービスにブラウザから繋いだと言うでしょう。
ブラウザから繋いだのではなく、ubuntuのシステム→システム管理→ネットワーク・ツールでポートスキャンを行いました。
HiroKws による投稿:
その時、自分のコンピューターでもあるポートから、情報をくださいと要求を流すわけです。
その情報とはブラウザの環境変数のことですか?
HiroKws による投稿:
多分、その通信の間のスキャン結果が、表示されたのではないかと思います。
つまり結果から察するに複数のポートがランダムに開いていたことになりますよね?
これはおかしいのではないかと思うのですが・・・
オフライン
一般的に使われているポートです(ちょっと古かも知れません)。
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/security-guide/ch-ports.html
デフォルトで結構、通信ポートは使われています。
オフライン
エー、私の前の投稿は、読んでいただいているとおり、どこかのポートスキャンサービスを利用しているという前提で書かれています。あくまで前提があってのことです。
同様の質問を外人でされている方がいます。
random open ports
random open ports when portscan
どのプロセスがポートを開いているか知る方法を紹介しているようです。
フォーラムの方では、「ポートスキャンを行っている実態のプロセス、gnome-nettoolがループバックのために自分で開いているポートだろうから、実際に開いているポートだとは言えないだろう」と回答されているかたがいます。
検証するため、ファイヤーウォールでループバックへの通信を止めてしまったようです。その結果、ランダムなポートの使用が表示されなくなることを確かめておられます。
また、別の方は外部からポートスキャンを行うと、ランダムなポートの使用は表示されず、自分自身からポートスキャンを行ったときのみ使用が報告されることをもって、推測されています。
インターネットで回線上にやりとりをするには、ポートを開く必要があります。通信したいプログラムがOSに対して「通信したいから空いてるポートつかわせて」とお願いします。OSは通常、デフォルトで使用されていないポート番号のうち、未使用のポートを選び「この番号のポートをどうぞ」とプログラムに使用させるわけです。プログラムがある通信を終えたら「もういらないから、返す」とOSに申し出ると、そのポートを未使用にするわけです。
で、実際にOSがこれどうぞと提示するポートの番号はいつも異なっています。いくら空いていても、毎回同じポートを使用させていれば、外からみれば、そのポートは開きっぱなしになってしまいます。
今回の場合、プログラムにあたるのがポートスキャンを行うgnome-nettoolと言うことで、理解できるでしょうか?多分、プログラム的には今から調べようとするポートを使い、通信していないとは思います。ポートスキャンの様子を見ているとポートの数の小さい方から、順番に調べているようですね。それを全部、一つのポートからチェックしているとは思えません。たぶん、一つのポートは時間か、もしくは一度に調べるポートの数を決めてあり、その分のチェックを行い、一度そのポートを閉じ、また別のポートを開き、そこから次のまとまった単位のチェックを行い、また閉じて...を繰り返していると思います。
OSから見ると、「ポートを使わせて欲しい」というお願いは「ポート使わなくなったから返す」という要求より、重要で、俗に言うプライオリティが高い処理です。使わなくなったポートの処理は一応受け付けておいて、OSが暇なときにやっておけば良いんです。しかし、使いたいと言う要求は待たせたら、プログラムがその間ずーっと待つことになるんで、できるだけ早く処理してあげます。
で、例えばの話しです。30111ポートで25000から29999ポートまでチェックしました。プログラムは30111ポートを開放します。OSは解放したいという要求を受け付けます。処理しようかなと思ったら、プログラムからポートを使わせて欲しいと要求がありました。じゃ、30111ポートの処理は後に回して、20789ポートが空いているので、その準備をし、プログラムにポートの番号を返して「使って良いよ」と言います。
プログラムは20789ポートから30000から34999ポートまでのチェックを行います。ループバックでの通信は外部との通信に比べ、めちゃくちゃ早いため、OSは忙しくて、30111ポートの解放の処理が間に合っておらず、30111ポートは「開いて」いるように見えるわけです。
(REMOTE_ADDRの値を利用して、外部アドレスで通信しても、実際に外部へ行っていないかも知れませんし、外部のネットワークまで行ったとしても、多分プロバイダで折り返してくるので、速度は速いと推測されます。)
まあ、あくまで私の推測です。本当かも知れないし、違っているかも知れません。
(上記、話を分かりやすくするために詳細は省いています。細かいこと突っ込まれると、キリがないのであらかじめおことわりしておきます。:P )
15年以上前、私がまだUnix系のOSをインストールするのに毎回コンパイルする必要があったときにも、OSのソースプログラムの中に、プログラムからポートを使わせてもらいたいと申し出があったときに、どのポートを使用させるか指定する値があったのを覚えています。その時にポートの値を順番に使わせるのか、ランダムに使用するのかという指定もできたような覚えがあります。今はもっとスマートなやり方に変わっているかもしれないし、なってないかもしれません。何せ、最近OSどころかプログラムを直接読む機会がない、というか、読みたくないので、現状はわかりません。
話しの本質的な部分は、たぶん、それが悪意のあるプログラムで無いとわかれば、それで良いのではないでしょうか?実際、ポートスキャンを行うために動作させるコンピューターは通信を行う必要があり、その通信のためにあるポートが利用され、利用されている間は開いている。同じコンピュータを利用して、自分自身のポートスキャンを行うと、ポートスキャンプログラムの利用しているポートが引っかかることがある。という理解でいいのでは?
納得できなければ、TCP/IPとかサーバー/クライアント/サービスとか勉強する必要がありますね。たぶん。本当にこのあたりの話しが分かるようになるためには、通信プログラムを自分で組んでみる必要があるかも知れません。
今は良い解説書がたくさんあるので、本屋で立ち読みでもすれば、理解できるかもしれません。
追伸:
ポートスキャンとはOSが持っているだろう、ポートの開閉状況をそのまま表示することではありません。実際に、あるアドレスの機械に対して、全ポートに向けて通信を行い、チェックをすることです。
朝、時間がとれないので、書きかけで投稿しています。何度か書き直して、内容を追加しています。ご容赦を。
最後の編集者: HiroKws (2008-08-11 12:16:56)
オフライン
HiroKws による投稿:
フォーラムの方では、「ポートスキャンを行っている実態のプロセス、gnome-nettoolがループバックのために自分で開いているポートだろうから、実際に開いているポートだとは言えないだろう」と回答されているかたがいます。
検証するため、ファイヤーウォールでループバックへの通信を止めてしまったようです。その結果、ランダムなポートの使用が表示されなくなることを確かめておられます。
また、別の方は外部からポートスキャンを行うと、ランダムなポートの使用は表示されず、自分自身からポートスキャンを行ったときのみ使用が報告されることをもって、推測されています。
長文でなおかつ素早い返答どうもありがとうございます。(そして解答が遅れてすいません。)
HiroKwsさんの説明で理解しました。
私はポートが開きっぱなしになっているのかと思い、心配していたのですが、その心配は無用のようですね。
それに正確なポートの状況は外部のPCにポートスキャンをしてもらわないとわからないのですね。
勉強になりました。
解答どうもありがとうございます。
オフライン
syosinnsya による投稿:
私はポートが開きっぱなしになっているのかと思い、心配していたのですが、その心配は無用のようですね。
それに正確なポートの状況は外部のPCにポートスキャンをしてもらわないとわからないのですね。
listen しているポートでしたら、netstat コマンドで調べてみてはどうでしょう?
$ sudo netstat -A inet -npl
とかで待ち受けているプロセスとポートがわかります。へんなポートが開いていたら、プロセス名でググってみたりするといいかもしれません。
オプションの詳細は man netstat で。
オフライン
mizuno による投稿:
listen しているポートでしたら、netstat コマンドで調べてみてはどうでしょう?
$ sudo netstat -A inet -npl
とかで待ち受けているプロセスとポートがわかります。へんなポートが開いていたら、プロセス名でググってみたりするといいかもしれません。
オプションの詳細は man netstat で。
$ sudo netstat -A inet -npl
を実行したところ、ブラウザとcupsがlistenしていました。
ブラウザは起動していたのでともかく、プリンターの電源は入れてなかったのにcupsが起動しているのは変なことなのでしょうか?
オフライン
cupsd はデフォルトで起動したはずです。私の環境でも動いています。
オフライン
mizuno による投稿:
cupsd はデフォルトで起動したはずです。私の環境でも動いています。
そうですか。安心しました。解答ありがとうございます。
オフライン