kubestronautへの道 ~CKS編 その30 killer coda「System Hardening Close Open Ports」~

tech article

今日覚えて帰ること

netstat/lsof

netstat

network statisticsの略
ネットワークに関する情報を表示するためのコマンドラインツール

lsof

list open filesの略
システム上で現在開かれているすべてのファイルに関する情報を表示するコマンドラインツール

System Hardening Close Open Ports

Find process listening on port and close

There is an unwanted process running which listens on port 1234 .

Kill the process and delete the binary.

1234ポートで待ち受けているプロセスを削除し、バイナリファイル自体も削除せよ、と言っています。

1234ポートで待ち受けているプロセスを見つけ出すにはnetstatというコマンドを使用します。

netstat コマンドはアクティブな接続のさまざまなネットワーク関連データ構造の内容を記号で表示します。 

netstat コマンド – IBM Documentation

netstatコマンドを使うためにまずインストールから始めます。
net-toolsというパッケージをインストールします。

controlplane $ apt install net-tools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
net-tools is already the newest version (1.60+git20180626.aebd88e-1ubuntu1).
0 upgraded, 0 newly installed, 0 to remove and 185 not upgraded.

そのあと、以下のようなコマンドを実行します。

controlplane $ netstat -tulpan | grep 1234
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      10235/app1   

オプションについて

-tuは、それぞれTCP接続、UDP接続を表します。
すなわち、TCPのトラフィックもUDPのトラフィックもどちらも検知する、ということです。

-lは、現在リッスン中(待ち受け状態)のポートを表示します。
サーバーがクライアントからの接続を待機しているポートの情報です。

-pは、各接続やポートに関連するプロセスID(PID)とプログラム名を表示します。

-aは、すべての接続(アクティブな接続とリスニング状態の両方)を表示します。
オプションで-aが来るときはallを表わすことが多いですね。

-nは、ホスト名やサービス名ではなく、数値形式(IPアドレスやポート番号)で表示するためのオプションです。
これにより、名前解決の処理がスキップされて高速に出力されます。

これでオプションについての説明が完了です。

再び出力結果を確認します。

controlplane $ netstat -tulpan | grep 1234
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      10235/app1 

/appがどこに配置されているのかを確認します。

controlplane $ ls -l /proc/10235/exe
lrwxrwxrwx 1 root root 0 Sep 29 03:19 /proc/10235/exe -> /usr/bin/app1

/usr/bin/app1に配置されていることが分かりました。

それではプロセスを終了させて、ファイルの削除まで行います。

controlplane $ kill 10235
controlplane $ netstat -tulpna 1234 | grep 1234
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      10235/app1          

これで完了です。

ちなみに、1234ポートで待ち受けているプロセスを探すのに lsof というコマンドを利用することもできます。
lsofは”List Open Files” の略で、開いているファイルやソケット(ネットワーク接続を含む)に関連するプロセスを表示するコマンドです。

controlplane $ lsof -i :1234
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
app1    10235 root    3u  IPv4 255166      0t0  TCP *:1234 (LISTEN)

-i オプションはインターネット通信に関する情報を表示します。
続けて:1234 とすることで、ポート番号1234を指定してそのポートを使用しているプロセスを表示するよう指示しています。

タイトルとURLをコピーしました