1. 程式人生 > >linux伺服器歷險之sysctl優化linux網路

linux伺服器歷險之sysctl優化linux網路

                1, 優化網路裝置接收佇列   net.core.netdev_max_backlog=3000    該檔案表示在每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目。    預設值:Red Hat Linux release 9 (Shrike)預設為300            rhel5 預設為1000    建議值為30002, 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=03, 開啟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連線裡有很多的連線被開啟但是沒有使用. TCPkeepalive功能檢測到這些連線,預設情況下,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_maxrmem_max8 開啟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=0net.ipv4.conf.all.accept_source_route=0net.ipv4.conf.eth0.accept_source_route=0net.ipv4.conf.default.accept_source_route=0net.ipv4.conf.lo.accept_redirects=0net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.eth0.accept_redirects=0net.ipv4.conf.default.accept_redirects=0net.ipv4.conf.lo.secure_redirects=0net.ipv4.conf.all.secure_redirects=0net.ipv4.conf.eth0.secure_redirects=0net.ipv4.conf.default.secure_redirects=0net.ipv4.conf.lo.send_redirects=0net.ipv4.conf.all.send_redirects=0net.ipv4.conf.eth0.send_redirects=0net.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 16777216net.ipv4.tcp_wmem=4096 65536 1677721625) /proc/sys/net/ipv4/tcp_wmem該檔案包含3個整數值,分別是:min,default,maxMin:為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 13107226) /proc/sys/net/ipv4/tcp_rmem該檔案包含3個整數值,分別是:min,default,maxMin:為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   net.ipv4.tcp_no_metrics_save =