centos7
conntrack

conntrackコマンドの使い方

1 環境

VMware Workstation 12 Player上のゲストマシンを使っています。

[root@admin ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

[root@admin ~]# uname -r
3.10.0-514.el7.x86_64

2 事前準備

2.1 conntrackコマンドのインストール

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

2.2 firewalldの起動

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

3 コマンドオプション一覧

[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

4 トラッキング情報をリアルタイムに表示する方法(-E)

4.1 単純な使い方(-E)

conntrackコマンドを実行する。
[root@server ~]# conntrack -E

もう1つターミナルをオープンして、digコマンドを実行する。
[root@server netfilter]# dig ntp.nict.jp +short

UDPパケットのトラッキング情報が出力されたことがわかる。
[root@server ~]# conntrack -E
    [NEW] udp      17 30 src=192.168.0.100 dst=192.168.3.1 sport=36125 dport=53 [UNREPLIED] src=192.168.3.1 dst=192.168.0.100 sport=53 dport=36125
 [UPDATE] udp      17 30 src=192.168.0.100 dst=192.168.3.1 sport=36125 dport=53 src=192.168.3.1 dst=192.168.0.100 sport=53 dport=36125

デフォルトGWに対してpingを実行する。
[root@server netfilter]# ping -c 1 192.168.0.1

ICMPパケットのトラッキング情報が出力されたことがわかる。
[root@server ~]# conntrack -E
    [NEW] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=1861 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=1861
 [UPDATE] icmp     1 29 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=1861 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=1861

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

4.2.1 単純な使い方(-p tcp)

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p tcp

もう1つターミナルをオープンして、理研からファイルをダウンロードする。
[root@server netfilter]# wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso

TCPパケット(★印)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p tcp
    [NEW] tcp★    6 120 SYN_SENT src=192.168.0.100 dst=134.160.38.1 sport=51828 dport=80 [UNREPLIED] src=134.160.38.1 dst=192.168.0.100 sport=80 dport=51828
 [UPDATE] tcp★    6 60 SYN_RECV src=192.168.0.100 dst=134.160.38.1 sport=51828 dport=80 src=134.160.38.1 dst=192.168.0.100 sport=80 dport=51828
 [UPDATE] tcp★    6 432000 ESTABLISHED src=192.168.0.100 dst=134.160.38.1 sport=51828 dport=80 src=134.160.38.1 dst=192.168.0.100 sport=80 dport=51828 [ASSURED]

このとき、pingコマンドを実行しても、ICMPのトラッキング情報は出力されない。
[root@server netfilter]# ping -c 1 192.168.0.1

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

状態としては、以下のものが指定できるようです。
man conntrackより抜粋。ただし、TCPの状態とは関係がありません。あくまでconntrackが管理する状態です。

--state [NONE | SYN_SENT | SYN_RECV | ESTABLISHED | FIN_WAIT | CLOSE_WAIT | LAST_ACK | TIME_WAIT | CLOSE | LISTEN]

conntrackコマンドを実行する。SYN_SENTの状態のトラッキング情報だけに絞り込む。
[root@server ~]# conntrack -E -p tcp --state SYN_SENT

yumリポジトリを表示する。
[root@server ~]# yum clean all
[root@server ~]# yum repolist

[root@server ~]# conntrack -E -p tcp --state SYN_SENT
    [NEW] tcp      6 120 ★SYN_SENT src=192.168.0.100 dst=118.174.8.44 sport=49794 dport=80 [UNREPLIED] src=118.174.8.44 dst=192.168.0.100 sport=80 dport=49794
    [NEW] tcp      6 120 ★SYN_SENT src=192.168.0.100 dst=210.71.189.53 sport=59322 dport=80 [UNREPLIED] src=210.71.189.53 dst=192.168.0.100 sport=80 dport=59322
    [NEW] tcp      6 120 ★SYN_SENT src=192.168.0.100 dst=123.255.202.74 sport=36954 dport=80 [UNREPLIED] src=123.255.202.74 dst=192.168.0.100 sport=80 dport=36954
    [NEW] tcp      6 120 ★SYN_SENT src=192.168.0.100 dst=125.212.220.48 sport=38652 dport=80 [UNREPLIED] src=125.212.220.48 dst=192.168.0.100 sport=80 dport=38652
-以下、略-

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

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p udp

もう1つターミナルをオープンして、digコマンドを実行する。
[root@server netfilter]# dig ntp.nict.jp +short

UDPパケット(★印)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p udp
    [NEW] udp★    17 30 src=192.168.0.100 dst=192.168.3.1 sport=39885 dport=53 [UNREPLIED] src=192.168.3.1 dst=192.168.0.100 sport=53 dport=39885
 [UPDATE] udp★    17 29 src=192.168.0.100 dst=192.168.3.1 sport=39885 dport=53 src=192.168.3.1 dst=192.168.0.100 sport=53 dport=39885

このとき、pingコマンドを実行しても、ICMPのトラッキング情報は出力されない。
[root@server netfilter]# ping -c 1 192.168.0.1

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

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p icmp

もう1つターミナルをオープンして、デフォルトGWに対してpingコマンドを実行する。
[root@server netfilter]# ping -c 1 192.168.0.1

ICMPパケット(★印)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p icmp
    [NEW] icmp★   1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=1904 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=1904
 [UPDATE] icmp★   1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=1904 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=1904

このとき、dig コマンドを実行しても、DNSのトラッキング情報は出力されない。
[root@server netfilter]# dig ntp.nict.jp +short

4.5 送信元IPアドレスで絞り込む方法(-s)

conntrackコマンドを実行する。
192.168.0.100はdigコマンドやpingコマンドを実行しているホストのIPアドレスです。
[root@server ~]# conntrack -E -s 192.168.0.100

もう1つターミナルをオープンして、digコマンド、pingコマンドを実行する。
[root@server netfilter]# dig ntp.nict.jp +short
[root@server netfilter]# ping -c 1 192.168.0.1

送信元IPアドレスがdigコマンド、pingコマンドを実行したホストのIPアドレスであることがわかる(★印)。
[root@server ~]# conntrack -E -s 192.168.0.100
    [NEW] udp      17 30 ★src=192.168.0.100 dst=192.168.3.1 sport=54967 dport=53 [UNREPLIED] src=192.168.3.1 dst=192.168.0.100 sport=53 dport=54967
 [UPDATE] udp      17 30 ★src=192.168.0.100 dst=192.168.3.1 sport=54967 dport=53 src=192.168.3.1 dst=192.168.0.100 sport=53 dport=54967
    [NEW] icmp     1 30 ★src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2062 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2062
 [UPDATE] icmp     1 30 ★src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2062 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2062

4.6 宛先UDPポート番号で絞り込む方法

conntrackコマンドを実行する。なお、123はNTPのポート番号です。
[root@server ~]# conntrack -E -p udp --dport 123

もう1つターミナルをオープンして、chronydを再起動する
[root@server netfilter]# systemctl restart chronyd

宛先UDPポート番号が123(★印)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p udp --dport 123
    [NEW] udp      17 30 src=192.168.0.100 dst=59.106.180.168 sport=35691 ★dport=123 [UNREPLIED] src=59.106.180.168 dst=192.168.0.100 sport=123 dport=35691
 [UPDATE] udp      17 30 src=192.168.0.100 dst=59.106.180.168 sport=35691 ★dport=123 src=59.106.180.168 dst=192.168.0.100 sport=123 dport=35691
    [NEW] udp      17 30 src=192.168.0.100 dst=129.250.35.250 sport=36971 ★dport=123 [UNREPLIED] src=129.250.35.250 dst=192.168.0.100 sport=123 dport=36971
 [UPDATE] udp      17 30 src=192.168.0.100 dst=129.250.35.250 sport=36971 ★dport=123 src=129.250.35.250 dst=192.168.0.100 sport=123 dport=36971

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

時間表示のオプションを指定して、conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p icmp -o timestamp

もう1つターミナルをオープンして、デフォルトGWに対してpingコマンドを実行する。
[root@server netfilter]# ping -c 1 192.168.0.1

ICMPパケットのトラッキング情報が確認できる。NEWからDESTROYになる時間は約30秒(★2と★1の差分)であることがわかる。
[root@server ~]# conntrack -E -p icmp  -o timestamp
[1505478807.974367]★1      [NEW] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2420 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2420
[1505478808.030508]      [UPDATE] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2420 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2420
[1505478838.030705]★2   [DESTROY] icmp     1 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2420 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2420

4.8 特定の状態だけを表示する方法(-e)

4.8.1 NEWの状態だけを表示する方法

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p icmp -e NEW

もう1つターミナルをオープンして、デフォルトGWに対してpingコマンドを3回実行する。
[root@server netfilter]# ping -c 1 192.168.0.1
[root@server netfilter]# ping -c 1 192.168.0.1
[root@server netfilter]# ping -c 1 192.168.0.1

NEW状態(★)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p icmp -e NEW
  ★[NEW] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2353 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2353
  ★[NEW] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2354 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2354
  ★[NEW] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2355 [UNREPLIED] src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2355

4.8.2 UPDATESの状態だけを表示する方法

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p icmp -e UPDATES

もう1つターミナルをオープンして、デフォルトGWに対してpingコマンドを3回実行する。
[root@server netfilter]# ping -c 1 192.168.0.1
[root@server netfilter]# ping -c 1 192.168.0.1
[root@server netfilter]# ping -c 1 192.168.0.1

UPDATES状態(★)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p icmp -e UPDATES
 ★[UPDATE] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2379 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2379
 ★[UPDATE] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2380 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2380
 ★[UPDATE] icmp     1 30 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2381 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2381

4.8.3 DESTROYの状態だけを表示する方法

conntrackコマンドを実行する。
[root@server ~]# conntrack -E -p icmp -e DESTROY

もう1つターミナルをオープンして、デフォルトGWに対してpingコマンドを実行する。
[root@server netfilter]# ping -c 1 192.168.0.1

DESTROY状態(★)のトラッキング情報が確認できる。
[root@server ~]# conntrack -E -p icmp -e DESTROY
★[DESTROY] icmp     1 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2403 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2403

5 トラッキング情報を表示する方法(-L)

テーブル(conntrack,expect)に保存されているトラッキング情報を表示する方法について説明します。

5.1 単純な使い方

テーブルの実体は/proc/net/nf_conntrackです。現在2つのトラッキング情報が格納されていることがわかります。
[root@server ~]# cat /proc/net/nf_conntrack
ipv4     2 tcp      6 431962 ESTABLISHED src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49898 src=192.168.0.5 dst=192.168.0.100 sport=49898 dport=22 [ASSURED] mark=0 zone=0 use=2
ipv4     2 tcp      6 299 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49897 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49897 [ASSURED] mark=0 zone=0 use=2

-Lオプションを指定して、conntrackコマンドを実行する。テーブルに保存されているトラッキング情報が2つであることがわかる。
[root@server ~]# conntrack -L
tcp      6 299 ESTABLISHED src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49898 src=192.168.0.5 dst=192.168.0.100 sport=49898 dport=22 [ASSURED] mark=0 use=1
tcp      6 431961 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49897 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49897 [ASSURED] mark=0 use=1
conntrack v1.4.4 (conntrack-tools): 2 flow entries have been shown.

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

conntrackテーブルにTCPのトラッキング情報が2個(★)記録されていることがわかる。
[root@server ~]# conntrack -L -p tcp
tcp      6 299 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49308 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49308 [ASSURED] mark=0 use=1
tcp      6 431995 ESTABLISHED src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49311 src=192.168.0.5 dst=192.168.0.100 sport=49311 dport=22 [ASSURED] mark=0 use=1
conntrack v1.4.4 (conntrack-tools): ★2 flow entries have been shown.

6 トラッキング情報を消去する方法(-F)

トラッキング情報は、ある時間経過すると自動的にテーブルから消去されますが、
ここでは、conntrackテーブルからトラッキング情報を能動的(-F)に消去する方法について説明します。

digコマンド、pingコマンドを実行して、conntrackテーブルにトラッキング情報を記録する。
[root@server ~]# dig ntp.nict.jp +short
[root@server ~]# ping -c 1 192.168.0.1

トラッキング情報を確認する。
直前に実行したdigコマンドのUDPパケット(★1)、pingコマンドのICMPパケット(★2)がconntrackテーブルに記録されたことがわかる。
[root@server ~]# conntrack -L
tcp      6 299 ESTABLISHED src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49898 src=192.168.0.5 dst=192.168.0.100 sport=49898 dport=22 [ASSURED] mark=0 use=1
icmp★2  1 27 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=1207 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=1207 mark=0 use=1
udp★1   17 24 src=192.168.0.100 dst=192.168.3.1 sport=39356 dport=53 src=192.168.3.1 dst=192.168.0.100 sport=53 dport=39356 mark=0 use=1
tcp      6 431973 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49897 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49897 [ASSURED] mark=0 use=1

  (*) 左から2列目の数字 : プロトコル番号を表します。TCP=6,UDP=17,ICMP=1
      左から3列目の数字 : conntrackテーブルからトラッキング情報を消去するまでの時間(秒)を表します。
                         つまり、ICMPは27秒、UDPは24秒経過すると、conntrackテーブルから消去されます。

conntrackテーブルのトラッキング情報を消去する。
[root@server ~]# conntrack -F
conntrack v1.4.4 (conntrack-tools): connection tracking table has been emptied.

conntrackテーブルを確認する。UDPやICMPパケットのトラッキング情報が消去されたことわかる。
[root@server ~]# conntrack -L
tcp      6 299 ESTABLISHED src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49898 src=192.168.0.5 dst=192.168.0.100 sport=49898 dport=22 [ASSURED] mark=0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.

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

デフォルトGWに対してpingを連続実行する。適当な時間(10秒程度)で停止する。
[root@server ~]# while sleep 1 ; do ping -c 1 192.168.0.1 ; done

ICMPのトラッキング情報の個数を確認する。conntrackテーブルに12個(★)記録されていることがわかる。
[root@server ~]# conntrack -L -p icmp
-中略-
conntrack v1.4.4 (conntrack-tools): ★12 flow entries have been shown.

conntrackテーブルからICMPのトラッキング情報だけ消去する。12個(★)消去できたことがわかる。
[root@server ~]# conntrack -D -p icmp
-中略-
conntrack v1.4.4 (conntrack-tools): ★12 flow entries have been deleted.

conntrackテーブルを確認する。conntrackテーブルにICMPのトラッキング情報が存在しない(★)ことがわかる。
[root@server ~]# conntrack -L -p icmp
conntrack v1.4.4 (conntrack-tools): ★0 flow entries have been shown.

10 コネクショントラッキングのパラメータ

10.1 パラメータ一覧

[root@server ~]# ls /proc/sys/net/netfilter/
nf_conntrack_acct                  nf_conntrack_frag6_timeout    nf_conntrack_tcp_max_retrans          nf_conntrack_tcp_timeout_time_wait
nf_conntrack_buckets               nf_conntrack_generic_timeout  nf_conntrack_tcp_timeout_close        nf_conntrack_tcp_timeout_unacknowledged
nf_conntrack_checksum              nf_conntrack_helper           nf_conntrack_tcp_timeout_close_wait   nf_conntrack_timestamp
nf_conntrack_count                 nf_conntrack_icmp_timeout     nf_conntrack_tcp_timeout_established  nf_conntrack_udp_timeout
nf_conntrack_events                nf_conntrack_icmpv6_timeout   nf_conntrack_tcp_timeout_fin_wait     nf_conntrack_udp_timeout_stream
nf_conntrack_events_retry_timeout  nf_conntrack_log_invalid      nf_conntrack_tcp_timeout_last_ack     nf_log
nf_conntrack_expect_max            nf_conntrack_max              nf_conntrack_tcp_timeout_max_retrans
nf_conntrack_frag6_high_thresh     nf_conntrack_tcp_be_liberal   nf_conntrack_tcp_timeout_syn_recv
nf_conntrack_frag6_low_thresh      nf_conntrack_tcp_loose        nf_conntrack_tcp_timeout_syn_sent

10.2 conntrackテーブルに記録できるログ(トラッキング情報)の数を変更する方法(nf_conntrack_max)

conntrackテーブルに記録されているログの数を確認する。現在は2個(★)記録されていることがわかる。
[root@server ~]# conntrack -L
-中略-
conntrack v1.4.4 (conntrack-tools): ★2 flow entries have been shown.

conntrackテーブルに記録できるログの数を確認する。31248個まで記録できることがわかる。
[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
31248

記録できるログの数を5個に変更する。
[root@server ~]# echo 5 > /proc/sys/net/netfilter/nf_conntrack_max
[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
5

デフォルトGWに対してpingコマンドを1秒間隔で実行する。
[root@server ~]# while sleep 1 ; do ping -c 1 192.168.0.1 ; done

もう1つターミナルを開く。ログの数が5個(★)に抑えられていることがわかる。
[root@server ~]# conntrack -L
icmp     1 29 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2034 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2034 mark=0 use=1
tcp      6 431999 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49308 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49308 [ASSURED] mark=0 use=1
icmp     1 28 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2032 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2032 mark=0 use=1
tcp      6 431999 ESTABLISHED src=192.168.0.5 dst=192.168.0.100 sport=49311 dport=22 src=192.168.0.100 dst=192.168.0.5 sport=22 dport=49311 [ASSURED] mark=0 use=1
icmp     1 25 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2024 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2024 mark=0 use=1
conntrack v1.4.4 (conntrack-tools): ★5 flow entries have been shown.

10.3 テーブルに記録されている時間を変更する方法

ログがテーブルに記録されている時間を指定するパラメータとして、nf_conntrack_icmp_timeout,nf_conntrack_udp_timeout等があります。
ここでは、nf_conntrack_icmp_timeoutを変更してみます。

ICMPのログがconntrackテーブルに記録されている時間が30秒であることがわかる。
つまり、30秒経過すると、conntrackテーブルからICMPのログが消去されます。
[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
30

30秒から10秒に変更する。
[root@server ~]# echo 10 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
10

デフォルトGWに対してpingコマンドを実行する。
[root@server ~]# ping -c 1 192.168.0.1

もう1つターミナルをオープンする(というか、あらかじめオープンしてコマンド実行の準備をしておく)
[root@server ~]# date;conntrack -L -p icmp
2017年  9月 16日 土曜日 ★19:49:32 JST
icmp     1 9 src=192.168.0.100 dst=192.168.0.1 type=8 code=0 id=2219 src=192.168.0.1 dst=192.168.0.100 type=0 code=0 id=2219 mark=0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.

-中略-

conntrackテーブルからICMPのログが10秒後(★)に消去されたことがわかる。
[root@server ~]# date;conntrack -L -p icmp
2017年  9月 16日 土曜日 ★19:49:42 JST
conntrack v1.4.4 (conntrack-tools): 0 flow entries have been shown.

X 参考情報

A Deep Dive into Iptables and Netfilter Architecture
The conntrack-tools user manual
netfilters connection tracking subsystem
Netfilter Connmark
iptablesのNOTRACKターゲットを使う
conntrack がロードされたサーバで LVS-DR を構成する場合の注意点
Connection tracking
improvements to conntrack table overflow handling
Netfilter's conntrack-tools

Y メモ

       client ------------------------------- server
     192.168.0.110:22222               192.168.0.100:11111 

サーバ(server)側の設定
[root@server ~]# iptables -I OUTPUT -p tcp --tcp-flags ALL RST -j DROP
[root@server ~]# iptables -L OUTPUT --line-numbers
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/RST

[root@server ~]# tcpdump -i eth0 -S port 11111 -nn

[root@client ~]# hping3 -I eth0 -c 1 -A -L 1000 -s 22222 -p 11111 server
[root@server ~]# hping3 -I eth0 -c 1 -d 512 -P -M 1000 -s 11111 -p 22222 client