text: SYN cookie 是一種用於阻止 SYN flood 攻擊的技術。這項技術的主要發明人 Daniel J. Bernstein 將 SYN cookies 定義為“TCP 伺服器進行的對開始TCP資料包序列數字的特定選擇”。舉例來說，SYN Cookies 的應用允許伺服器當 SYN 佇列被填滿時避免丟棄連線。相反，伺服器會表現得像 SYN 佇列擴大了一樣。伺服器會返回適當的 SYN+ACK 響應，但會丟棄 SYN 佇列條目。如果伺服器接收到客戶端隨後的ACK響應，伺服器能夠使用編碼在 TCP 序號內的資訊重構 SYN 佇列條目。實現.發起一個 TCP 連線時，客戶端將一個 TCP SYN 包傳送給伺服器。作為響應，伺服器將 TCP SYN + ACK 包返回給客戶端。此資料包中有一個序號，它被 TCP 用來重新組裝資料流。根據 TCP 規範，由端點發送的第一個序號可以是由該端點決定的任何值。SYN Cookies 是根據以下規則構造的初始序號：初始 TCP 序號，也就是所謂的 "SYN cookie"，按照如下演算法得到：根據 TCP 規範，當客戶端發回 TCP ACK 包給伺服器以響應伺服器的 SYN + ACK 包時，客戶端必須使用由伺服器傳送的初始序號加1作為資料包中的確認號。伺服器接著從確認號中減去 1 以便還原向客戶端傳送的原始 SYN Cookie。接下來伺服器進行以下檢查：缺陷.SYN Cookies 的使用不與任何協議定義衝突，照理來說它該和所有的 TCP 實現相容。然而，當 SYN Cookies 使用的時候，會發生兩種值得注意的變化：首先，伺服器只能編碼八種 MSS 數值，因為只有 3 位二進位制空間可用。其次，這個伺服器必須拒絕所有的 TCP 選用項，例如大型視窗和時間戳，因為伺服器會在資訊被用其他方式儲存時丟棄 SYN 佇列條目。儘管這些限制將不可避免地導致一個不如最佳的體驗，它們的效果很少被客戶端注意到——這些改變只在被攻擊時值得注意。在這樣的情況下，犧牲 TCP 選項來保護連線一般被認為是合乎情理的。Linux核心 從 2.6.26 版本開始為 TCP 選用項加入了有限的支援，透過把它們編碼在時間戳內實現。較新的 TCP Cookie 傳輸標準被設計用來克服 SYN Cookies 的這些問題，並且在各種方面改進這套機制。不像 SYN Cookies，TCPCT 是一個 TCP 拓展並且要求兩端點都支援 TCPCT。安全考量.被設定為允許所有出站連線但對入站連線有限制的簡單防火牆一般是這樣實現的：只阻斷不必要埠的 SYN 請求。如果 SYN Cookies 被啟動了，應當小心以保證攻擊者不能使用偽造 ACK、嘗試隨機序列號的方式來繞過這樣的防火牆。因此 SYN cookies 應該按照每個埠單獨處理的方式來調節開關，這樣的話一個公共埠上的 SYN Cookies 並不會在一個私有埠上被認可。歷史.Daniel J. Bernstein 和 Eric Schenk 於 1996 年九月創造了這個技術。Jeff Weisberg 在一個月後釋出了最早的實現。
metadata.dataset: erhwenkuo/wikipedia-zhtw
metadata.title: SYN cookie
metadata.url: https://zh.wikipedia.org/wiki?curid=4400288