ポートの棚卸し
開いている口を、自分で数えられるようにする
ファイアウォールで通す番号を決めました。ここで一度、逆側から見ておきます。そもそもこのサーバーは、どの番号で待っているのか。
通す設定と、待っているプログラム。この2つは別のものです。ufw で 80 番を通していても、そこで待つプログラムが居なければ何も起きません。逆に、通していない番号で待っているプログラムがあるなら、それは外からは届かないだけで、中には残っています。両方を突き合わせて初めて、いまの状態が分かります。
待ち受けを一覧する
ss -tlnp4つの指定を並べています。-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:3306 と 127.0.0.1:3306 では危険度がまったく違います。前者は世界中から届き、後者はサーバーの外からは触れません。データベースのように、そのサーバーの中からだけ使うものは、後者にしておくのが基本です。
ポート番号だけを見て安心しない。左側まで読む。これが点検の勘どころです。
プログラムの名前から、サービスへ戻る
-p で出たプログラム名が分かれば、2章でやったようにサービスの側から素性を辿れます。
systemctl status nginx見覚えのない名前が出てきたときは、止めていいものかどうかをここで確かめます。使っていないと分かったら、systemctl disable --now で止めて自動起動も切ります。待ち受けを減らすこと自体が、いちばん確実な守りです。ファイアウォールで塞ぐより、そもそも開かないほうが強いという考え方です。
通す設定と突き合わせる
ss -tlnp > /root/listening.txt
ufw status numbered2つを並べて、次の2種類を探します。
- 待っているのに通していない番号 — 外から使えない。使う予定なら通す必要がある
- 通しているのに待っていない番号 — 通す意味が無い。消して構わない
どちらも設定ミスの入口です。定期的に見る習慣を付けると、いつの間にか増えた待ち受けに気づけます。
手を動かす
いまのサーバーの待ち受けを一覧して保存し、番号とアドレスとプログラムを自分の言葉で対応づけます。