◾️はじめに
conntrackコマンドってのを覚えたのでメモ。
目次
【1】conntrackコマンド 【2】環境設定 1)使用可能か確認 2)インストールする 【3】基本的な使い方 1)コマンド例 【4】フィルタリング機能 0)使用上の注意 1)プロトコルで絞る 2)TCP状態で絞る 3)トラッキング状態で絞る
【1】conntrackコマンド
* コネクショントラッキング情報を取得するためのコマンド cf. ConnTrack = connection tracking * Linuxのコネクショントラッキングを監視しているNetFilter経由で実装 => iptablesも同様なので、密接に関わってくる(iptablesの詳細は以下の関連記事を参照)
iptablesコマンド
https://dk521123.hatenablog.com/entry/2025/03/18/003023
1)tcpdumpコマンドとの違い
関連記事
tcpdumpコマンド 〜 パケットキャプチャ 〜
https://dk521123.hatenablog.com/entry/2017/07/03/233336
で扱ったtcpdumpコマンドとの違いをGoogle先生(AI版)が答えてくれた # 「生成 AI は試験運用中です。」だそうだが、 # どちらも通信やり取りを取得してくれるものだが、 # 取得の仕方(プロトコル)や意図が違うって理解すればいいのか?
詳細
tcpdumpはネットワーク上のパケットの内容を表示するコマンドで、 conntrackはコネクションの状態をトラッキングするツールです。
【tcpdumpについて】
* コンピューターが接続されたネットワーク上のパケットの内容を表示するコマンド * ネットワーク通信を行うソフトウェアの開発や、 コンピュータや通信機器の設定の検証に利用される * パケットキャプチャは、サービスアダプタがバックグラウンドで実行する * 開始後24時間経過、またはキャプチャデータが1MBに達すると自動停止する * キャプチャされるパケットの数を制限するには、-c(count)オプションを使用する
【conntrackについて】
* コネクションの接続状態をトラッキングするツール * アドレスやTCPフラグではなく、コネクションのステートに基づいて パケットフィルタをかけることができる * 例えば、TCP接続の最初のSYNが観測された時、 そのパケットのステートはNEWと扱われる
【2】環境設定
1)使用可能か確認
# インストールされているか確認 conntrack --version # firewalldサービスの状態がactiveであることを確認 systemctl is-active firewalld.service
2)インストールする
# yum の場合 $ sudo yum -y install conntrack-tools # apt の場合 $ sudo apt update $ sudo apt install conntrack conntrackd
【3】基本的な使い方
* (もちろん設定によるが、デフォルトだと恐らく) root権限相当が出ないと実行できない * 全てのオプションに関しては、以下のサイトを参照。
https://manpages.debian.org/jessie/conntrack/conntrack.8.en.html
Options | Explanations |
---|---|
-E | リアルタイム表示 |
-L | 管理テーブルのトラッキング情報を表示 |
-o timestamp | 時間表示 |
1)コマンド例
# -E : リアルタイム表示 conntrack -E [NEW] tcp 6 301 ESTABLISHED src=192.168.122.1 dst=192.168.122.216 sport=57780 dport=22 [UNREPLIED] src=192.168.122.216 dst=192.168.122.1 sport=22 dport=57780 [UPDATE] tcp 6 300 src=192.168.122.1 dst=192.168.122.216 sport=57780 dport=22 src=192.168.122.216 dst=192.168.122.1 sport=22 dport=57780 ... # + file出力 conntrack -E | tee track.log # teeコマンド に関しては、以下の関連記事を参照の事
teeコマンド
https://dk521123.hatenablog.com/entry/2023/11/08/000000
# -L : 管理テーブルのトラッキング情報を表示 conntrack -L tcp 6 118 TIME_WAIT src=192.168.1.12 dst=192.168.1.9 sport=3311 dport=5678 src=192.168.1.9 dst=192.168.1.12 sport=5678 dport=3579 [ASSURED] mark=0 use=1 ...
【4】フィルタリング機能
使えばすぐ分かるが、めちゃくちゃログが飛んでくるので 絞り込みたい、そんな時のための機能。 => grepコマンドも併用すれば、ある程度欲しい情報が拾えそう
grep / egrep / fgrepコマンド
https://dk521123.hatenablog.com/entry/2017/08/06/213100
Options | Explanations |
---|---|
-p |
プロトコルで絞る (e.g. -p tcp) |
--sport/--dport |
送信元・送信先ポート番号で絞る (「0)使用上の注意」参照) |
-s |
送信元IPアドレスを指定して絞る |
--status |
TCP状態で絞る (e.g. --status ASSURED。「0)使用上の注意」参照) |
-e |
トラッキング状態で絞る |
0)使用上の注意
「--sport/--dport <PORT>」や「--status <TCPStatus>」などのいくつかオプションは、 「-p <protocol (e.g. tcp/udp)>」と併用して使う必要がある => 単体では使えないものもあるってことも頭の隅に入れといてもらえたら => 以下のDebianの公式ドキュメント?を参照
https://manpages.debian.org/jessie/conntrack/conntrack.8.en.html
使用例:--dport / --status
conntrack -E -p tcp --dport 8080 --status TIME_WAIT
1)プロトコルで絞る
# -p <protocol> : プロトコルで絞る conntrack -E -p tcp # 他にも「-p udp」「-p icmp」
2)TCP状態で絞る
conntrack -E -p tcp --status LAST_ACK # -u, --status [ASSURED|SEEN_REPLY|FIXED_TIMEOUT|EXPECTED|UNSET][,...] # また、上記「0)使用上の注意」も参照
About TCP status
* 以下のサイトの遷移図を含めて、軽く頭に入れておいた方がいいかも
https://qiita.com/mogulla3/items/196124b9fb36578e5c80
TCP status | Jp | Explanations |
---|---|---|
SYN_SENT | SYN送信済 | コネクション要求の送信を終え、応答確認と対応するコネクション要求待 |
SYN_RECV | SYN受信済 | 同期(SYN)セグメントを受信し、対応する同期(SYN/ACK)セグメントを送って、コネクション応答確認待 |
ESTABLISHED | 確立済 | コネクションが開かれ、データ転送が行える状態 |
FIN_WAIT | FIN待機 | リモートホストからの終了要求待 |
CLOSE_WAIT | 閉鎖待機 | アプリケーションプロセスからのコネクション終了要求待 |
LAST_ACK | 最終ACK | リリモートホストに送ったコネクション終了要求について、TCPモジュールがその応答確認待 |
TIME_WAIT | 時間待機 | コネクション終了要求応答確認をリモートホストが確実に受取るのに必要な時間が経過するまで待機状態 |
CLOSE | 閉鎖 | コネクションは全く存在せず、確立段階にも入っていない状態 |
LISTEN | 聴取 | リモートホストからのコネクション要求待 |
3)トラッキング状態で絞る
conntrack -E -p tcp -e NEW # -e, --event-mask [ALL|NEW|UPDATES|DESTROY][,...]
Status | Explanations |
---|---|
NEW | 管理テーブルにトラッキング情報が初めて登録された場合 |
UPDATES | 管理テーブルのトラッキング情報が更新された場合 |
UNREPLIED | 一方向にしか通信がない場合(e.g. udp) |
ASSURED | 双方向に通信が発生した場合 |
DESTROY | 管理テーブルからトラッキング情報が消去された場合 |
参考文献
https://hana-shin.hatenablog.com/entry/2022/06/21/215757
https://turgenev.hatenablog.com/entry/2024/03/03/171152
関連記事
ネットワーク系コマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/07/27/214633
ネットワーク系コマンド ~ firewall編 ~
https://dk521123.hatenablog.com/entry/2025/03/17/005508
iptablesコマンド
https://dk521123.hatenablog.com/entry/2025/03/18/003023
tcpdumpコマンド 〜 パケットキャプチャ 〜
https://dk521123.hatenablog.com/entry/2017/07/03/233336
Wireshark ~パケットキャプチャ~
https://dk521123.hatenablog.com/entry/2013/04/18/234813
grep / egrep / fgrepコマンド
https://dk521123.hatenablog.com/entry/2017/08/06/213100
teeコマンド
https://dk521123.hatenablog.com/entry/2023/11/08/000000
外部サイトに繋がらなかった場合のトラブルシュート
https://dk521123.hatenablog.com/entry/2017/10/13/231826
ファイルの内容を表示するコマンド
https://dk521123.hatenablog.com/entry/2016/08/08/235934
ファイル内容を操作するコマンド
https://dk521123.hatenablog.com/entry/2023/07/26/000000
パフォーマンスに関わるコマンド
https://dk521123.hatenablog.com/entry/2015/02/21/112554
バックグラウンド関連のコマンド
https://dk521123.hatenablog.com/entry/2020/01/30/000000
定期実行するためのコマンド
https://dk521123.hatenablog.com/entry/2017/12/31/000300
ログバックアップを考える & 簡易スクリプトの作成
https://dk521123.hatenablog.com/entry/2015/04/29/161341
時間/日付/タイムゾーン関連のコマンド
https://dk521123.hatenablog.com/entry/2018/02/05/215000