Linux 生產(chǎn)內(nèi)核網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)分析
本文總結(jié)了常見的 Linux 內(nèi)核參數(shù)及相關(guān)問題斑胜。修改內(nèi)核參數(shù)前呀舔,您需要:
- 從實(shí)際需要出發(fā)眯牧,最好有相關(guān)數(shù)據(jù)的支撐诚亚,不建議隨意調(diào)整內(nèi)核參數(shù)。
- 了解參數(shù)的具體作用滴某,且注意同類型或版本環(huán)境的內(nèi)核參數(shù)可能有所不同磅摹。
1. 查看和修改 Linux 實(shí)例內(nèi)核參數(shù)
1.1 方法一
通過
/proc/sys/
目錄
查看內(nèi)核參數(shù): 使用
cat
查看對(duì)應(yīng)文件的內(nèi)容,例如執(zhí)行命令cat /proc/sys/net/ipv4/tcp_tw_recycle
查看net.ipv4.tcp_tw_recycle
的值霎奢。修改內(nèi)核參數(shù): 使用
echo
修改內(nèi)核參數(shù)對(duì)應(yīng)的文件户誓,例如執(zhí)行命令echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle
將net.ipv4.tcp_tw_recycle
的值修改為 0。
注意:
/proc/sys/
目錄是 Linux 內(nèi)核在啟動(dòng)后生成的偽目錄幕侠,其目錄下的net
文件夾中存放了當(dāng)前系統(tǒng)中開啟的所有內(nèi)核參數(shù)帝美、目錄樹結(jié)構(gòu)與參數(shù)的完整名稱相關(guān),如net.ipv4.tcp_tw_recycle
橙依,它對(duì)應(yīng)的文件是/proc/sys/net/ipv4/tcp_tw_recycle
证舟,文件的內(nèi)容就是參數(shù)值。- 方法一 修改的參數(shù)值僅在當(dāng)次運(yùn)行中生效窗骑,系統(tǒng)重啟后會(huì)回滾歷史值女责,一般用于臨時(shí)性的驗(yàn)證修改的效果。若需要永久性修改创译,請(qǐng)參閱 方法二(https://help.aliyun.com/knowledge_detail/41334.html#method2)抵知。
1.2 方法二
通過
sysctl.conf
文件
查看內(nèi)核參數(shù): 執(zhí)行命令
sysctl -a
查看當(dāng)前系統(tǒng)中生效的所有參數(shù)。修改內(nèi)核參數(shù):
執(zhí)行命令
/sbin/sysctl -w kernel.parameter="example"
修改參數(shù)软族,如sysctl -w net.ipv4.tcp_tw_recycle="0"
刷喜。執(zhí)行命令
vi /etc/sysctl.conf
修改/etc/sysctl.conf
文件中的參數(shù)。執(zhí)行命令
/sbin/sysctl -p
使配置生效立砸。
注:調(diào)整內(nèi)核參數(shù)后內(nèi)核處于不穩(wěn)定狀態(tài)掖疮,請(qǐng)務(wù)必重啟實(shí)例。
2. Linux 網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題及處理
2.1 Linux 實(shí)例 NAT 哈希表滿導(dǎo)致丟包
此處涉及的內(nèi)核參數(shù):
net.netfilter.nf_conntrack_buckets
net.nf_conntrack_max
2.1.1 問題現(xiàn)象
Linux 實(shí)例出現(xiàn)間歇性丟包颗祝,無法連接實(shí)例浊闪,通過 tracert、mtr 等工具排查螺戳,外部網(wǎng)絡(luò)未見異常搁宾。同時(shí),如下圖所示倔幼,在系統(tǒng)日志中重復(fù)出現(xiàn)大量(table full, dropping packet.
)錯(cuò)誤信息盖腿。
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
2.1.2 原因分析
ip_conntrack 是 Linux 系統(tǒng)內(nèi) NAT 的一個(gè)跟蹤連接條目的模塊。ip_conntrack 模塊會(huì)使用一個(gè)哈希表記錄 TCP 協(xié)議 established connection 記錄,當(dāng)這個(gè)哈希表滿了的時(shí)候翩腐,便會(huì)導(dǎo)致 nf_conntrack: table full, dropping packet
錯(cuò)誤鸟款。Linux 系統(tǒng)會(huì)開辟一個(gè)空間用來維護(hù)每一個(gè) TCP 鏈接,這個(gè)空間的大小與 nf_conntrack_buckets
茂卦、nf_conntrack_max
相關(guān)欠雌,后者的默認(rèn)值是前者的 4 倍,而前者在系統(tǒng)啟動(dòng)后無法修改疙筹,所以一般都是建議調(diào)大 nf_conntrack_max
。
注意:系統(tǒng)維護(hù)連接比較消耗內(nèi)存禁炒,請(qǐng)?jiān)谙到y(tǒng)空閑和內(nèi)存充足的情況下調(diào)大
nf_conntrack_max
而咆,且根據(jù)系統(tǒng)的情況而定。
2.1.3 決思路
使用管理終端登錄實(shí)例幕袱。
執(zhí)行命令
# vi /etc/sysctl.conf
編輯系統(tǒng)內(nèi)核配置暴备。修改哈希表項(xiàng)最大值參數(shù):
net.netfilter.nf_conntrack_max = 655350
。修改超時(shí)參數(shù):
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
们豌,默認(rèn)情況下 timeout 是 432000(秒)涯捻。執(zhí)行命令
# sysctl -p
使配置生效。
2.2 Time wait bucket table overflow 報(bào)錯(cuò)
此處涉及的內(nèi)核參數(shù):
net.ipv4.tcp_max_tw_buckets
2.2.1 問題現(xiàn)象
Linux 實(shí)例 /var/log/message
日志全是類似 kernel: TCP: time wait bucket table overflow
的報(bào)錯(cuò)信息望迎,提示 time wait bucket table
溢出障癌,如下:
Feb 18 12:28:38 i-*** kernel: TCP: time wait bucket table overflow
Feb 18 12:28:44 i-*** kernel: printk: 227 messages suppressed.
執(zhí)行命令 netstat -ant|grep TIME_WAIT|wc -l
統(tǒng)計(jì)處于 TIME_WAIT 狀態(tài)的 TCP 連接數(shù),發(fā)現(xiàn)處于 TIME_WAIT 狀態(tài)的 TCP 連接非常多辩尊。
2.2.2 原因分析
參數(shù) net.ipv4.tcp_max_tw_buckets
可以調(diào)整內(nèi)核中管理 TIME_WAIT 狀態(tài)的數(shù)量涛浙,當(dāng)實(shí)例中處于 TIME_WAIT 及需要轉(zhuǎn)換為 TIME_WAIT 狀態(tài)連接數(shù)之和超過了 net.ipv4.tcp_max_tw_buckets
參數(shù)值時(shí),message 日志中將報(bào)錯(cuò) time wait bucket table
摄欲,同時(shí)內(nèi)核關(guān)閉超出參數(shù)值的部分 TCP 連接轿亮。您需要根據(jù)實(shí)際情況適當(dāng)調(diào)高 net.ipv4.tcp_max_tw_buckets
,同時(shí)從業(yè)務(wù)層面去改進(jìn) TCP 連接胸墙。
2.2.3 解決思路
執(zhí)行命令
netstat -anp |grep tcp |wc -l
統(tǒng)計(jì) TCP 連接數(shù)我注。執(zhí)行命令
vi /etc/sysctl.conf
,查詢net.ipv4.tcp_max_tw_buckets
參數(shù)迟隅。如果確認(rèn)連接使用很高但骨,容易超出限制。調(diào)高參數(shù)
net.ipv4.tcp_max_tw_buckets
玻淑,擴(kuò)大限制嗽冒。執(zhí)行命令
# sysctl -p
使配置生效。
2.3 Linux 實(shí)例中 FIN_WAIT2 狀態(tài)的 TCP 鏈接過多
此處涉及的內(nèi)核參數(shù):
net.ipv4.tcp_fin_timeout
2.3.1 問題現(xiàn)象
FIN_WAIT2 狀態(tài)的 TCP 鏈接過多补履。
2.3.2 原因分析
- HTTP 服務(wù)中添坊,Server 由于某種原因會(huì)主動(dòng)關(guān)閉連接,例如 KEEPALIVE 超時(shí)的情況下箫锤。作為主動(dòng)關(guān)閉連接的 Server 就會(huì)進(jìn)入 FIN_WAIT2 狀態(tài)贬蛙。
- TCP/IP 協(xié)議棧中雨女,存在半連接的概念,F(xiàn)IN_WAIT2 狀態(tài)不算做超時(shí)阳准,如果 Client 不關(guān)閉氛堕,F(xiàn)IN_WAIT_2 狀態(tài)將保持到系統(tǒng)重啟,越來越多的 FIN_WAIT_2 狀態(tài)會(huì)致使內(nèi)核 Crash野蝇。
- 建議調(diào)小
net.ipv4.tcp_fin_timeout
參數(shù)讼稚,減少這個(gè)數(shù)值以便加快系統(tǒng)關(guān)閉處于FIN_WAIT2
狀態(tài)的 TCP 連接。
2.3.3 解決思路
- 執(zhí)行命令
vi /etc/sysctl.conf
绕沈,修改或加入以下內(nèi)容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
- 執(zhí)行命令
# sysctl -p
使配置生效锐想。
注:由于
FIN_WAIT2
狀態(tài)的 TCP 連接會(huì)進(jìn)入TIME_WAIT
狀態(tài),請(qǐng)同時(shí)參閱 time wait bucket table overflow 報(bào)錯(cuò)乍狐。
2.4 Linux 實(shí)例中出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的 TCP 連接
2.4.1 問題現(xiàn)象
執(zhí)行命令 netstat -atn|grep CLOSE_WAIT|wc -l
發(fā)現(xiàn)當(dāng)前系統(tǒng)中處于 CLOSE_WAIT
狀態(tài)的 TCP 連接非常多赠摇。
2.4.2 原因分析
關(guān)閉 TCP 連接時(shí),TCP 連接的兩端都可以發(fā)起關(guān)閉連接的請(qǐng)求浅蚪,若對(duì)端發(fā)起了關(guān)閉連接藕帜,但本地沒有關(guān)閉連接,那么該連接就會(huì)處于 CLOSE_WAIT 狀態(tài)惜傲。雖然該連接已經(jīng)處于半開狀態(tài)洽故,但是已經(jīng)無法和對(duì)端通信,需要及時(shí)的釋放掉該鏈接盗誊。建議從業(yè)務(wù)層面及時(shí)判斷某個(gè)連接是否已經(jīng)被對(duì)端關(guān)閉收津,即在程序邏輯中對(duì)連接及時(shí)關(guān)閉檢查。
2.4.3 解決思路
編程語言中對(duì)應(yīng)的讀浊伙、寫函數(shù)一般包含了檢測(cè) CLOSE_WAIT TCP 連接功能撞秋,例如:
Java 語言:
- 通過
read
方法來判斷 I/O 。當(dāng) read 方法返回-1
時(shí)則表示已經(jīng)到達(dá)末尾嚣鄙。 - 通過
close
方法關(guān)閉該鏈接吻贿。
C 語言:
- 檢查
read
的返回值。- 若等于 0 則可以關(guān)閉該連接哑子。
- 若小于 0 則查看 errno舅列,若不是 AGAIN 則同樣可以關(guān)閉連接。
2.5 客戶端配置 NAT 后仍無法訪問 ECS 或 RDS 遠(yuǎn)端服務(wù)器
此處涉及的內(nèi)核參數(shù):
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_timestamps
2.5.1 問題現(xiàn)象
客戶端配置 NAT 后無法訪問遠(yuǎn)端 ECS卧蜓、RDS帐要,包括配置了 SNAT 的 VPC ECS 。同時(shí)無法訪問連接其他 ECS 或 RDS 等云產(chǎn)品弥奸,抓包檢測(cè)發(fā)現(xiàn)遠(yuǎn)端對(duì)客戶端發(fā)送的 SYN 包沒有響應(yīng)榨惠。
2.5.2 原因分析
若遠(yuǎn)端服務(wù)器的內(nèi)核參數(shù) net.ipv4.tcp_tw_recycle
和 net.ipv4.tcp_timestamps
的值都為 1,則遠(yuǎn)端服務(wù)器會(huì)檢查每一個(gè)報(bào)文中的時(shí)間戳(Timestamp),若 Timestamp 不是遞增的關(guān)系赠橙,不會(huì)響應(yīng)這個(gè)報(bào)文耽装。配置 NAT 后,遠(yuǎn)端服務(wù)器看到來自不同的客戶端的源 IP 相同期揪,但 NAT 前每一臺(tái)客戶端的時(shí)間可能會(huì)有偏差掉奄,報(bào)文中的 Timestamp 就不是遞增的情況。
2.5.3 解決思路
- 遠(yuǎn)端服務(wù)器為 ECS 時(shí)凤薛,修改參數(shù)
net.ipv4.tcp_tw_recycle
為 0姓建。 - 遠(yuǎn)端服務(wù)器為 RDS 等 PaaS 服務(wù)時(shí)。RDS 無法直接修改內(nèi)核參數(shù)缤苫,需要在客戶端上修改參數(shù)
net.ipv4.tcp_tw_recycle
和net.ipv4.tcp_timestamps
為 0引瀑。
3. 總結(jié), 以上涉及 Linux 內(nèi)核參數(shù)說明
參數(shù) | 說明 |
---|---|
net.ipv4.tcp_max_syn_backlog | 該參數(shù)決定了系統(tǒng)中處于 SYN_RECV 狀態(tài)的 TCP 連接數(shù)量。SYN_RECV 狀態(tài)指的是當(dāng)系統(tǒng)收到 SYN 后榨馁,作了 SYN+ACK 響應(yīng)后等待對(duì)方回復(fù)三次握手階段中的最后一個(gè) ACK 的階段。 |
net.ipv4.tcp_syncookies | 該參數(shù)表示是否打開 TCP 同步標(biāo)簽(SYN_COOKIES )帜矾,內(nèi)核必須開啟并編譯 CONFIG_SYN_COOKIES翼虫,SYN_COOKIES 可以防止一個(gè)套接字在有過多試圖連接到達(dá)時(shí)引起過載。默認(rèn)值 0 表示關(guān)閉屡萤。當(dāng)該參數(shù)被設(shè)置為 1 且 SYN_RECV 隊(duì)列滿了之后珍剑,內(nèi)核會(huì)對(duì) SYN 包的回復(fù)做一定的修改,即死陆,在響應(yīng)的 SYN+ACK 包中招拙,初始的序列號(hào)是由源 IP + Port、目的 IP + Port 及時(shí)間這五個(gè)參數(shù)共同計(jì)算出一個(gè)值組成精心組裝的 TCP 包措译。由于 ACK 包中確認(rèn)的序列號(hào)并不是之前計(jì)算出的值别凤,惡意攻擊者無法響應(yīng)或誤判,而請(qǐng)求者會(huì)根據(jù)收到的 SYN+ACK 包做正確的響應(yīng)领虹。啟用 net.ipv4.tcp_syncookies 后规哪,會(huì)忽略 net.ipv4.tcp_max_syn_backlog 。 |
net.ipv4.tcp_synack_retries | 該參數(shù)指明了處于 SYN_RECV 狀態(tài)時(shí)重傳 SYN+ACK 包的次數(shù)塌衰。 |
net.ipv4.tcp_abort_on_overflow | 設(shè)置該參數(shù)為 1 時(shí)诉稍,當(dāng)系統(tǒng)在短時(shí)間內(nèi)收到了大量的請(qǐng)求,而相關(guān)的應(yīng)用程序未能處理時(shí)最疆,就會(huì)發(fā)送 Reset 包直接終止這些鏈接杯巨。建議通過優(yōu)化應(yīng)用程序的效率來提高處理能力,而不是簡單地 Reset努酸。默認(rèn)值: 0 |
net.core.somaxconn | 該參數(shù)定義了系統(tǒng)中每一個(gè)端口最大的監(jiān)聽隊(duì)列的長度服爷,是個(gè)全局參數(shù)。該參數(shù)和 net.ipv4.tcp_max_syn_backlog 有關(guān)聯(lián),后者指的是還在三次握手的半連接的上限层扶,該參數(shù)指的是處于 ESTABLISHED 的數(shù)量上限箫章。若您的 ECS 實(shí)例業(yè)務(wù)負(fù)載很高,則有必要調(diào)高該參數(shù)镜会。listen(2) 函數(shù)中的參數(shù) backlog 同樣是指明監(jiān)聽的端口處于 ESTABLISHED 的數(shù)量上限檬寂,當(dāng) backlog 大于 net.core.somaxconn 時(shí),以 net.core.somaxconn 參數(shù)為準(zhǔn)戳表。 |
net.core.netdev_max_backlog | 當(dāng)內(nèi)核處理速度比網(wǎng)卡接收速度慢時(shí)桶至,這部分多出來的包就會(huì)被保存在網(wǎng)卡的接收隊(duì)列上,而該參數(shù)說明了這個(gè)隊(duì)列的數(shù)量上限匾旭。 |
4. 生產(chǎn)集群內(nèi)核配置參考
- 4.1 參考1: 筆者所在公司的 Iot 生產(chǎn)環(huán)境
EMQ
集群的sysctl.conf
配置 (CentOS 7.4 4C 32G)
# see: https://www.kernel.org/doc/Documentation/sysctl
fs.file-max = 1048576
fs.nr_open = 2097152
net.core.somaxconn = 32768
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 8192
net.ipv4.tcp_mem = 378798 505064 757596
net.ipv4.tcp_rmem = 1024 4096 16777216
net.ipv4.tcp_wmem = 1024 4096 16777216
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65000
net.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
- 4.2 參考2: 感謝 lework/kainstall 的作者, 基于純
shell
的 kubernetes 生產(chǎn)集群的sysctl
配置
# see: https://www.kernel.org/doc/Documentation/sysctl
#############################################################################################
# 調(diào)整虛擬內(nèi)存
#############################################################################################
# Default: 30
# 0 - 任何情況下都不使用swap镣屹。
# 1 - 除非內(nèi)存不足(OOM),否則不使用swap价涝。
vm.swappiness = 0
# 內(nèi)存分配策略
#0 - 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用女蜈;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S色瘩;否則伪窖,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程居兆。
#1 - 表示內(nèi)核允許分配所有的物理內(nèi)存覆山,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
#2 - 表示內(nèi)核允許分配超過所有物理內(nèi)存和交換空間總和的內(nèi)存
vm.overcommit_memory=1
# OOM時(shí)處理
# 1關(guān)閉泥栖,等于0時(shí)簇宽,表示當(dāng)內(nèi)存耗盡時(shí),內(nèi)核會(huì)觸發(fā)OOM killer殺掉最耗內(nèi)存的進(jìn)程吧享。
vm.panic_on_oom=0
# vm.dirty_background_ratio 用于調(diào)整內(nèi)核如何處理必須刷新到磁盤的臟頁魏割。
# Default value is 10.
# 該值是系統(tǒng)內(nèi)存總量的百分比,在許多情況下將此值設(shè)置為5是合適的钢颂。
# 此設(shè)置不應(yīng)設(shè)置為零见妒。
vm.dirty_background_ratio = 5
# 內(nèi)核強(qiáng)制同步操作將其刷新到磁盤之前允許的臟頁總數(shù)
# 也可以通過更改 vm.dirty_ratio 的值(將其增加到默認(rèn)值30以上(也占系統(tǒng)內(nèi)存的百分比))來增加
# 推薦 vm.dirty_ratio 的值在60到80之間。
vm.dirty_ratio = 60
# vm.max_map_count 計(jì)算當(dāng)前的內(nèi)存映射文件數(shù)甸陌。
# mmap 限制(vm.max_map_count)的最小值是打開文件的ulimit數(shù)量(cat /proc/sys/fs/file-max)须揣。
# 每128KB系統(tǒng)內(nèi)存 map_count應(yīng)該大約為1。 因此钱豁,在32GB系統(tǒng)上耻卡,max_map_count為262144比吭。
# Default: 65530
vm.max_map_count = 2097152
#############################################################################################
# 調(diào)整文件
#############################################################################################
fs.may_detach_mounts = 1
# 增加文件句柄和inode緩存的大小枕扫,并限制核心轉(zhuǎn)儲(chǔ)。
fs.file-max = 2097152
fs.nr_open = 2097152
fs.suid_dumpable = 0
# 文件監(jiān)控
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
fs.inotify.max_queued_events=16384
#############################################################################################
# 調(diào)整網(wǎng)絡(luò)設(shè)置
#############################################################################################
# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的默認(rèn)內(nèi)存量熙掺。
net.core.wmem_default = 25165824
net.core.rmem_default = 25165824
# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的最大內(nèi)存量。
net.core.wmem_max = 25165824
net.core.rmem_max = 25165824
# 除了套接字設(shè)置外溃卡,發(fā)送和接收緩沖區(qū)的大小
# 必須使用net.ipv4.tcp_wmem和net.ipv4.tcp_rmem參數(shù)分別設(shè)置TCP套接字溢豆。
# 使用三個(gè)以空格分隔的整數(shù)設(shè)置這些整數(shù),分別指定最小瘸羡,默認(rèn)和最大大小漩仙。
# 最大大小不能大于使用net.core.wmem_max和net.core.rmem_max為所有套接字指定的值。
# 合理的設(shè)置是最小4KiB犹赖,默認(rèn)64KiB和最大2MiB緩沖區(qū)队他。
net.ipv4.tcp_wmem = 20480 12582912 25165824
net.ipv4.tcp_rmem = 20480 12582912 25165824
# 增加最大可分配的總緩沖區(qū)空間
# 以頁為單位(4096字節(jié))進(jìn)行度量
net.ipv4.tcp_mem = 65536 25165824 262144
net.ipv4.udp_mem = 65536 25165824 262144
# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的最小內(nèi)存量。
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
# 啟用TCP窗口縮放峻村,客戶端可以更有效地傳輸數(shù)據(jù)麸折,并允許在代理方緩沖該數(shù)據(jù)。
net.ipv4.tcp_window_scaling = 1
# 提高同時(shí)接受連接數(shù)粘昨。
net.ipv4.tcp_max_syn_backlog = 10240
# 將net.core.netdev_max_backlog的值增加到大于默認(rèn)值1000
# 可以幫助突發(fā)網(wǎng)絡(luò)流量垢啼,特別是在使用數(shù)千兆位網(wǎng)絡(luò)連接速度時(shí),
# 通過允許更多的數(shù)據(jù)包排隊(duì)等待內(nèi)核處理它們张肾。
net.core.netdev_max_backlog = 65536
# 增加選項(xiàng)內(nèi)存緩沖區(qū)的最大數(shù)量
net.core.optmem_max = 25165824
# 被動(dòng)TCP連接的SYNACK次數(shù)芭析。
net.ipv4.tcp_synack_retries = 2
# 允許的本地端口范圍。
net.ipv4.ip_local_port_range = 2048 65535
# 防止TCP時(shí)間等待
# Default: net.ipv4.tcp_rfc1337 = 0
net.ipv4.tcp_rfc1337 = 1
# 減少tcp_fin_timeout連接的時(shí)間默認(rèn)值
net.ipv4.tcp_fin_timeout = 15
# 積壓套接字的最大數(shù)量捌浩。
# Default is 128.
net.core.somaxconn = 32768
# 打開syncookies以進(jìn)行SYN洪水攻擊保護(hù)。
net.ipv4.tcp_syncookies = 1
# 避免Smurf攻擊
# 發(fā)送偽裝的ICMP數(shù)據(jù)包工秩,目的地址設(shè)為某個(gè)網(wǎng)絡(luò)的廣播地址尸饺,源地址設(shè)為要攻擊的目的主機(jī),
# 使所有收到此ICMP數(shù)據(jù)包的主機(jī)都將對(duì)目的主機(jī)發(fā)出一個(gè)回應(yīng)助币,使被攻擊主機(jī)在某一段時(shí)間內(nèi)收到成千上萬的數(shù)據(jù)包
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 為icmp錯(cuò)誤消息打開保護(hù)
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 啟用自動(dòng)縮放窗口浪听。
# 如果延遲證明合理,這將允許TCP緩沖區(qū)超過其通常的最大值64K眉菱。
net.ipv4.tcp_window_scaling = 1
# 打開并記錄欺騙迹栓,源路由和重定向數(shù)據(jù)包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# 告訴內(nèi)核有多少個(gè)未附加的TCP套接字維護(hù)用戶文件句柄。 萬一超過這個(gè)數(shù)字俭缓,
# 孤立的連接會(huì)立即重置克伊,并顯示警告。
# Default: net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_max_orphans = 65536
# 不要在關(guān)閉連接時(shí)緩存指標(biāo)
net.ipv4.tcp_no_metrics_save = 1
# 啟用RFC1323中定義的時(shí)間戳記:
# Default: net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_timestamps = 1
# 啟用選擇確認(rèn)华坦。
# Default: net.ipv4.tcp_sack = 1
net.ipv4.tcp_sack = 1
# 增加 tcp-time-wait 存儲(chǔ)桶池大小愿吹,以防止簡單的DOS攻擊。
# net.ipv4.tcp_tw_recycle 已從Linux 4.12中刪除惜姐。請(qǐng)改用net.ipv4.tcp_tw_reuse犁跪。
net.ipv4.tcp_max_tw_buckets = 14400
net.ipv4.tcp_tw_reuse = 1
# accept_source_route 選項(xiàng)使網(wǎng)絡(luò)接口接受設(shè)置了嚴(yán)格源路由(SSR)或松散源路由(LSR)選項(xiàng)的數(shù)據(jù)包椿息。
# 以下設(shè)置將丟棄設(shè)置了SSR或LSR選項(xiàng)的數(shù)據(jù)包。
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 打開反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁用ICMP重定向接受
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 禁止發(fā)送所有IPv4 ICMP重定向數(shù)據(jù)包坷衍。
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 開啟IP轉(zhuǎn)發(fā).
net.ipv4.ip_forward = 1
# 禁止IPv6
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 要求iptables不對(duì)bridge的數(shù)據(jù)進(jìn)行處理
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
# arp緩存
# 存在于 ARP 高速緩存中的最少層數(shù)寝优,如果少于這個(gè)數(shù),垃圾收集器將不會(huì)運(yùn)行枫耳。缺省值是 128
net.ipv4.neigh.default.gc_thresh1=2048
# 保存在 ARP 高速緩存中的最多的記錄軟限制乏矾。垃圾收集器在開始收集前,允許記錄數(shù)超過這個(gè)數(shù)字 5 秒嘉涌。缺省值是 512
net.ipv4.neigh.default.gc_thresh2=4096
# 保存在 ARP 高速緩存中的最多記錄的硬限制妻熊,一旦高速緩存中的數(shù)目高于此,垃圾收集器將馬上運(yùn)行仑最。缺省值是 1024
net.ipv4.neigh.default.gc_thresh3=8192
# 持久連接
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
# conntrack表
net.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_buckets=262144
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300
#############################################################################################
# 調(diào)整內(nèi)核參數(shù)
#############################################################################################
# 地址空間布局隨機(jī)化(ASLR)是一種用于操作系統(tǒng)的內(nèi)存保護(hù)過程扔役,可防止緩沖區(qū)溢出攻擊。
# 這有助于確保與系統(tǒng)上正在運(yùn)行的進(jìn)程相關(guān)聯(lián)的內(nèi)存地址不可預(yù)測(cè)警医,
# 因此亿胸,與這些流程相關(guān)的缺陷或漏洞將更加難以利用。
# Accepted values: 0 = 關(guān)閉, 1 = 保守隨機(jī)化, 2 = 完全隨機(jī)化
kernel.randomize_va_space = 2
# 調(diào)高 PID 數(shù)量
kernel.pid_max = 65536
kernel.threads-max=30938
# coredump
kernel.core_pattern=core
# 決定了檢測(cè)到soft lockup時(shí)是否自動(dòng)panic预皇,缺省值是0
kernel.softlockup_all_cpu_backtrace=1
kernel.softlockup_panic=1