hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

conntrackコマンドの使い方



1 conntrackコマンドとは?

OS(netfilter)が維持するコネクショントラッキング情報を取得するためのコマンドです。トラッキングとは、送信パケットに対する応答パケットを関連付けることです。関連付けすることで、ユーザが応答パケットの受信を許可するフィルタリング設定が不要になります。conntrackコマンドは、以下の図のようにNETLINKインタフェースを使用してトラッキング情報を取得します。

     CentOS7
+---------------------+                                         -*-
|    firewall-cmd     |                                          |
+---------------------+                                          |
                                                               ユーザ空間
+---------------------+        +---------------------+           |
|  iptables command   |        |  conntrack command  |           |
+---------------------+        +---------------------+          -*-
          ↑                             ↑
======= AF_INET =======        ===== AF_NETLINK =====
          ↓                             ↓
+-----------------------------------------------------------+   -*-
|                                                           |    |
|                    OS(netfilter)                          |  カーネル空間
|                                                           |    |
+-----------------------------------------------------------+   -*-

2 検証環境

CentOS版数は以下のとおりです。

[root@server ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

3 インストール方法

conntrack-toolsパッケージをインストールします。

[root@server ~]# yum -y install conntrack-tools

版数を確認します。

[root@server ~]# conntrack --version
conntrack v1.4.4 (conntrack-tools)

firewalldサービスの状態がactiveであることを確認します

[root@server ~]# systemctl is-active firewalld.service
active

4 オプション一覧

オプションは以下のとおりです。

[root@server ~]# conntrack --help
Command line interface for the connection tracking system. Version 1.4.4
Usage: conntrack [commands] [options]

Commands:
  -L [table] [options]          List conntrack or expectation table
  -G [table] parameters         Get conntrack or expectation
  -D [table] parameters         Delete conntrack or expectation
  -I [table] parameters         Create a conntrack or expectation
  -U [table] parameters         Update a conntrack
  -E [table] [options]          Show events
  -F [table]                    Flush table
  -C [table]                    Show counter
  -S                            Show statistics

Tables: conntrack, expect, dying, unconfirmed

Conntrack parameters and options:
  -n, --src-nat ip                      source NAT ip
  -g, --dst-nat ip                      destination NAT ip
  -j, --any-nat ip                      source or destination NAT ip
  -m, --mark mark                       Set mark
  -c, --secmark secmark                 Set selinux secmark
  -e, --event-mask eventmask            Event mask, eg. NEW,DESTROY
  -z, --zero                            Zero counters while listing
  -o, --output type[,...]               Output format, eg. xml
  -l, --label label[,...]               conntrack labels

Expectation parameters and options:
  --tuple-src ip        Source address in expect tuple
  --tuple-dst ip        Destination address in expect tuple

Updating parameters and options:
  --label-add label     Add label
  --label-del label     Delete label

Common parameters and options:
  -s, --src, --orig-src ip              Source address from original direction
  -d, --dst, --orig-dst ip              Destination address from original direction
  -r, --reply-src ip            Source addres from reply direction
  -q, --reply-dst ip            Destination address from reply direction
  -p, --protonum proto          Layer 4 Protocol, eg. 'tcp'
  -f, --family proto            Layer 3 Protocol, eg. 'ipv6'
  -t, --timeout timeout         Set timeout
  -u, --status status           Set status, eg. ASSURED
  -w, --zone value              Set conntrack zone
  --orig-zone value             Set zone for original direction
  --reply-zone value            Set zone for reply direction
  -b, --buffer-size             Netlink socket buffer size
  --mask-src ip                 Source mask address
  --mask-dst ip                 Destination mask address

5 リアルタイムに表示する方法(-E)

-Eはトラッキング情報をリアルタイムに表示するオプションです。

-Eを指定してconntrackコマンドを実行します。

[root@server ~]# conntrack -E

もう1つターミナルをオープンして、digコマンドを実行します。なお、digコマンドのインストール方法、使い方は、digコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# dig ntp.nict.jp +short

digコマンドによるDNS名前解決はUDPを使います。したがって、UDPパケットのトラッキング情報が出力されることが確認できます。また、2行目でDNSサーバからのDNS応答を受信していないので、[UNREPLIED]と表示されています。3行目はDNS応答を受信したので、[UNREPLIED]の表示が消えて、 [UPDATE] と状態が更新されていることがわかります。

[root@server ~]# conntrack -E
    [NEW] udp      17 30 src=::1 dst=::1 sport=60242 dport=60242 [UNREPLIED] src=::1 dst=::1 sport=60242 dport=60242
    [NEW] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=46630 dport=53 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 sport=53 dport=46630
 [UPDATE] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=46630 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=46630

次は、デフォルトGWに対してpingを実行してみます。

-Eを指定してconntrackコマンドを実行します。

[root@server ~]# conntrack -E

デフォルトGWに対してpingを1回実行してみます。なお、pingコマンドの使い方は、pingコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。1行目はping要求に対して応答を受信していないので、 [UNREPLIED] と表示されていることがわかります。2行目は、ping応答を受信したので[UNREPLIED] の表示が消えて、 [UPDATE] と状態が更新されたことがわかります。

[root@server ~]# conntrack -E
    [NEW] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1365 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1365
 [UPDATE] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1365 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1365

6 特定のプロトコルのトラッキング情報を表示する方法(-p)

6.1 TCPのトラッキング情報を表示する方法(-p tcp)

-pはプロトコルを指定するオプションです。指定できるオプションはtcp,udp,icmpです。

-pにtcpを指定して、TCPのトラッキング情報だけを表示してみます。

[root@server ~]# conntrack -E -p tcp

もう1つターミナルを開きます。そして、www.google.comに対してcurlコマンドを実行します。

[root@server ~]# curl -I https://www.google.com/

conntrackコマンドの実行結果を確認します。TCPコネクションの確立から解放までの様子を確認することができます。

[root@server ~]# conntrack -E -p tcp
    [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
 [UPDATE] tcp      6 432000 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 [ASSURED]
    [NEW] tcp      6 120 SYN_SENT src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 [UNREPLIED] src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538
 [UPDATE] tcp      6 60 SYN_RECV src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538
 [UPDATE] tcp      6 432000 ESTABLISHED src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538 [ASSURED]
 [UPDATE] tcp      6 120 FIN_WAIT src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538 [ASSURED]
 [UPDATE] tcp      6 30 LAST_ACK src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538 [ASSURED]
 [UPDATE] tcp      6 120 TIME_WAIT src=192.168.122.216 dst=172.217.31.132 sport=59538 dport=443 src=172.217.31.132 dst=192.168.122.216 sport=443 dport=59538 [ASSURED]

6.2 TCPの状態で絞り込む方法(--state)

netfilterが管理するTCPの状態を以下に示します。なおnetfilterが管理する状態とTCPプロトコルが管理する状態に関係はありません。

man conntrackより抜粋
--state [NONE | SYN_SENT | SYN_RECV | ESTABLISHED | FIN_WAIT | CLOSE_WAIT | LAST_ACK | TIME_WAIT | CLOSE | LISTEN]

SYN_SENTの状態のトラッキング情報だけを表示してみます。

[root@server ~]# conntrack -E -p tcp --state SYN_SENT

www.google.comに対してcurlコマンドを実行します。

[root@server ~]# curl -I https://www.google.com/

conntrackコマンドの実行結果を確認します。SYN_SENT状態のトラッキング情報だけが表示されることがわかります。

[root@server ~]# conntrack -E -p tcp --state SYN_SENT
    [NEW] tcp      6 120 SYN_SENT src=192.168.122.216 dst=172.217.161.36 sport=60562 dport=443 [UNREPLIED] src=172.217.161.36 dst=192.168.122.216 sport=443 dport=60562

6.3 UDPのトラッキング情報を表示する方法(-p udp)

-pにUDPを指定して、UDPのトラッキング情報だけを表示してみます。

[root@server ~]# conntrack -E -p udp

もう1つターミナルをオープンして、digコマンドを実行します。

[root@server ~]# dig ntp.nict.jp +short

conntrackコマンドの実行結果を確認します。1行目はDNSサーバからのDNS応答を受信していないので、[UNREPLIED]と表示されています。2行目はDNS応答を受信したので、[UNREPLIED] の表示が消えて、[UPDATE] と状態が更新されていることがわかります。そして、3行目は、30秒経過してトラッキング情報が管理テーブルから削除されたので、[DESTROY] と状態が更新されていることがわかります。

[root@server ~]# conntrack -E -p udp
    [NEW] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=60377 dport=53 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 sport=53 dport=60377
 [UPDATE] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=60377 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=60377
[DESTROY] udp      17 src=192.168.122.216 dst=192.168.122.1 sport=60377 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=60377

6.4 ICMPのトラッキング情報を表示する方法(-p icmp)

-pにicmpを指定して、ICMPのトラッキング情報だけを表示してみます。

[root@server ~]# conntrack -E -p icmp

デフォルトGWに対してpingを1回実行してみます。

[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。1行目はping要求に対する応答を受信していないので、 [UNREPLIED] と表示されていることがわかります。2行目は、ping応答を受信したので[UNREPLIED] が消えて、 [UPDATE] と状態が更新されたことがわかります。3行目は、30秒経過してトラッキング情報が管理テーブルから削除されたので、[DESTROY] と状態が更新されていることがわかります。

[root@server ~]# conntrack -E -p icmp
    [NEW] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1407 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1407
 [UPDATE] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1407 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1407
[DESTROY] icmp     1 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1407 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1407

7 IPアドレスで絞り込む方法(-s)

-sは送信元IPアドレスを指定するオプションです。なお、192.168.122.216はサーバ(server)のIPアドレスです。

[root@server ~]# conntrack -E -s 192.168.122.216

もう1つターミナルをオープンして、digコマンドを実行します。

[root@server ~]# dig ntp.nict.jp +short

conntrackコマンドの実行結果を確認します。送信元IPアドレスが192.168.122.216のトラッキング情報だけが表示されていることがわかります。

[root@server ~]# conntrack -E -s 192.168.122.216
    [NEW] udp      17 30 src=192.168.122.216 dst=144.76.138.23 sport=36239 dport=123 [UNREPLIED] src=144.76.138.23 dst=192.168.122.216 sport=123 dport=36239
 [UPDATE] udp      17 29 src=192.168.122.216 dst=144.76.138.23 sport=36239 dport=123 src=144.76.138.23 dst=192.168.122.216 sport=123 dport=36239
    [NEW] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=35798 dport=53 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 sport=53 dport=35798
 [UPDATE] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=35798 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=35798

8 宛先ポート番号で絞り込む方法(--dport)

--dport に53番ポートを指定して、宛先ポート番号がUDPの53番のトラッキング情報だけを表示してみます。なお、UDPの53番ポートはNTPに割り当てられているポート番号です。

[root@server ~]# conntrack -E -p udp --dport 53

もう1つターミナルをオープンして、digコマンドを実行します

[root@server ~]# dig ntp.nict.jp +short

conntrackコマンドの実行結果を確認します。1行目でDNSサーバからのDNS応答を受信していないので、[UNREPLIED]と表示されています。2行目はDNS応答を受信したので、 [UPDATE] と状態が更新されていることがわかります。

[root@server ~]# conntrack -E -p udp --dport 53
    [NEW] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=57591 dport=53 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 sport=53 dport=57591
 [UPDATE] udp      17 30 src=192.168.122.216 dst=192.168.122.1 sport=57591 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=57591

9 時間を表示する方法(-o timestamp)

ICMPのトラッキング情報に時刻情報を付加してみます。

[root@server ~]# conntrack -E -p icmp -o timestamp

もう1つターミナルを開きます。そして、デフォルトGWに対してpingコマンドを実行します。

[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。NEWからDESTROYになる時間は約30秒であることがわかります。

[root@server ~]# conntrack -E -p icmp -o timestamp
[1655385091.917279]         [NEW] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1494 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1494
[1655385091.917808]      [UPDATE] icmp     1 30 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1494 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1494
[1655385121.917959]     [DESTROY] icmp     1 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1494 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1494

10 特定状態のトラッキング情報を表示する方法(-e)

10.1 NEW状態のトラッキング情報を表示する方法

状態がNEWのトラッキング情報だけを表示してみます。NEWは、管理管理テーブルにトラッキング情報が初めて登録されたときの状態です。

[root@server ~]# conntrack -E -p icmp -e NEW

pingコマンドを3回実行します。

[root@server ~]# ping -c 1 192.168.122.1
[root@server ~]# ping -c 1 192.168.122.1
[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。NEWの状態のトラッキング情報だけが表示されていることがわかります。

[root@server ~]# conntrack -E -p icmp -e NEW
    [NEW] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1460 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1460
    [NEW] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1461 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1461
    [NEW] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1462 [UNREPLIED] src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1462

10.2 UPDATES状態のトラッキング情報を表示する方法

状態がUPDATESのトラッキング情報だけを表示してみます。UPDATESは、管理管理テーブルのトラッキング情報が更新されたときの状態です。たとえば、送信パケットに対する応答パケットを受信すると状態がUPDATESになります。

[root@server ~]# conntrack -E -p icmp -e UPDATES

pingコマンドを3回実行します。

[root@server ~]# ping -c 1 192.168.122.1
[root@server ~]# ping -c 1 192.168.122.1
[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。UPDATESの状態のトラッキング情報だけが表示されていることがわかります。

[root@server ~]# conntrack -E -p icmp -e UPDATES
 [UPDATE] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1467 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1467
 [UPDATE] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1468 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1468
 [UPDATE] icmp     1 10 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1469 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1469

10.3 DESTROY状態のトラッキング情報を表示する方法

状態がDESTROYのトラッキング情報だけを表示してみます。DESTROYは、管理テーブルからトラッキング情報が消去された状態です

[root@server ~]# conntrack -E -p icmp -e DESTROY

pingコマンドを1回実行します。

[root@server ~]# ping -c 1 192.168.122.1

conntrackコマンドの実行結果を確認します。DESTROYの状態のトラッキング情報だけが表示されていることがわかります。

[root@server ~]# conntrack -E -p icmp -e DESTROY
[DESTROY] icmp     1 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1471 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1471

11 管理テーブルのトラッキング情報を表示する方法(-L)

ラッキング情報はnetfilterの管理テーブルに保存されています。ここでは、管理テーブルに保存されているトラッキング情報を表示してみます。以下の実行例では、トラッキング情報が2つ表示されていることがわかります。

[root@server ~]# conntrack -L
udp      17 28 src=192.168.122.216 dst=192.168.122.1 sport=50202 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=50202 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 2 flow entries have been shown.

12 トラッキング情報を消去する方法

12.1 全てのトラッキング情報を消去する方法(-F)

-Fは管理テーブルのトラッキング情報を全て消去するオプションです。
現在、管理テーブルに3つのトラッキング情報が登録されていることがわかります。

[root@server ~]# conntrack -L
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
icmp     1 26 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1197 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1197 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
udp      17 28 src=192.168.122.216 dst=192.168.122.1 sport=36503 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=36503 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 3 flow entries have been shown.

ラッキング情報を全て削除します。

[root@server ~]# conntrack -F
conntrack v1.4.4 (conntrack-tools): connection tracking table has been emptied.

ラッキング情報が1つだけであることがわかります。これは、デスクトップからのssh接続のトラッキング情報なので、削除することができません。

[root@server ~]# conntrack -L
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.

12.2 特定のトラッキング情報を消去する方法(-D)

-Dは特定のラッキング情報を消去するオプションです。

[root@server ~]# conntrack -L
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
icmp     1 26 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1289 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1289 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
udp      17 24 src=192.168.122.216 dst=192.168.122.1 sport=36529 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=36529 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 3 flow entries have been shown.

ICMPのトラッキング情報だけを消去します。

[root@server ~]# conntrack -D -p icmp
icmp     1 15 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1289 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1289 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been deleted.

conntrackコマンドの実行結果を確認します。ICMPのトラッキング情報だけが消去されたことがわかります。

[root@server ~]# conntrack -L
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
udp      17 11 src=192.168.122.216 dst=192.168.122.1 sport=36529 dport=53 src=192.168.122.1 dst=192.168.122.216 sport=53 dport=36529 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 2 flow entries have been shown.

13 管理テーブルのトラッキング数を変更する方法(nf_conntrack_max)

13.1変更前

コネクショントラッキング数を確認します。管理テーブルには最大65536個のコネクショントラッキング情報を保存できることがわかります。

[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536

13.2 変更後

コネクショントラッキング数を3個に制限します。

root@server ~]# echo 3 > /proc/sys/net/netfilter/nf_conntrack_max

コネクショントラッキング数を確認します。

[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
3
[root@server ~]# conntrack -L
tcp      6 431999 ESTABLISHED src=192.168.122.216 dst=192.168.122.1 sport=22 dport=55496 src=192.168.122.1 dst=192.168.122.216 sport=55496 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
icmp     1 25 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1378 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1378 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
icmp     1 26 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1379 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1379 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 3 flow entries have been shown.

14 トラッキング情報のタイムアウト時間を変更する方法

nf_conntrack_icmp_timeoutは、ICMPトラッキング情報のタイムアウト時間を指定するパラメータです。タイムアウトすると、管理テーブルからトラッキング情報が削除されます。

ICMPトラッキング情報のタイムアウト時間を確認します。タイムアウト時間が30秒であることがわかります。

[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
30

タイムアウト時間を10秒に変更します。

[root@server ~]# echo 10 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout

変更したタイムアウト時間を確認します。タイムアウト時間が10秒に変更されたことがわかります。

[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
10

pingを実行します。

[root@server ~]# date;ping -c 1 192.168.122.1
2022年  6月 16日 木曜日 21:35:23 JST
PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=0.384 ms

--- 192.168.122.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.384/0.384/0.384/0.000 ms

ICMPのトラッキング情報を確認します。まだ10秒たっていないので、管理テーブルにICMPのトラッキング情報が残っていることがわかります。

[root@server ~]# date;conntrack -L -p icmp
2022年  6月 16日 木曜日 21:35:24 JST
icmp     1 8 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1437 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1437 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.

ICMPのトラッキング情報を確認します。まだ10秒たっていないので、管理テーブルにICMPのトラッキング情報が残っていることがわかります。

[root@server ~]# date;conntrack -L -p icmp
2022年  6月 16日 木曜日 21:35:29 JST
icmp     1 3 src=192.168.122.216 dst=192.168.122.1 type=8 code=0 id=1437 src=192.168.122.1 dst=192.168.122.216 type=0 code=0 id=1437 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.

ICMPのトラッキング情報を確認します。タイムアウトしたので、管理テーブルからICMPのトラッキング情報が消去されたことがわかります。

[root@server ~]# date;conntrack -L -p icmp
2022年  6月 16日 木曜日 21:35:34 JST
conntrack v1.4.4 (conntrack-tools): 0 flow entries have been shown.

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ