| tcp_syn_retries :INTEGER 默認值是5 對 于一個新建連接,內核要發(fā)送多少個 SYN 連接請求才決定放棄。不應該大于255,默認值是5,對應于180秒 左右時間。(對于大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個 值僅僅是針對對外的連接,對進來的連接,是 由tcp_retries1 決定 的)
tcp_synack_retries :INTEGER 默認值是5 對于遠端的連接請求SYN,內核會發(fā)送SYN + ACK數據報,以確認收到上一個 SYN連接請求包。 這是所謂的三次握手( threeway handshake)機制的第二個步驟。這里決定內核在 放棄連接之前所送出的 SYN+ACK 數目。不應該大于255,默認值是5,對應于180秒左右時間。(可以根 據上面的 tcp_syn_retries 來決定這個值)
tcp_keepalive_time :INTEGER 默認值是7200(2小時) 當keepalive打開的情況下,TCP發(fā)送keepalive消息的頻率。(由于目前網絡攻擊等因素,造成了利用這個進行的攻擊很頻繁,曾經也有cu的朋友提到過,說如果2邊建立了連接,然后不發(fā)送任何數據或者rst/fin消息,那么持續(xù)的時間是不是就是2小時,空連接攻擊? tcp_keepalive_time就是預防此情形的.我個人在做nat服務的時候的修改值為1800秒)
tcp_keepalive_probes:INTEGER 默認值是9 TCP發(fā)送keepalive探測以確定該連接已經斷開的次數。(注意:保 持連接僅在SO_KEEPALIVE套接字選項被打開是才發(fā)送.次數默認不需要修改,當然根據情形也可以適當地縮短此 值.設置為5比較合適)
tcp_keepalive_intvl:INTEGER 默認值為75 探測消息發(fā)送的頻率,乘以tcp_keepalive_probes就 得到對于從開始探測以來沒有響應的連接殺除的時間。默認值為75秒, 也就是沒有活動的連接將在大約11分鐘以后將被丟棄。(對于普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類服務器需要改小該值,15是個比較合適的值)
tcp_retries1 :INTEGER 默認值是3 放 棄回應一個TCP連接請求前﹐需要進行多少次重試。RFC 規(guī)定最低的數值是3﹐這也是默認值 ﹐根據RTO的值大約在3秒 - 8分鐘之間。(注意:這個值同時還決定進入的syn連接)
tcp_retries2 :INTEGER 默認值為15 在丟棄激活(已 建立通訊狀況)的TCP連接之前﹐需要進行 多少次重試。默認值為15,根據RTO的值來決定,相當于13-30分鐘(RFC1122規(guī)定,必須大于100秒).(這個值根據目前的網絡設置,可以適當地改小,我的網絡內修改為了5)
tcp_orphan_retries :INTEGER 默認值是7 在 近端丟棄TCP連接之前﹐要進行多少次重試。默認值是7個﹐相當于 50秒 - 16分鐘﹐視 RTO 而定。如果您的系統是負載 很大的web服務器﹐那么也許需要降低該值﹐這類 sockets 可能會耗費大量的資源。另外參的考 tcp_max_orphans 。(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網絡環(huán)境中降低該值 為3)
tcp_fin_timeout :INTEGER 默認值 是 60 對 于本端斷開的socket連接,TCP保持 在FIN-WAIT-2狀態(tài)的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。默 認值為 60 秒。過去在2.2版本的內核中是 180 秒。您可以設置該值﹐但需要注意﹐如果您的機器為負載很重的web服務器﹐您可能 要冒內存被大量無效數據報填滿的風險﹐FIN-WAIT-2 sockets 的危險性低于 FIN-WAIT-1 ﹐因為它們最多只吃 1.5K 的 內存﹐但是它們存在時間更長。另外參考 tcp_max_orphans。(事實 上做NAT的時候,降低該值也是好處顯著的,我本人的網絡環(huán)境中降低該值為30)
tcp_max_tw_buckets :INTEGER 默認值是180000 系 統在同時所處理的最大 timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除并且顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的 DoS 攻擊﹐千萬不要人為的降低這個限制﹐不過﹐如果網絡條件需要比默認值更多﹐則可以提高它(或 許還要增加內存)。(事實上做NAT的 時候最好可以適當地增加該值)
tcp_tw_recycle :BOOLEAN 默認值是0 打開快速 TIME-WAIT sockets 回 收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議打開它)
? tcp_tw_reuse:BOOLEAN 默認值是0 該文件表示是否允許重新應用處于TIME-WAIT狀 態(tài)的socket用于新的TCP連接(這個 對快速重啟動某些服務,而啟動后提示端口已經被使用的情形非常有幫助)
tcp_max_orphans :INTEGER 缺省值 是8192 系統所能處理不屬于任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制(這個值Redhat AS版本中設置為32768,但是很多防火墻修改的時候,建議該值修改為2000)
tcp_abort_on_overflow :BOOLEAN 缺省值 是0 當 守護進程太忙而不能接受新的連接,就象對方發(fā)送reset消息,默認值是false。這意味著當溢出的原因是因為一個偶然的猝發(fā),那么連接將恢復狀態(tài)。只有在你確信守護進程真的不能完 成連接請求時才打開該選項,該選項會影響客戶的使用。(對 待已經滿載的sendmail,apache這類服務的時候,這 個可以很快讓客戶端終止連接,可以給予服務程序處理已有連接的緩沖機會,所以很多防火墻上推薦打開它)
tcp_syncookies :BOOLEAN 默認值是0 只 有在內核編譯時選擇了CONFIG_SYNCOOKIES時才會發(fā)生作用。當出現syn等候隊列出現溢出時象對方發(fā)送syncookies。 目的是為了防止syn flood攻擊。 注 意:該選項千萬不能用于那些沒有收到攻擊的高負載服務器,如果在日志中出現synflood消息, 但是調查發(fā)現沒有收到synflood攻擊,而是合法用戶的連接負載過高的原因,你應該調整其它參 數來提高服務器性能。參考: tcp_max_syn_backlog tcp_synack_retries tcp_abort_on_overflow syncookie嚴 重的違背TCP協議,不允許使用TCP擴 展,可能對某些服務導致嚴重的性能影響(如SMTP轉 發(fā))。(注意,該實現與BSD上面使用的tcp proxy一樣,是違反了RFC中關于tcp連接的三次握手實現的,但是對于防御syn-flood的確很有用.)
tcp_stdurg :BOOLEAN 默認值為0 使 用 TCP urg pointer 字段中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 打開它﹐或會 導致不能和它們正確溝通。
? tcp_max_syn_backlog :INTEGER 對于那些依然還未獲得客戶端確認的連接請求﹐需要保存在隊列中最大數目。對于超過 128Mb 內存的系統﹐默認值是 1024 ﹐低于 128Mb 的則為 128。如果 服務器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大于 1024﹐最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE ﹐以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ﹐并且編進核心之內。(SYN Flood攻擊利用TCP協 議散布握手的缺陷,偽造虛假源IP地址發(fā)送大量TCP-SYN半 打開連接到目標系統,最終導致目標系統Socket隊列資源耗 盡而無法接受新的連接。為了應付這種攻擊,現代Unix系統中普遍采用多連接隊列處理的方式來緩沖(而不是解決)這種攻擊,是用一個基本隊列處理正常的 完 全連接應用(Connect()和Accept() ), 是用另一個隊列單獨存放半打開連接。這種雙隊列處理方式和其他一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效的緩解小規(guī)模的SYN Flood攻擊(事實證明<1000p/s)加大SYN隊列長度可以容納更 多等待連接的網絡連接數,所以對Server來說可以考慮增大該值.)
tcp_window_scaling :INTEGER 缺省值為1 該 文件表示設置tcp/ip會話的滑動窗口大小是否可變。參數值為布爾值,為1時 表示可變,為0時表示不可變。tcp/ip通 常使用的窗口最大可達到 65535 字節(jié),對于高速網絡,該值可能太小,這時候如果啟用了該功 能,可以使tcp/ip滑動窗口大小增大數個數量級,從而提高數據傳輸的能力(RFC 1323)。(對普通地百M網絡而言,關閉會降低開銷,所以如果不是高速網絡,可以考慮設置為0)
tcp_timestamps :BOOLEAN 缺省值為1 Timestamps 用在其它一些東西中﹐可以防范那些偽造的 sequence 號碼。一條1G的寬帶線路或許會重遇到帶 out-of-line數值的舊sequence 號 碼(假如它是由于上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。(該文件表示是否啟用以一種比超時重發(fā)更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項。)
tcp_sack :BOOLEAN 缺省值為1 使 用 Selective ACK﹐它可以用來查找特定的遺失的數據報--- 因此有助 于快速恢復狀態(tài)。該文件表示是否啟用有選擇的應答(Selective Acknowledgment), 這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓發(fā)送者只發(fā)送丟失的報文段)。(對于廣域網通信來說這個選項應該啟用,但是這會增加 對 CPU 的占用。)
tcp_fack :BOOLEAN 缺省值為1 打 開FACK擁塞避免和快速重傳功能。(注 意,當tcp_sack設置為0的時候,這個值即使設置為1也無效)
tcp_dsack :BOOLEAN 缺省值為1 允 許TCP發(fā)送"兩個完全相同"的SACK。
tcp_ecn :BOOLEAN 缺省值為0 打開TCP的直接擁塞通告功能。
tcp_reordering :INTEGER 默認值是3 TCP流中重排序的數據報最大數量 。 (一般 有看到推薦把這個數值略微調整大一些,比如5)
tcp_retrans_collapse :BOOLEAN 缺省值為1 對于某些有bug的打印機提供針對其bug的兼容性。(一般不 需要這個支持,可以關閉它)
tcp_wmem(3個INTEGER變量): min, default, max min:為TCP socket預 留用于發(fā)送緩沖的內存最小值。每個tcp socket都可以在建議以后都可以使用它。默認值為4096(4K)。
default:為TCP socket預留用于發(fā)送緩沖的內存數量,默認情況下該值會影響其它協議使用的net.core.wmem_default 值, 一般要低于net.core.wmem_default的值。 默認值為16384(16K)。
max: 用于TCP socket發(fā)送緩沖的內存最大值。該值不會影響net.core.wmem_max,"靜態(tài)"選擇參數SO_SNDBUF則不受該值影響。默認值為131072(128K)。(對于服務器而言,增加這 個參數的值對于發(fā)送數據很有幫助,在我的網絡環(huán)境中,修 改為了51200 131072 204800)
tcp_rmem (3個INTEGER變量): min, default, max min:為TCP socket預留用于接收緩沖的內存數量,即使在內存出現緊張情況 下tcp socket都至少會有這么多數量的內存用于接收緩沖,默認值為8K。
default: 為TCP socket預留用于接收緩沖的內存數量,默認情況下該值影響其它協議使用的 net.core.wmem_default 值。 該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默認值情況下,TCP窗口大小為65535。默認值為87380
max: 用于TCP socket接收緩沖的內存最大值。該值不會影響 net.core.wmem_max,"靜態(tài)"選擇參數 SO_SNDBUF則不受該值影響。默認 值為 128K。默認值為87380*2 bytes。(可以看出,.max的 設置最好是default的兩倍,對于NAT來說主要該增加它,我的網絡里為 51200 131072 204800)
tcp_mem(3個INTEGER變量):low, pressure, high low:當TCP使用了低于該值的內存頁面數時,TCP不會考慮釋放內存。(理想情況下,這個值應與指定給 tcp_wmem 的 第 2 個值相匹配 - 這第 2 個值表明,最大頁面大小乘以最大并發(fā)請求數除以頁大小 (131072 * 300 / 4096)。 )
pressure:當TCP使 用了超過該值的內存頁面數量時,TCP試圖穩(wěn)定其內存使用,進入pressure模式,當內存消耗低于low值時則退出pressure狀態(tài)。(理想情況下這個值應該是 TCP 可以使用的總緩沖 區(qū)大小的最大值 (204800 * 300 / 4096)。 )
high:允許所有tcp sockets用于排隊緩沖數據報的頁面量。(如果超過這個值,TCP 連接將被拒絕,這就是為什 么不要令其過于保守 (512000 * 300 / 4096) 的原因了。 在這種情況下,提供的價值很大,它能處理很多連接,是所預期的 2.5 倍;或者使現有連接能夠傳輸 2.5 倍的數 據。 我的網絡里為192000 300000 732000)
一般情況下這些值是在系統啟動時根據系統內存數量計算得到的。
tcp_app_win : INTEGER 默認值是31 保 留max(window/2^tcp_app_win, mss)數量的窗口由于應用緩沖。當為0時表示不需要緩沖。
tcp_adv_win_scale : INTEGER 默認值為2 計算緩沖開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如 果tcp_adv_win_scale <= 0)。
? tcp_rfc1337 :BOOLEAN 缺省值為0 這個開關可以啟動對于在RFC1337中描述的"tcp 的time-wait暗殺危機"問題的修復。啟用后,內核 將丟棄那些發(fā)往time-wait狀態(tài)TCP套 接字的RST 包.
? tcp_low_latency : BOOLEAN 缺省值為0 允許 TCP/IP 棧適應在高吞吐量情況下低延時的情況;這個選項一般情形是的禁用。(但在構建Beowulf 集群的時候,打開它很有幫助)
? tcp_westwood :BOOLEAN 缺省值為0 啟用發(fā)送者端的擁塞控制算法,它可以維護對吞吐量的評估,并 試圖對帶寬的整體利用情況進行優(yōu)化;對于 WAN 通信來說應該啟用這個選項。
? tcp_bic :BOOLEAN 缺省值為0 為快速長距離網絡啟用 Binary Increase Congestion;這樣可以更好地利用以 GB 速 度進行操作的鏈接;對于 WAN 通信應該啟用這個選項。 ? ?
? # 以下一段為抵抗syn flood攻擊,平時建 議關閉 sysctl -w net.ipv4.tcp_syncookies=1????????????? # tcp syncookie,默認關閉 sysctl -w net.ipv4.tcp_max_syn_backlog=1280?? # syn隊列,默認1024,> 1280可能工作不穩(wěn)定,需要修改內核源碼參數 sysctl -w net.ipv4.tcp_synack_retries=2???????????? # syn-ack握手狀態(tài)重試次數,默 認5,遭受syn-flood攻擊時改為1或2 sysctl -w net.ipv4.tcp_syn_retries=2????????????????? # 外向syn握 手重試次數,默認4
?
? # 以下一段為應對tcp connect連接耗盡 攻擊,如果開啟iptables connlimit模塊可禁用 # 有嚴重連接性能影響和不穩(wěn)定因素,慎用 sysctl -w tcp_tw_recycle=1?????????????????????????? # 默認0,tw快速回收 sysctl -w tcp_tw_reuse=1???????????????????????????? # 默認0,tw重用 sysctl -w tcp_keepalive_intvl=60??????????????????? # 默認75,tcp keeplive探測輪詢時間 sysctl -w tcp_keepalive_probes=3????????????????? # 默認9,tcp keeplive探測輪詢次數 sysctl -w tcp_keepalive_time=1800??????????????? # 默認7200,tcp keeplive時間 sysctl -w tcp_fin_timeout=30??????????????????????? # 默認60,tcp fin狀態(tài)超時時間 #sysctl -w net.ipv4.tcp_retries1=2???????????????????? # tcp連接重傳參數,慎用 #sysctl -w net.ipv4.tcp_retries2=8
? sysctl -w net.ipv4.ip_conntrack_max=65535????????? # 增大iptables狀 態(tài)跟蹤表 |