Linux
ポエム
212
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

Organization

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

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しているケースです。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
DQNEO
PHP/Go/Perl/C/Docker/Linux/Git/AWS
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
212
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー