Linux內核參數優化——網絡調優(安全+性能)

#關閉ipv6 默認開啓

net.ipv6.conf.all.disable_ipv6 = 1        

net.ipv6.conf.default.disable_ipv6 = 1


#啓用timewait 快速回收

net.ipv4.tcp_tw_recycle = 1            


#開SYN洪水***保護

net.ipv4.tcp_syncookies = 1           


#處理無源路由的包,防止***對服務器IP地址的***

net.ipv4.conf.eth0.accept_source_route=0

net.ipv4.conf.lo.accept_source_route=0

net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.all.accept_source_route=0


#服務器忽略來自被列入網關的服務器的重定向。因重定向可以被用來進行***,所以我們只接受有可靠來源的重定向

net.ipv4.conf.eth0.secure_redirects=1

net.ipv4.conf.lo.secure_redirects=1

net.ipv4.conf.default.secure_redirects=1

net.ipv4.conf.all.secure_redirects=1


#可以配置接受或拒絕任何ICMP重定向。ICMP重定向是器傳輸信息的機制。比如,當網關接收到來自所接網絡主機的Internet數據報時,網關可以發送重定向信息到一臺主機。網關檢查路由表獲得下一個網關的地址,第二個網關將數據報路由到目標網絡。關閉這些重定向得命令如下:

net.ipv4.conf.eth0.accept_redirects=0

net.ipv4.conf.lo.accept_redirects=0

net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.all.accept_redirects=0


#如果這個服務器不是一臺路由器,那麼它不會發送重定向,所以可以關閉該功能:

net.ipv4.conf.eth0.send_redirects=0

net.ipv4.conf.lo.send_redirects=0

net.ipv4.conf.default.send_redirects=0

net.ipv4.conf.all.send_redirects=0


#開啓icmp廣播忽略,拒絕接受廣播風暴或者smurf ***attacks:

net.ipv4.icmp_echo_ignore_broadcasts=1                 


#忽略所有icmp包或者pings

net.ipv4.icmp_echo_ignore_all=1            

#有些路由器針對廣播禎發送無效的迴應,每個都產生警告並在內核產生日誌。這些迴應可以被忽略

net.ipv4.icmp_ignore_bogus_error_responses=1     


下邊的命令用來對連接數量非常大的服務器進行調優:

#表示開啓重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認爲0

net.ipv4.tcp_tw_reuse = 1               


#表示開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0

net.ipv4.tcp_tw_recycle = 1               


#對於本端斷開的socket連接,TCP保持在FIN_WAIT_2狀態的時間

net.ipv4.tcp_fin_timeout = 60                


tips:

對於本端斷開的socket連接,TCP保持在FIN_WAIT_2狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。默認值爲 60 秒。過去在2.2版本的內核中是 180 秒。您可以設置該值﹐但需要注意﹐如果您的機器爲負載很重的web服務器﹐您可能要冒內存被大量無效數據報填滿的風險﹐FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1 ﹐因爲它們最多隻吃 1.5K 的內存﹐但是它們存在時間更長。另外參考 tcp_max_orphans。

CLOSE_WAIT狀態的生成原因

如果服務器程序APACHE處於CLOSE_WAIT狀態的話,說明套接字是被動關閉的!

假設CLIENT端主動斷掉當前連接,那麼雙方關閉這個TCP連接共需要四個packet:

Client —> FIN —> Server

Client < --- ACK <--- Server

這時候Client端處於FIN_WAIT_2狀態;而Server 程序處於CLOSE_WAIT狀態。

Client <--- FIN <--- Server

這時Server 發送FIN給Client,Server 就置爲LAST_ACK狀態。

Client ---> ACK —> Server

Client迴應了ACK,那麼Server 的套接字纔會真正置爲CLOSED狀態。

Server 程序處於CLOSE_WAIT狀態,而不是LAST_ACK狀態,說明還沒有發FIN給Client,那麼可能是在關閉連接之前還有許多數據要發送或者其他事要做,導致沒有發這個FIN packet。

通常來說,一個CLOSE_WAIT會維持至少2個小時的時間。如果有個流氓特地寫了個程序,給你造成一堆的CLOSE_WAIT,消耗資源,那麼通常是等不到釋放那一刻,系統就已經解決崩潰了。

改變這個值的前要經過認真的監測,避免因爲死套接字造成內存溢出。


#對於所有的隊列(即系統),設置最大系統發送緩存(wmem) 和接收緩存(rmem)到8MB

net.ipv4.core.wmem_max=8388608           

net.ipv4.core.rmem_max=8388608


使用如下命令調整tcp發送和接收緩存。該命令設定了三個值:最小值、初始值和最大值

#調整tcp讀取緩存

net.ipv4.tcp_rmem="4096 87380 8388608"        

#調整tcp寫入緩存

net.ipv4.tcp.wmem="4096 87380 8388608"        


net.ipv4.tcp_max_syn_backlog=4096


tips:

第三個值必須小於或等於wmem_max和rmem_max。

當服務器負載繁重或者是有很多客戶端都是超長延時的連接故障,可能會導致half-open連接數量的增加。這對於Web服務器很來講很平常,尤其有很多撥號客戶時。這些half-open連接保存在 backlog(積壓) connections 隊列中。

將這個值最少設置爲4096 (缺省爲1024)。 即便是服務器不接收這類連接,設置這個值還能防止受到denial-of-service (syn-flood)的***


設置ipfrag參數,尤其是NFS和Samba服務器

net.ipv4.ipfrag_low_thresh=262144

net.ipv4.ipfrag_high_thresh=393216


tips:

這裏,我們可以設置用於重新組合IP碎片的最大、最小內存。當ipfrag_high_thresh值被指派,碎片會被丟棄直到達到ipfrag_low_thres值。

當TCP數據包傳輸發生錯誤時,開始碎片整理。有效的數據包保留在內存,同時損壞的數據包被轉發。例如,設置可用內存範圍從256 MB到384 MB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章