今日覚えて帰ること
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を指定してそのポートを使用しているプロセスを表示するよう指示しています。