ポートの棚卸し

開いている口を、自分で数えられるようにする

ファイアウォールで通す番号を決めました。ここで一度、逆側から見ておきます。そもそもこのサーバーは、どの番号で待っているのか

通す設定と、待っているプログラム。この2つは別のものです。ufw で 80 番を通していても、そこで待つプログラムが居なければ何も起きません。逆に、通していない番号で待っているプログラムがあるなら、それは外からは届かないだけで、中には残っています。両方を突き合わせて初めて、いまの状態が分かります。

待ち受けを一覧する

ss -tlnp

4つの指定を並べています。-t は TCP、-l は待ち受けているものだけ、-n は番号を名前に変えずそのまま出す、-p はどのプログラムかを添える、という意味です。

State Local Address:Port Peer Address:Port Process LISTEN 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=412,fd=6)) LISTEN 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=380,fd=3))

-n を付けないと 80 が http、22 が ssh と表示されます。読みやすいようでいて、実際の番号を見失うので、点検のときは番号のまま見るほうが確実です。

アドレスの部分がいちばん大事

ポート番号の左側を見てください。ここが 0.0.0.0 なら、どのネットワークからの接続も受け付けるという意味です。127.0.0.1 なら、そのサーバー自身からの接続しか受け付けません。

同じ 3306 番で待っていても、0.0.0.0:3306127.0.0.1:3306 では危険度がまったく違います。前者は世界中から届き、後者はサーバーの外からは触れません。データベースのように、そのサーバーの中からだけ使うものは、後者にしておくのが基本です。

ポート番号だけを見て安心しない。左側まで読む。これが点検の勘どころです。

プログラムの名前から、サービスへ戻る

-p で出たプログラム名が分かれば、2章でやったようにサービスの側から素性を辿れます。

systemctl status nginx

見覚えのない名前が出てきたときは、止めていいものかどうかをここで確かめます。使っていないと分かったら、systemctl disable --now で止めて自動起動も切ります。待ち受けを減らすこと自体が、いちばん確実な守りです。ファイアウォールで塞ぐより、そもそも開かないほうが強いという考え方です。

通す設定と突き合わせる

ss -tlnp > /root/listening.txt ufw status numbered

2つを並べて、次の2種類を探します。

  • 待っているのに通していない番号 — 外から使えない。使う予定なら通す必要がある
  • 通しているのに待っていない番号 — 通す意味が無い。消して構わない

どちらも設定ミスの入口です。定期的に見る習慣を付けると、いつの間にか増えた待ち受けに気づけます。

手を動かす

いまのサーバーの待ち受けを一覧して保存し、番号とアドレスとプログラムを自分の言葉で対応づけます。

ヒント

  • 1. ss -tlnp > /root/listening.txt で待ち受けを保存する
  • 2. 保存した内容を読み、どの番号でどのプログラムが待っているかを確かめる
  • 3. /root/port-map.txt に「番号 プログラム名」の形で1行ずつ書く
  • 4. 80 番と 22 番の行を必ず入れる
  • 5. アドレスの部分が 0.0.0.0 か 127.0.0.1 かも見ておく

6 項目で採点します