LoginSignup
368
237

More than 3 years have passed since last update.

ロミオとジュリエットで学ぶ「ポートが開いてる」と「Listenしている」の違い

Last updated at Posted at 2015-04-18

Linuxサーバ初心者向けに、「ポートが開いてる」と「Listenしている」の違いをわかりやすく説明してみます。

まずはこちらをご覧ください

image

ロミオとジュリエットが窓越しに会話をしています。
HTTPで例えると、左のロミオがWebブラウザ(HTTPクライアント)、右のジュリエットがApache(HTTPサーバ)です。
ロミオがHTTPリクエストを送るとジュリエットはHTTP レスポンスを返してくれます。

この会話(=通信)が成り立つのは、

  • 屋敷の窓が開いていて
  • ジュリエットが聞く耳を持っている

ときだけです。
重要なのは、「窓が開いているかどうか」と「ジュリエットが聞く耳をもっているかどうか」は別々のことなのです。

ジュリエットが聞く耳を持っている ジュリエットが聞く耳を持っていない
窓が開いている x
窓が閉じている x x

○のときだけロミオは会話ができます。

「ポートが閉じている」= 窓が閉じている

窓が閉じている場合は、ジュリエットがどれだけロミオを待ち構えていても、会話はできません。

技術的に言うと、「ポートを閉じる」とは、パケットを転送しないで捨ててしまうことです。
やり方は何通りかあって、よくつかわれるのは次の2つの方法です。

ルータ機器によるファイアーウォール機能でポートを閉じる

image

城門が閉まっていると、敷地内に入ることすらできません。
ルータ(城門)でポートを閉じると、サーバ(屋敷)にパケット(声)が到達できなくなります。

クラウドの場合は物理的なルータを扱えないことが多いですが、似たような機能がサービスとして用意されてたりります。
例えばAWS EC2の場合はSecurityGroupsという機能がファイアーウォールの役割を果たしてくれます。

サーバのパケットフィルタ機能でポートを閉じる

image

城門(ルータ)が開いていれば屋敷(サーバ)の前まで行くことができますが、部屋の窓が閉じていると、ロミオの声はジュリエットに届きません。

サーバにはパケットフィルタ機能というものがあって、外から入ってくるパケットを遮断することができます。

Linuxではfirewalldとかiptablesという名前で呼ばれている機能で、内部的にはカーネルモジュールとして実装されています。

「Listenしている」= なかのひとが聞き耳をたてている

"Listenする"とは、なかのひと(=プロセス)が聞く準備ができている状態をいいます。

image

たとえ窓(ポート)が開いていたとしても、なかのひとが眠っていたり死んでいたりすると、こちらから話かけても会話はできません。

netstatssコマンドでポートのListen状態を調べることができます。これは、「聞き耳を立てているひと(プロセス)がいるかどうか」を調べるときに使います。逆に、netstatssは窓の開閉を調べるのには使えません。

窓は複数ある

1つのサーバ(=家)には窓が複数あるのが普通です。
開いている窓と、中のひとが聞き耳をたてる窓は一致している必要があります。
例えば、80番目の窓しか開いてないのに、中の人が間違って8080番目の窓に聞き耳を立てても、会話は成立しません。

なかの人も複数人いる

ジュリエットが80番目の窓に聞き耳をたてているときに、ジュリエットの妹が22番目窓に聞き耳をたてる、というのは可能です。
webサーバの場合は普通sshdとhttpdの通信を許可しますので、そういう状態になっています。

一方、ジュリエットの妹が、既にジュリエットが張り付いている80番目の窓に聞き耳をたてにいこうとすると、エラーで失敗します。

1人が複数の窓に同時に聞き耳をたてることはできる

ジュリエットが80番の窓と443番の窓に聞き耳をたてる、ということは可能です。
よくあるのがApacheが80番ポートと443番ポートをListenしているケースです。

368
237
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
368
237