連線跟蹤nf conntrack tcp

2021-10-03 07:19:11 字數 1577 閱讀 9621

nf_conntrack_tcp_loose選項如果設定為0,對於未完成三次握手的流,核心連線跟蹤模組將不會為其建立conntrack結構。反之,值為0的話,將為任意收到的tcp報文建立conntrack結構。預設值為一,如下可通過proc檔案nf_conntrack_tcp_loose,獲取其當前值。

$ sudo modprobe nf_conntrack_ipv4                   

$ $ lsmod | grep conn

nf_conntrack_ipv4 16384 0

nf_conntrack 131072 1 nf_conntrack_ipv4

nf_defrag_ipv4 16384 1 nf_conntrack_ipv4

$ $ cat /proc/sys/net/netfilter/nf_conntrack_tcp_loose

1

以下tcp_init_net初始化函式,將tcp_loose初始化為一。

/* if it is set to zero, we disable picking up already established connections. */

static int nf_ct_tcp_loose __read_mostly = 1;

static int tcp_init_net(struct net *net)

對於tcp,對應的四層結構為nf_conntrack_l4proto_tcp,註冊的處理函式為tcp_packet。

const struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp =

else if (tn->tcp_loose == 0)

由以上的nf_conntrack_in函式可見,四層協議的處理函式tcp_packet(子函式tcp_new)返回負值的話,將不會為此流建立conntrack結構。

如下的state匹配處理函式state_mt,對於報文skb中連線跟蹤結構為空,並且未設定notrack標誌的連線(注意這裡並沒有建立連線結構),連線狀態為無效狀態xt_state_invalid。即以上的流將處於此狀態。

static bool state_mt(const struct sk_buff *skb, struct xt_action_param *par)

static struct xt_match state_mt_reg __read_mostly = {

.name = "state",

.family = nfproto_unspec,

.checkentry = state_mt_check,

.match = state_mt,

可通過以下的iptables命令,丟棄此類報文。

iptables -a input -i eth0 -p tcp -m state --state invalid -j drop
核心版本 5.0

Linux關閉nf conntrack模組

問題描述 伺服器負載正常,但伺服器記憶體飆公升影響了中介軟體的使用,檢視 var log messages 日誌存在大量 kernel nf conntrack table full,dropping packet 說明 nf conntrack 模組在 kernel 2.6.15 2006 01 ...

Linux下nf conntrack(最全面)

總結如下 dmesg grepnf conntrack 連線跟蹤表nf conntrack 如果輸出值中有 nf conntrack table full,dropping packet 說明伺服器nf conntrack表已經被打滿 如果伺服器上跑著iptables,必須使用的情況下 net.nf...

連線跟蹤與nat轉換

很長時間沒上來,一時興起只來剪草,卻正巧趕上開博一週年,天意如此,我且順了天,附上點近期所學東西。連線跟蹤對nat實現的輔助 乙個新建連線的資料報從物理層傳遞到網路層後,連線跟蹤會對其進行跟蹤,記錄下其連線狀態和重要資訊,從指定的內建的處理函式的優先順序enum nf ip hook priorit...