1, 最佳化網路裝置接收隊列
net.core.netdev_max_backlog=3000
該檔案表示在每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。
預設值:Red Hat Linux release 9 (Shrike)預設為300
rhel5 預設為1000
建議值為3000
2, net.ipv4.conf.lo.accept_redirects
accept_redirects:該參數位於 /proc/sys/net/ipv4/conf/DEV/accept_redirects (DEV表示具體的網路介面),如果你的主機所在的網段中有兩個路由器,你將其中一個設定成了預設網關,但是該網關在收到你的ip包時發現該ip包必須經 過另外一個路由器,這時這個路由器就會給你發一個所謂的“重新導向”icmp包,告訴將ip包轉寄到另外一個路由器。參數值為布爾值,1表示接收這類重新導向 icmp 資訊,0表示忽略。在充當路由器的linux主機上預設值為0,在一般的linux主機上預設值為1。建議將其改為0,或者使用“安全重新導向”(見下文) 以消除安全性隱患。
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
3, 開啟TIME-WAIT通訊端重用功能,對於存在大量串連的Web伺服器非常有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1
10) /proc/sys/net/ipv4/tcp_tw_recyle
開啟快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求,請不要隨
意修改這個值。
預設設定:0
11) /proc/sys/net/ipv4/tcp_tw_reuse
該檔案表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP串連。
預設設定:0
下邊的命令用來對串連數量非常大的伺服器進行調優.
·對於同時支援很多已連線的服務器,新的串連可以重新使用TIME-WAIT通訊端. 這對於Web伺服器非常有效:
如果你使用該命令,還要啟動TIME-WAIT 通訊端狀態的快速迴圈功能:
圖Figure 10-7顯示出將這些功能啟用,串連數量明顯降低.因為每個TCP傳輸都包含遠程用戶端的協議資訊緩衝,所以有利於提高效能.緩衝中存放round-trip時間、最大segment大小、擁塞視窗的資訊。
4, 減少處於FIN-WAIT-2串連狀態的時間,使系統可以處理更多的串連。
net.ipv4.tcp_fin_timeout=30
tcp_fin_timeout:在一個tcp會話過程中,在會話結束時,A首先向B發送一個fin包,
在獲 得B的ack確認包後,A就進入FIN WAIT2狀態等待B的fin包然後給B發ack確認包。
這個參數就是用來設定A進入FIN WAIT2狀態等待對方fin包的逾時時間。
如果時間到了仍未收到對方的fin包就主動釋放該會話。
參數值為整數,單位為秒,預設為180秒
對於本端斷開的socket串連,TCP保持在FIN-WAIT-2狀態的時間。對方可能
會中斷連線或一直不結束串連或不可預料的進程死亡。預設值為 60 秒。過去在
2.2版本的核心中是 180 秒。您可以設定該值,但需要注意,如果您的機器為負
載很重的web伺服器,您可能要冒記憶體被大量無效資料報填滿的風險,
FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1,因為它們最多隻吃 1.5K
的記憶體,但是它們存在時間更長。另外參考 tcp_max_orphans。
·參數tcp_fin_timeout 是通訊端關閉時,保持FIN-WAIT-2狀態的時間。一個TCP串連以three-segment SYN序列開始, 以three-segment FIN序列結束.均不保留資料.通過改變tcp_fin_timeout的值, 從FIN序列到記憶體可以空閑出來處理新串連的時間縮短了,使效能得到改進.改變這個值的前要經過認真的監測,避免因為死通訊端造成記憶體溢出.
5, 減少TCP KeepAlive串連偵測的時間,使系統可以處理更多的串連。
net.ipv4.tcp_keepalive_time=1800
/proc/sys/net/ipv4/tcp_keepalive_time
該檔案表示從不再傳送資料到向串連上發送保持串連訊號之間所需的秒數。
預設設定:7200(2小時)
伺服器的一個問題是,同一時刻的大量TCP串連裡有很多的串連被開啟但是沒有使用. TCP的keepalive功能檢測到這些串連,預設情況下,在2小時之後丟掉. 2個小時的可能導致記憶體過度使用,降低效能.因此改成1800秒(30分鐘)是個更好的選擇:
6, 增加TCP SYN隊列長度,使系統可以處理更多的並發串連。
net.ipv4.tcp_max_syn_backlog=8192
/proc/sys/net/ipv4/tcp_max_syn_backlog
對於那些依然還未獲得用戶端確認的串連請求,需要儲存在隊列中最大數目。對於
超過 128Mb 記憶體的系統,預設值是 1024,低於 128Mb 的則為 128。如果
伺服器經常出現過載,可以嘗試增加這個數字。警告!假如您將此值設為大於
1024,最好修改 include/net/tcp.h 裡面的 TCP_SYNQ_HSIZE,以保持
TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如
果tcp_adv_win_scale 128Mb 32768-610000)則系統將忽略所有發送給自己
的ICMP ECHO請求或那些廣播位址的請求。
當伺服器負載繁重或者是有很多用戶端都是超長延時的串連故障,可能會導致half-open串連數量的增加。這對於Web伺服器很來講很平常,尤其有很多撥號客戶時.這些half-open串連儲存在 backlog connections 隊列中.將這個值最少設定為4096 (預設為1024). 即便是伺服器不接收這類串連,設定這個值還能防止受到denial-of-service (syn-flood)的攻擊.
7, 1) 最佳化系統通訊端緩衝區
net.core.rmem_max=16777216
net.core.wmem_max=16777216
5) /proc/sys/net/core/rmem_default
該檔案指定了接收通訊端緩衝區大小的預設值(以位元組為單位)。
預設設定:110592
6) /proc/sys/net/core/rmem_max
該檔案指定了接收通訊端緩衝區大小的最大值(以位元組為單位)。
預設設定:131071
7) /proc/sys/net/core/wmem_default
該檔案指定了發送通訊端緩衝區大小的預設值(以位元組為單位)。
預設設定:110592
8) /proc/sys/net/core/wmem_max
該檔案指定了發送通訊端緩衝區大小的最大值(以位元組為單位)。
預設設定:131071
·對於所有協議的隊列,設定最大系統發送緩衝(wmem) 和接收緩衝(rmem)到8MB
這些設定指定了建立TCP通訊端時為其分配的記憶體容量. 另外,使用如下命令發送和接收緩衝.該命令設定了三個值:最小值、初始值和最大值:
第三個值必須小於或等於wmem_max和rmem_max。
8 開啟TCP SYN cookie選項,有助於保護伺服器免受SyncFlood攻擊。
net.ipv4.tcp_syncookies=1
/proc/sys/net/ipv4/tcp_syncookies
該檔案表示是否開啟TCP同步標籤(syncookie),核心必須開啟了 CONFIG_SYN_COOKIES項進行編譯。 同步標籤(syncookie)可以防止一個通訊端在有過多試圖串連到達時引起過載。
tcp_syncookies 參數類型:整型
只有在核心編譯時間選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是為了防止syn flood攻擊。預設值是false。
注意:該選項千萬不能用於那些沒有收到攻擊的高負載伺服器,如果在日誌中出現 synflood訊息,但是調查發現沒有收到synflood攻擊,而是合法使用者的串連負載過高的原因,你應該調整其它參數來提高伺服器效能。參考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookie嚴重的違背TCP協議,不允許使用TCP擴充,可能對某些服務導致嚴重的效能影響(如SMTP轉寄)。
開啟TCP SYN cookies,保護伺服器避免受syn-flood攻擊,包括服務取決denial-of-service (DoS) 或者分布式服務拒絕distributed denial-of-service (DDoS) (僅適用Red Hat Enterprise Linux AS)
9 關閉路由相關功能
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.lo.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
/proc/sys/net/ipv4/*/secure_redirects
其實所謂的“安全重新導向”就是只接受來自網關的“重新導向”icmp包。該參數就是
用來設定“安全重新導向”功能的。參數值為布爾值,1表示啟用,0表示禁止,預設值
為啟用。
send_redirects - 布爾類型
如果是router,發送重新導向訊息,預設值是TRUE
accept_redirects - 布爾類型
收發接收ICMP重新導向訊息。對於主機來說預設為True,對於用作路由器時預設值為False。
·以下命令使伺服器忽略來自被列入網關的伺服器的重新導向。因重新導向可以被用來進行攻擊,所以我們只接受有信任的來源的重新導向。
另 外,你可以配置接受或拒絕任何ICMP重新導向。ICMP重新導向是路由器傳輸路由資訊的機制。比如,當網關接收到來自所接網路主機的Internet資料報 時,網關可以發送重新導向資訊到一台主機。網關檢查路由表獲得下一個網關的地址,第二個網關將資料報路由到目標網路.關閉這些重新導向得命令如下:
·如果這個伺服器不是一台路由器,那麼它不會發送重新導向,所以可以關閉該功能:
10 最佳化TCP接收/發送緩衝區
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
25) /proc/sys/net/ipv4/tcp_wmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於發送緩衝的記憶體最小值。每個TCP socket都可以使用它。
Default:為TCP socket預留用於發送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem中default的 值,一般要低於net.core.wmem中default的值。
Max:為TCP socket預留用於發送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,今天選擇參數SO_SNDBUF則不受該值影響。預設值為128K。
預設設定:4096 16384 131072
26) /proc/sys/net/ipv4/tcp_rmem
該檔案包含3個整數值,分別是:min,default,max
Min:為TCP socket預留用於接收緩衝的記憶體數量,即使在記憶體出現緊張情況下TCP socket都至少會有這麼多數量的記憶體用於接收緩衝。
Default: 為TCP socket預留用於接收緩衝的記憶體數量,預設情況下該值影響其它協議使用的 net.core.wmem中default的值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的 預設值情況下,TCP 視窗大小為65535。
Max:為TCP socket預留用於接收緩衝的記憶體最大值。該值不會影響 net.core.wmem中max的值,今天選擇參數 SO_SNDBUF則不受該值影響。
tcp_wmem - 三個整數的向量: min, default, max
min:為TCP socket預留用於發送緩衝的記憶體最小值。每個tcp socket都可以在建議以後都可以使用它。預設值為4K。
default:為TCP socket預留用於發送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。預設值為16K。
max: 用於TCP socket發送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,今天選擇參數SO_SNDBUF則不受該值影響。預設值為128K。
tcp_rmem - 三個整數的向量: 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。
max:用於TCP socket接收緩衝的記憶體最大值。該值不會影響 net.core.wmem_max,今天選擇參數 SO_SNDBUF則不受該值影響。預設值為 128K。預設值為87380*2 bytes。
11,
設定管理員拒絕接受廣播風暴或者smurf 攻擊attacks:
12,
·有些路由器針對廣播禎發送無效的回應,每個都產生警告並在核心產生日誌.這些回應可以被忽略:
13,
# don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1
14,
# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 256
15,
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 360000
16# Lower syn retry rates
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
17,# Set TCP Re-Ordering value in kernel to ‘5′
net.ipv4.tcp_reordering = 5