#關閉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