轉自:http://www.centoscn.com/CentOS/config/2013/0804/992.html
vim /etc/sysctl.conf
1、net.ipv4.tcp_max_syn_backlog = 65536
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於超過128M內存的系統而言,缺省值是1024,低於128M小內存的系統則是128。
SYN Flood攻擊利用TCP協議散布握手的缺陷,偽造虛假源IP地址發送大量TCP-SYN半打開連接到目標系統,最終導致目標系統Socket隊列資源耗盡而無法接受新的連接。為了應付這種攻擊,現代Unix系統中普遍采用多連接隊列處理的方式來緩沖(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全連接應用(Connect()和Accept() ),是用另一個隊列單獨存放半打開連接。
這種雙隊列處理方式和其他一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效的緩解小規模的SYN Flood攻擊(事實證明<1000p/s)加大SYN隊列長度可以容納更多等待連接的網絡連接數,一般遭受SYN Flood攻擊的網站,都存在大量SYN_RECV狀態,所以調大tcp_max_syn_backlog值能增加抵抗syn攻擊的能力。
2、net.core.netdev_max_backlog = 32768
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
3、net.core.somaxconn = 32768
調整系統同時發起並發TCP連接數,可能需要提高連接儲備值,以應對大量突發入局連接請求的情況。如果同時接收到大量連接請求,使用較大的值會提高受支持的暫掛連接的數量,從而可減少連接失敗的數量。大的偵聽隊列對防止DDoS攻擊也會有所幫助。掛起請求的最大數量默認是128。
===================================================================
查看實時內核實時丟包命令:
netstat-su
===================================================================
位置:/proc/sys/
4、net.core.wmem_default = 8388608
該參數指定了發送套接字緩沖區大小的缺省值(以字節為單位)
5、net.core.rmem_default = 8388608
該參數指定了接收套接字緩沖區大小的缺省值(以字節為單位)
6、net.core.rmem_max = 16777216
該參數指定了接收套接字緩沖區大小的最大值(以字節為單位)
7、net.core.wmem_max = 16777216
該參數指定了發送套接字緩沖區大小的最大值(以字節為單位)
8、net.ipv4.tcp_timestamps = 0
Timestamps可以防范那些偽造的sequence號碼。一條1G的寬帶線路或許會重遇到帶out-of-line數值的舊sequence號碼(假如它是由於上次產生的)。時間戳能夠讓內核接受這種“異常”的數據包。這里需要將其關掉,以提高性能。
9、net.ipv4.tcp_synack_retries = 2
對於遠端的連接請求SYN,內核會發送SYN+ACK數據報,以確認收到上一個SYN連接請求包。這是所謂的三次握手(threeway handshake)機制的第二個步驟。這里決定內核在放棄連接之前所送出的SYN+ACK數目。不應該大於255,默認值是5,對應於180秒左右時間。(可以根據tcp_syn_retries來決定這個值)
10、net.ipv4.tcp_syn_retries = 2
對於一個新建連接,內核要發送多少個SYN連接請求才決定放棄。不應該大於255,默認值是5,對應於180秒左右時間。(對於大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1 決定的)
11、net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT Sockets的快速回收,默認為0,表示關閉。
#net.ipv4.tcp_tw_len = 1
12、net.ipv4.tcp_tw_reuse = 1
表示開啟重用,允許將TIME-WAIT Sockets重新用於新的TCP連接,默認為0,表示關閉。這個對快速重啟動某些服務,而啟動后提示端口已經被使用的情形非常有幫助。
13、net.ipv4.tcp_mem = 94500000 915000000 927000000
tcp_mem有3個INTEGER變量:low, pressure, high
low:當TCP使用了低於該值的內存頁面數時,TCP沒有內存壓力,TCP不會考慮釋放內存。(理想情況下,這個值應與指定給tcp_wmem的第2個值相匹配。這第2個值表明,最大頁面大小乘以最大並發請求數除以頁大小 (131072*300/4096)
pressure:當TCP使用了超過該值的內存頁面數量時,TCP試圖穩定其內存使用,進入pressure模式,當內存消耗低於low值時則退出pressure狀態。(理想情況下這個值應該是TCP可以使用的總緩沖區大小的最大值(204800*300/4096)
high:允許所有TCP Sockets用於排隊緩沖數據報的頁面量。如果超過這個值,TCP連接將被拒絕,這就是為什么不要令其過於保守(512000*300/4096)的原因了。在這種情況下,提供的價值很大,它能處理很多連接,是所預期的2.5倍;或者使現有連接能夠傳輸2.5倍的數據。
一般情況下這些值是在系統啟動時根據系統內存數量計算得到的。
14、net.ipv4.tcp_max_orphans = 3276800
系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬於任何進程的連接會被立即reset,並同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的DoS攻擊﹐千萬不要依賴這個或是人為的降低這個限制
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
15、net.ipv4.ip_local_port_range = 1024 65535
將系統對本地端口范圍限制設置為1024~65000之間
16、net.ipv4.ip_conntrack_max = 10000
設置系統對最大跟蹤的TCP連接數的限制(CentOS 5.6無此參數)
