收到无效的SYN Cookie,但没有发送syncookie?

cat /proc/net/netstat显示:

 SyncookiesSent:0 SyncookiesRecv:0 SyncookiesFailed:34954 

收到坏的syncookies数,但系统不发送任何syncookie。我期望的是,坏的收到的sysncookies比发送的syncookiesless。 谁知道原因?

2.6.32:

 static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) { struct tcphdr *th = tcp_hdr(skb); const struct iphdr *iph = ip_hdr(skb); struct sock *nsk; struct request_sock **prev; /* Find possible connection requests. */ struct request_sock *req = inet_csk_search_req(sk, &prev, th->source, iph->saddr, iph->daddr); if (req) return tcp_check_req(sk, skb, req, prev); nsk = inet_lookup_established(sock_net(sk), &tcp_hashinfo, iph->saddr, th->source, iph->daddr, th->dest, inet_iif(skb)); if (nsk) { if (nsk->sk_state != TCP_TIME_WAIT) { bh_lock_sock(nsk); return nsk; } inet_twsk_put(inet_twsk(nsk)); return NULL; } #ifdef CONFIG_SYN_COOKIES if (!th->rst && !th->syn && th->ack) sk = cookie_v4_check(sk, skb, &(IPCB(skb)->opt)); <== check received ack. #endif return sk; } 

以下是net/ipv4/syncookies.c cookie_v4_check的相关部分:

  if (tcp_synq_no_recent_overflow(sk) || (mss = cookie_check(skb, cookie)) == 0) { NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESFAILED); goto out; } NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESRECV); 

因此,如果:

  1. 最近有一个需要SYN cookies的溢出,
  2. Cookie无法检出为有效的常规SYN数据包或SYN cookie,

那么SyncookiesFailed会增加。 否则, SyncookiesRecv会增加。 所以,如果在内核中启用了CONFIG_SYN_COOKIES ,并且你已经处于一个需要它的新的连接负载之下,那么你会期望SyncookiesSent是正的,并且SyncookiesRecv是正的(但是更less)。 事实上,看起来你唯一得到的是无效的。

我们看到类似的数字,我们认为这是因为UFW的默认规则包括丢弃无效状态的数据包,其中可能包括传出和传入的SYN Cookie。 您可能想检查您的防火墙configuration和日志,以查看是否发生意外丢弃的数据包。

或者,由于某些随机的攻击者,您可能会收到无效的SYN Cookie。 在这种情况下,我希望发送一些SYN cookie。