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);
因此,如果:
那么SyncookiesFailed会增加。 否则, SyncookiesRecv会增加。 所以,如果在内核中启用了CONFIG_SYN_COOKIES ,并且你已经处于一个需要它的新的连接负载之下,那么你会期望SyncookiesSent是正的,并且SyncookiesRecv是正的(但是更less)。 事实上,看起来你唯一得到的是无效的。
我们看到类似的数字,我们认为这是因为UFW的默认规则包括丢弃无效状态的数据包,其中可能包括传出和传入的SYN Cookie。 您可能想检查您的防火墙configuration和日志,以查看是否发生意外丢弃的数据包。
或者,由于某些随机的攻击者,您可能会收到无效的SYN Cookie。 在这种情况下,我希望发送一些SYN cookie。