優(yōu)化條目:
修改ip地址、網(wǎng)關(guān)、主機(jī)名利花、DNS等
關(guān)閉selinux蔫慧,清空iptables
添加普通用戶并進(jìn)行sudo授權(quán)管理
更新yum源及必要軟件安裝
定時自動更新服務(wù)器時間
精簡開機(jī)自啟動服務(wù)
定時自動清理/var/spool/clientmqueue/目錄垃圾文件睡扬,放置inode節(jié)點(diǎn)被占滿
變更默認(rèn)的ssh服務(wù)端口阐枣,禁止root用戶遠(yuǎn)程連接
鎖定關(guān)鍵文件系統(tǒng)
調(diào)整文件描述符大小
調(diào)整字符集甩鳄,使其支持中文
去除系統(tǒng)及內(nèi)核版本登錄前的屏幕顯示
禁止ping
歷史記錄
內(nèi)核參數(shù)優(yōu)化
升級具有典型漏洞的軟件版本
1俊戳、修改ip地址储笑、網(wǎng)關(guān)腔稀、主機(jī)名、DNS等
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #網(wǎng)卡名字
BOOTPROTO=static #靜態(tài)IP地址獲取狀態(tài) 如:DHCP表示自動獲取IP地址
IPADDR=192.168.1.113 #IP地址
NETMASK=255.255.255.0 #子網(wǎng)掩碼
ONBOOT=yes#引導(dǎo)時是否激活
GATEWAY=192.168.1.1
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.113
NETMASK=255.255.255.0
ONBOOT=yes
GATEWAY=192.168.1.1
[root@localhost ~]# vi /etc/sysconfig/network
HOSTNAME=c64 #修改主機(jī)名焊虏,重啟生效
GATEWAY=192.168.1.1 #修改默認(rèn)網(wǎng)關(guān),如果上面eth0里面不配置網(wǎng)關(guān)的話,默認(rèn)就使用這里的網(wǎng)關(guān)了秕磷。
[root@localhost ~]# cat /etc/sysconfig/network
HOSTNAME=c64
GATEWAY=192.168.1.1
我們也可以用 hostnamec64 來臨時修改主機(jī)名,重新登錄生效
修改DNS
[root@localhost ~]# vi /etc/resolv.conf #修改DNS信息
nameserver 114.114.114.114
nameserver 8.8.8.8
[root@localhost ~]# cat /etc/resolv.conf #查看修改后的DNS信息
nameserver 114.114.114.114
nameserver 8.8.8.8
[root@localhost ~]# service network restart #重啟網(wǎng)卡澎嚣,生效
重啟網(wǎng)卡,也可以用下面的命令
[root@localhost ~]# /etc/init.d/network restart
2易桃、關(guān)閉selinux造寝,清空iptables
關(guān)閉selinux防火墻
默認(rèn)云服務(wù)器都是關(guān)著的
cat /etc/selinux/config
setenforce 0 設(shè)置不啟動
getenforce 查看
清空iptables
# iptables –F #清理防火墻規(guī)則
# iptables –L #查看防火墻規(guī)則
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
#/etc/init.d/iptables save #保存防火墻配置信息
針對centos7防火墻配置
修改防火墻
CentOS切換為iptables防火墻
firewall-cmd --state 查看防火墻狀態(tài)
切換到iptables首先應(yīng)該關(guān)掉默認(rèn)的firewalld,然后安裝iptables服務(wù)伶选。
1、關(guān)閉firewall:
systemctl stop firewalld.service
systemctl disable firewalld.service #禁止firewall開機(jī)啟動
2纹笼、安裝iptables防火墻
yum install iptables-services #安裝
service iptables save
3鳞陨、編輯iptables防火墻配置
vi /etc/sysconfig/iptables #編輯防火墻配置文件
下邊是一個完整的配置文件:
在你運(yùn)行完save中間插入下面的規(guī)則
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
:wq! #保存退出
systemctl start iptables.service #開啟
systemctl enable iptables.service #設(shè)置防火墻開機(jī)啟動
附贈防火墻腳本添瓷,前提你已經(jīng)切換至iptables
#!/bin/bash
IPT=`which iptables`
$IPT -F
$IPT -X
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -N syn-flood
##本地回環(huán) 內(nèi)網(wǎng)允許任何
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -m state --state NEW -s 10.0.0.0/8 -j ACCEPT
# ssh 端口開放 任何IP
$IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
# 根據(jù)需求填寫相應(yīng)的端口
$IPT -A INPUT -p tcp -m multiport --dports 80,8087,89 -j ACCEPT
# zabbix監(jiān)控地址
$IPT -A INPUT -p tcp -s zabbix.ip -m state --state NEW -m tcp --dport 10050 -j ACCEPT
# ICMP 規(guī)則控制
$IPT -A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
$IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# DOS防護(hù)
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
$IPT -A INPUT -j REJECT --reject-with icmp-host-prohibited
$IPT -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
$IPT -A syn-flood -j REJECT --reject-with icmp-port-unreachable
fwiptables.sh
3、添加普通用戶并運(yùn)行sudo授權(quán)管理
可參考https://www.cnblogs.com/jokerbj/p/9117384.html
4叉钥、更新yum源及必要軟件安裝
yum源文件
yum update 更新源文件
yum clean all 清除緩存
yum makecache 建立yum緩存
CentOS-Base.repo 網(wǎng)絡(luò)源文件
推薦使用阿里云
如果發(fā)生問題很可能是域名解析問題
vim /etc/resolv.conf
nameserver 8.8.8.8
阿里
nameserver 100.100.2.138
nameserver 100.100.2.136
options timeout:2 attempts:3 rotate single-request-reopen
接下來就要安裝幾個必要的軟件了
yum install lrzsz ntpdate sysstat net-tools -y
lrzsz 是上傳下載的軟件
sysstat 是用來檢測系統(tǒng)性能及效率的工具
net-tools 沒有ifconfig命令時候需要安裝工具
5圃泡、定時自動更新服務(wù)器時間
默認(rèn)云服務(wù)器有同步的時間服務(wù)器
修改時間 date
硬件時間 hwclock --show
同步公有時間服務(wù)器缤弦,可搭配任務(wù)計(jì)劃,阿里云的時間服務(wù)器ntp.aliyun.com
yum -y install ntp
ntpdate asia.pool.ntp.org
time.nist.gov
time.nuri.net
ntpdate asia.pool.ntp.org 或者 ntp.aliyun.com
注意骑科;如果出現(xiàn)ntpdate[24325]: the NTP socket is in use, exiting,需要systemctl stop ntpd.service停止,然后同步,之后再啟動塞赂,阿里云服務(wù)器默認(rèn)同步阿里云時間服務(wù)器
時間設(shè)置
輸出當(dāng)前時間
date +"%Y-%m-%d %H:%M:%S" # 2018-06-08 14:05:08
輸出指定時間
-d<字符串>:顯示字符串所指的日期與時間沈跨。字符串前后必須加上雙引號蒙畴;
date -d "1 day ago" +"%Y-%m-%d" 2018-06-07 ago是昨天
date -d "1 day" +"%Y-%m-%d" 2018-06-09 不加參數(shù)是明天
以下使用數(shù)字表示前后多少天的加減
date +%Y%m%d #顯示前天年月日
date -d "+1 day" +%F #顯示前一天的日期 %F就是%Y-%m-%d
date -d "-1 day" +%F #顯示后一天的日期
date -d "-1 month" +F #顯示上一月的日期
date -d "+1 month" +F #顯示下一月的日期
date -d "-1 year" +F #顯示前一年的日期
date -d "+1 year" +F #顯示下一年的日期
設(shè)置時間
-s<字符串>:根據(jù)字符串來設(shè)置日期與時間。字符串前后必須加上雙引號懦砂;
date -s 01:01:01 #設(shè)置具體時間,不會對日期做更改
date -s "01:01:01 2012-05-23" #這樣可以設(shè)置全部時間
date -s "01:01:01 20120523" #這樣可以設(shè)置全部時間
date -s "2012-05-23 01:01:01" #這樣可以設(shè)置全部時間
date -s "20120523 01:01:01" #這樣可以設(shè)置全部時間
附贈當(dāng)前任務(wù)的執(zhí)行時間腳本
#!/bin/bash
start=$(date +%s) # 1528437613
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
時區(qū)設(shè)置
修改時區(qū)
1)使用tzselect設(shè)置時區(qū)
2)復(fù)制相應(yīng)的時區(qū)文件以蕴,替換系統(tǒng)默認(rèn)時區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3)將當(dāng)前時間寫入BIOS永久生效(避免重啟后失效)
hwclock
4)centos /etc/sysconfig/clock
ubuntu /etc/timezone
任務(wù)計(jì)劃使用
cat /var/spool/cron/root 可直接修改配置文件谤狡,注意重啟/reload
crontab -e
crontab -l -u root #查看root用戶
基本格式 :
* * * * * command
分 時 日 月 周 命令
第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點(diǎn))
第3列表示日期1~31
第4列表示月份1~12
第5列標(biāo)識號星期0~6(0表示星期天)
第6列要運(yùn)行的命令
每月1、10暖呕、22日的4 : 45重啟apache
4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
每天18 : 00至23 : 00之間每隔30分鐘重啟apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
每月的4號與每周一到周三的11點(diǎn)重啟apache
11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
晚上11點(diǎn)到早上7點(diǎn)之間斜做,每隔一小時重啟apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
6湾揽、精簡開機(jī)自啟動服務(wù)
修改啟動服務(wù)
systemctl 是管制服務(wù)的主要工具,它整合了chkconfig 與 service功能于一體瓤逼。
systemctl is-enabled iptables.service #查詢防火墻是否開機(jī)啟動
systemctl restart sshd #有可能不需要加service
systemctl is-enabled servicename.service #查詢服務(wù)是否開機(jī)啟動
systemctl enable *.service #開機(jī)運(yùn)行服務(wù)
systemctl disable *.service #取消開機(jī)運(yùn)行
systemctl start *.service #啟動服務(wù)
systemctl stop *.service #停止服務(wù)
systemctl restart *.service #重啟服務(wù)
systemctl reload *.service #重新加載服務(wù)配置文件
systemctl status *.service #查詢服務(wù)運(yùn)行狀態(tài)
systemctl --failed #顯示啟動失敗的服務(wù)
7库物、定時自動清理 cat /var/spool/postfix/maildrop/目錄垃圾文件霸旗,放置inode節(jié)點(diǎn)被占滿
centos7默認(rèn)安裝了postfix郵件服務(wù)戚揭,因此郵件位置 /var/spool/postfix/maildrop/會存在垃圾文件诱告,如果長時間不清理民晒,會導(dǎo)致inode數(shù)量不夠用精居,從而無法存放文件
mkdir /server/scripts -p
vi /server/scripts/spool_clean.sh
#!/bin/sh
find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f
然后將其加入到crontab定時任務(wù)中
echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >> /var/spool/cron/root
8、變更默認(rèn)的``ssh``服務(wù)端口靴姿,禁止root用戶遠(yuǎn)程連接
可參考https://www.cnblogs.com/jokerbj/p/9117384.html
我們默認(rèn)不會禁止root登錄沃但,端口酌情處理
9佛吓、鎖定關(guān)鍵文件系統(tǒng)
加鎖宵晚,不可修改加鎖文件
[root@jokerpro ~]# chattr +i /etc/passwd
[root@jokerpro ~]# lsattr /etc/passwd
----i--------e-- /etc/passwd
去鎖维雇,可以修改文件
[root@jokerpro ~]# chattr -i /etc/passwd
[root@jokerpro ~]# lsattr /etc/passwd
-------------e-- /etc/passwd
使用chattr命令后淤刃,為了安全我們需要將其改名
mv /usr/bin/chattr /usr/bin/任意名稱
10吱型、調(diào)整文件描述符大小
文件描述符是由無符號整數(shù)表示的句柄钝凶,進(jìn)程使用它來標(biāo)識打開的文件唁影。文件描述符與包括相關(guān)信息(文件的打開模式耕陷,文件的位置類型据沈,文件的出始類型等)的文件對象相關(guān)聯(lián)哟沫,這些信息被稱作文件的上下文。文件描述符的有效范圍是0到OPEN_MAX嗜诀。
對于內(nèi)核而言,所有打開的文件都是通過文件描述符引用的孔祸,當(dāng)打開一個現(xiàn)有文件或創(chuàng)建一個新文件時,內(nèi)核向進(jìn)程返回一個文件描述符崔慧。當(dāng)讀或?qū)懸粋€文件時,使用open或create返回的文件描述符標(biāo)識該文件惶室,并將其作為參數(shù)傳遞給read或write温自。
可通過ulimit -a查看當(dāng)前設(shè)置
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3895
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535 # 文件描述符
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192 # 堆棧文件
cpu time (seconds, -t) unlimited
max user processes (-u) 3895
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
文件描述符
查看linux服務(wù)器文件描述符設(shè)置的情況
ulimit -n 1024 默認(rèn)打開的文件描述符就是1024
對于高并發(fā)業(yè)務(wù)來講皇钞,默認(rèn)值肯定不夠
cat /etc/security/limits.conf 65535是最大支持的文件描述符
root soft nofile 65535
root hard nofile 65535
可以使用下面一行來替代上面
* - nofile 65535
重啟即可
配置完成后悼泌,重新登錄即可查看夹界。
提示:也可以把ulimit -SHn 65535命令臨時生效馆里,或者加入到/etc/rc.local,然后每次重啟生效
# cat >>/etc/rc.local<<EOF
# open files
ulimit -HSn 65535
# stack size
ulimit -s 65535
EOF
11鸠踪、調(diào)整字符集以舒,使其支持中文
修改字符編碼慢哈,默認(rèn)是LANG=en_US.UTF-8
修改該文件之前,可以先查看已經(jīng)安裝的語言包:
locale -a 可通過grep過濾查看是否有中文語言包
如果沒有語言包
yum install kde-l10n-Chinese
yum reinstall glibc-common
安裝完成后通過vi命令編輯配置文件
vim /etc/locale.conf
LANG="zh_CN.UTF-8"
source /etc/locale.conf
12卵贱、去除系統(tǒng)及內(nèi)核版本登錄前的屏幕顯示
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# cat /etc/issue
\S
Kernel \r on an \m
13、禁止linux系統(tǒng)被ping
# 開啟禁止ping
echo "net.ipv4.icmp_echo_ignore_all=1" 1>> /etc/sysctl.conf
sysctl -p
# 關(guān)閉禁止ping
首先要刪除 /etc/sysctl.conf 里面net.ipv4.icmp_echo_ignore_all = 1
之后執(zhí)行如下命令
echo 0 1> /proc/sys/net/ipv4/icmp_echo_ignore_all
# 后續(xù)就可以通過更改 cat /proc/sys/net/ipv4/icmp_echo_ignore_all文件
關(guān)閉 1 開啟
14侣集、歷史記錄
# 以下都是臨時生效,默認(rèn)1000不需要更改
# 設(shè)置的是閑置賬號的超時時間
export TMOUT=10 10秒后提示超時時間
# 設(shè)置終端history顯示條數(shù)
export HISTSIZE=5 只顯示最近5條信息
# 上面的終端顯示對應(yīng)的是 cat ~/.bash_history
export HISTFILESIZE=5 該文件只保存5條信息
# 清空歷史記錄
history -c
# 指定條數(shù)刪除
history -d 歷史記錄條屬
15世分、內(nèi)核參數(shù)優(yōu)化
說明:本優(yōu)化適合apache,nginx臭埋,squid多種等web應(yīng)用踪央,特殊的業(yè)務(wù)也可能需要略作調(diào)整瓢阴。
[root@jokerpro ~]# vi /etc/sysctl.conf
# 表示套接字由本端要求關(guān)閉畅蹂,這個參數(shù)決定了它保持在FIN-wAIT-2狀態(tài)的時間荣恐,默認(rèn)值是60秒液斜,建議調(diào)整為2叠穆,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_fin_timeout 60
net.ipv4.tcp_fin_timeout = 2
# 表示開啟重用少漆,允許TIME-wAIT sockets重新用于新的TCP鏈接硼被,默認(rèn)值為0示损,表示關(guān)閉,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_tw_reuse 0
net.ipv4.tcp_tw_reuse = 1
# 表示開啟TCP鏈接中TIME_WAIT sockets的快速回收屎媳,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_tw_recycle,默認(rèn)為0 表示關(guān)閉论巍,不建議開啟,因?yàn)閚at網(wǎng)絡(luò)問題
net.ipv4.tcp_tw_recycle = 0
# reuse和recycle這倆個參數(shù)是為防止生產(chǎn)環(huán)境下web嘉汰,squid等業(yè)務(wù)服務(wù)器time_wait網(wǎng)絡(luò)狀態(tài)數(shù)量過多設(shè)置的
注意:
tcp TIME_WAIT
進(jìn)入主題前必須做鋪墊啊,講講TIME_WAIT.因?yàn)門CP連接是雙向的,所以在關(guān)閉連接的時候,兩個方向各自都需要關(guān)閉双泪。先發(fā)FIN包的一方執(zhí)行的是主動關(guān)閉持搜;后發(fā)FIN包的一方執(zhí)行的是被動關(guān)閉焙矛。主動關(guān)閉的一方會進(jìn)入TIME_WAIT狀態(tài)葫盼,并且在此狀態(tài)停留兩倍的MSL(最大報(bào)文存活時間,一般Linux內(nèi)核設(shè)置30秒)時長村斟。
為什么主動方要傻乎乎等2MSL呢?不等,行不行?
TCP目的是可靠傳輸,主動關(guān)閉的一方發(fā)出FIN,被動方回復(fù)ACK,接著被動方發(fā)送FIN,主動方收到被動關(guān)閉的一方發(fā)出的FIN包后贫导,回應(yīng)ACK包蟆盹,同時進(jìn)入TIME_WAIT狀態(tài)孩灯,但是因?yàn)榫W(wǎng)絡(luò)原因逾滥,主動關(guān)閉的一方發(fā)送的這個ACK包很可能延遲峰档,從而觸發(fā)被動連接一方重傳FIN包寨昙。極端情況下讥巡,這一去(ACK去被動方)一回(重傳FIN回來)舔哪,就是兩倍的MSL時長尚卫。
如果主動關(guān)閉的一方跳過TIME_WAIT直接進(jìn)入CLOSED,或者在TIME_WAIT停留的時長不足兩倍的MSL吱涉,那么當(dāng)被動關(guān)閉的一方早先發(fā)出的FIN延遲包到達(dá)或者重傳FIN包到達(dá)后,就可能出現(xiàn)類似下面的問題:
主動方舊的TCP連接已經(jīng)不存在了外里,主動方只能返回RST包
主動方新的TCP連接被建立起來了,延遲包可能干擾新的連接
所以, TIME_WAIT必須等,2MSL不能少
減少TIME_WAIT
TIME_WAIT期間,資源不會釋放,現(xiàn)在都追求高性能高并發(fā),快速釋放資源是躲不掉的.對于客戶端因?yàn)橛卸丝?5535問題盅蝗,TIME_WAIT過多直接影響處理能力. 對于服務(wù)器,無端口數(shù)量限制的問題,Linux優(yōu)化也很給力,每個處于TIME_WAIT 狀態(tài)下連接內(nèi)存消耗很少, 而且也能通過tcp_max_tw_buckets = ${你要的閾值} 配置最大上限,但是對于短連接為主的web服務(wù)器,幾十萬的連接,基數(shù)很大,耗得內(nèi)存也不小哦.快速釋放總是好的
tcp_tw_recycle:回收TIME_WAIT連接
對客戶端和服務(wù)器同時起作用墩莫,開啟后在 3.5*RTO 內(nèi)回收芙委,RTO 200ms~ 120s 具體時間視網(wǎng)絡(luò)狀況狂秦。RTO(Retransmission TimeOut)重傳超時時間.內(nèi)網(wǎng)狀況比tcp_tw_reuse 稍快灌侣,公網(wǎng)尤其移動網(wǎng)絡(luò)大多要比tcp_tw_reuse 慢裂问,優(yōu)點(diǎn)就是能夠回收服務(wù)端的TIME_WAIT數(shù)量
但是,有個小坑:當(dāng)多個客戶端通過NAT方式聯(lián)網(wǎng)并與服務(wù)端交互時侧啼,服務(wù)端看到的是同一個IP,也就是說對服務(wù)端而言這些客戶端實(shí)際上等同于一個痊乾,可惜由于這些客戶端的時間戳可能存在差異皮壁,于是乎從服務(wù)端的視角看哪审,便可能出現(xiàn)時間戳錯亂的現(xiàn)象蛾魄,進(jìn)而直接導(dǎo)致時間戳小的數(shù)據(jù)包被丟棄湿滓〉涡耄客戶端處于NAT很常見,基本公司家庭網(wǎng)絡(luò)都走NAT.
tcp_tw_reuse:復(fù)用TIME_WAIT連接 只對客戶端起作用,1秒后才能復(fù)用,當(dāng)創(chuàng)建新連接的時候把夸,如果可能的話會考慮復(fù)用相應(yīng)的TIME_WAIT連接而线。通常認(rèn)為tcp_tw_reuse比tcp_tw_recycle安全一些恋日,這是因?yàn)橐粊鞹IME_WAIT創(chuàng)建時間必須超過一秒才可能會被復(fù)用膀篮;二來只有連接的時間戳是遞增的時候才會被復(fù)用岂膳。
客戶端請求服務(wù)器,服務(wù)器響應(yīng)后主動關(guān)閉連接,TIME_WAIT存在于服務(wù)器,服務(wù)器是被連接者,沒有復(fù)用一說,所以只對客戶端起作用.如果是客戶端主動關(guān)閉,TIME_WAIT存在于客戶端,這個時候再次連接服務(wù)器,可以復(fù)用之前TIME_WAIT留下的半廢品.
tcp_timestamps:以上兩點(diǎn),必須在客戶端和服務(wù)端timestamps 開啟時才管用(默認(rèn)開啟) 需要根據(jù)timestamp的遞增性來區(qū)分是否新連接
總結(jié)
客戶端tcp_tw_reuse復(fù)用連接管用, tcp_tw_recycle有用,但是客戶端主要不是接受連接,用處不大
服務(wù)器tcp_tw_recycle回收連接管用,tcp_tw_reuse復(fù)用無效.為了減少TIME_WAIT留在服務(wù)器,可以在服務(wù)器開啟KeepAlive,盡量不讓服務(wù)器主動關(guān)閉,而是客戶端主動關(guān)閉,減少TIME_WAIT產(chǎn)生.
reuse/recycle
# 表示開啟SYN Cookies功能誓竿,當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時谈截,啟用Cookies來處理筷屡,可防范少量SYN攻擊簸喂,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_syscookies毙死,默認(rèn)為1喻鳄,表示開啟
net.ipv4.tcp_syncookies = 1
# 表示當(dāng)keepalive啟用時扼倘,TCP發(fā)送keepalive消息的頻度,默認(rèn)是2小時再菊,建議更改為10分鐘,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_keepalive_time颜曾,默認(rèn)為7200秒
net.ipv4.tcp_keepalive_time =600
# 該選項(xiàng)用來設(shè)定允許系統(tǒng)打開的端口范圍,即用于向外鏈接的端口范圍泛豪,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/ip_local_port_range 默認(rèn)秃症,32768 60999
net.ipv4.ip_local_port_range = 32768 60999
# 表示SYN隊(duì)列的長度,默認(rèn)為1024吕粹,建議加大隊(duì)列的長度,為8182或更多匹耕,這樣可以容納更多等待鏈接的網(wǎng)絡(luò)連接數(shù)聚请,該參數(shù)為服務(wù)器端用于記錄那些尚未收到客戶端確認(rèn)信息的鏈接請求的最大值稳其,
該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 1024
# 該選項(xiàng)默認(rèn)值是128驶赏,這個參數(shù)用于調(diào)節(jié)系統(tǒng)同時發(fā)起的TCP連接數(shù)既鞠,在高并發(fā)的請求中煤傍,默認(rèn)的值可能會導(dǎo)致鏈接超時或重傳嘱蛋,因此蚯姆,需要結(jié)合并發(fā)請求數(shù)來調(diào)節(jié)此值,
該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/somaxconn 128 # 默認(rèn)沒有這個配置龄恋,需要自己生成
net.core.somaxconn = 1024
注意:
socket接收的所有連接都是存放在隊(duì)列類型的數(shù)據(jù)結(jié)構(gòu)中,關(guān)鍵問題是這種隊(duì)列有兩個凶伙,而且其長度都是可以設(shè)置的。
分別是下面兩個內(nèi)核參數(shù):
/proc/sys/net/ipv4/tcp_max_syn_backlog
/proc/sys/net/core/somaxconn
其中:
tcp_max_syn_backlog是指定所能接受SYN同步包的最大客戶端數(shù)量函荣,即半連接上限;
somaxconn是指服務(wù)端所能accept即處理數(shù)據(jù)的最大客戶端數(shù)量傻挂,即完成連接上限煮落。
對于沒有調(diào)優(yōu)的新裝的centOS6.5系統(tǒng)踊谋,這兩個參數(shù)的值都是128蝉仇。
這么描述雖然精確殖蚕,但是沒有一定基礎(chǔ)轿衔,不熟練網(wǎng)絡(luò)編程的人理解起來很費(fèi)勁。
打個簡單的比方:
某某發(fā)布公告要邀請四海之內(nèi)若干客人到場參加酒席害驹。客人參加酒席分為兩個步驟:
1蛤育、到大廳葫松;
2、找到座位(吃東西底洗,比如糖果、飯菜亥揖、酒等)珊擂。
tcp_max_syn_backlog用于指定酒席現(xiàn)場面積允許容納多少人進(jìn)來费变;
somaxconn用于指定有多少個座位摧扇。
顯然tcp_max_syn_backlog>=somaxconn挚歧。
如果要前來的客人數(shù)量超過tcp_max_syn_backlog扛稽,那么多出來的人雖然會跟主任見面握手滑负,但是要在門外等候在张;
如果到大廳的客人數(shù)量大于somaxconn,那么多出來的客人就會沒有位置坐(必須坐下才能吃東西)瞧掺,只能等待有人吃完有空位了才能吃東西耕餐。
那么問題來了:
somaxconn是內(nèi)核里的參數(shù),listen函數(shù)有個參數(shù)backlog肠缔,如果在listen方法里面指定該參數(shù)大于somaxconn的值夏跷,重新編譯并啟動程序明未,服務(wù)端所能接收的完整的連接數(shù)上限是backlog呢還是somaxconn槽华?
答案很簡單趟妥,listen方法指定的backlog是在用戶態(tài)指定的猫态,內(nèi)核態(tài)的參數(shù)優(yōu)先級高于用戶態(tài)的參數(shù)披摄,所以即使在listen方法里面指定backlog是一個大于somaxconn的值亲雪,socket在內(nèi)核態(tài)運(yùn)行時還會檢查一次somaxconn,如果連接數(shù)超過somaxconn就會等待义辕。
就相當(dāng)于主人指定了能有多少座位沒用,客人到了現(xiàn)場寓盗,準(zhǔn)備入座時璧函,還要看酒店的客戶經(jīng)理判斷能有多少個座位。
結(jié)論:
在沒有調(diào)優(yōu)的centOS7.4版本的服務(wù)器上基显,由于受到系統(tǒng)級別的限制,在該服務(wù)器上運(yùn)行的服務(wù)端程序续镇,在同一時間,最大只能接受128個客戶端發(fā)起持久連接摸航,并且只能處理128個客戶端的數(shù)據(jù)通信
tcp_max_syn_backlog/somaxconn
# 表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量制跟,如果超過這個數(shù)值酱虎,TIME_WAIT套接字將立刻被清除并打印警告信息雨膨,默認(rèn)為5000读串,對于Aapache聊记,Nginx等服務(wù)器來說可以將其調(diào)低一點(diǎn),
如改為5000-30000排监,不用業(yè)務(wù)的服務(wù)器也可以給大一點(diǎn),比如LVS杰捂,Squid,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_tw_buckets
net.ipv4.tcp_max_tw_buckets = 5000
# 表示內(nèi)核放棄建立鏈接之前發(fā)送SYN包的數(shù)量嫁佳,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_syn_retries挨队,默認(rèn)是6
net.ipv4.tcp_syn_retries = 1
# 參數(shù)的值決定了內(nèi)核放棄鏈接之前發(fā)送SYN+ACK包的數(shù)量蒿往,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_synack_retries盛垦,默認(rèn)是2
net.ipv4.tcp_synack_retries = 1
# 表示當(dāng)每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時瓤漏,允許發(fā)送到隊(duì)列的數(shù)據(jù)包最大數(shù)腾夯,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/netdev_max_backlog蔬充,默認(rèn)值為1000
net.core.netdev_max_backlog = 1000 # 默認(rèn)沒有這個配置蝶俱,需要自己生成
# 用于設(shè)定系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上娃惯,如果超過這個數(shù)值跷乐,孤立鏈接將立即被復(fù)位并打印出警號信息,這個限制只是為了防止簡單的DoS攻擊愕提,不能過分依靠這個限制甚至
人為減小這個值馒稍,更多的情況是增加這個值浅侨,默認(rèn)是4096纽谒,建議該值修改為2000,該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_orphans
net.ipv4.tcp_max_orphans = 2000
# 以下參數(shù)是對iptables防火墻的優(yōu)化鼓黔,防火墻不開會有提示,可以忽略不理不见。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
注意:
很多TIME_WAIT連接導(dǎo)致Cannot assign requested address的解決辦法
客戶端connect服務(wù)器,執(zhí)行一定時間后,接口返回-99的錯誤
查看錯誤信息 OS error code 99: Cannot assign requested address
猜想端口被用光的原因,網(wǎng)絡(luò)搜索得到一個解釋:客戶端頻繁的連服務(wù)器,由于每次連接都在很短的時間內(nèi)結(jié)束稳吮,導(dǎo)致很多的TIME_WAIT,以至于用光了可用的端口號灶似,所以新的連接沒辦法綁定端口列林,即“Cannot assign requested address”
通過netstat酪惭,的確看到很多TIME_WAIT狀態(tài)的連接
因?yàn)槭钦{(diào)用API希痴,所以無法對連接進(jìn)行opt設(shè)置春感,只能通過設(shè)置系統(tǒng)配置得以解決
解決辦法:
執(zhí)行命令修改如下2個內(nèi)核參數(shù)
sysctl -w net.ipv4.tcp_timestamps=1 開啟對于TCP時間戳的支持,若該項(xiàng)設(shè)置為0砌创,則下面一項(xiàng)設(shè)置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1 表示開啟TCP連接中TIME-WAIT sockets的快速回收
經(jīng)常檢查apache的連接數(shù),會發(fā)現(xiàn)很多無用的time_wait連接纺铭。有人說這是正常的寇钉,是因?yàn)橐粋€請求中途中斷造成的;還有人說微軟的IE連接時產(chǎn)生的Time_wait會比用Firefox連接時多扫倡。個人認(rèn)為有一定的Time_wait是正常的谦秧,如果超過了連接數(shù)的比例就不是很正常撵溃,所以還是找來方法解決一下疚鲤。
先檢查一下time wait的值:
[root@aaa1 ~]#sysctl -a | grep time | grep wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
這里解決問題的關(guān)鍵是如何能夠重復(fù)利用time_wait的值缘挑,檢查net.ipv4.tcp_tw當(dāng)前值:
[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
增加或修改net.ipv4.tcp_tw值集歇,將當(dāng)前的值更改為1分鐘(reuse是表示是否允許重新應(yīng)用處于TIME-WAIT狀態(tài)的socket用于新的TCP連接; recycle是加速TIME-WAIT sockets回收):
[root@aaa1 ~]# vi /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
使內(nèi)核參數(shù)生效:
[root@aaa1 ~]# sysctl -p
用netstat再觀察時會發(fā)現(xiàn)已經(jīng)恢復(fù)正常诲宇。
結(jié)合DDOS和TIME_WAIT過多际歼,建議增加如下參數(shù)設(shè)置:
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries=3
net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_max_syn_backlog=2048
# Enable TCP window scaling
net.ipv4.tcp_window_scaling: = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Increase number of ports available
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
附:查看當(dāng)前的連接數(shù)狀況
netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
established
State
LAST_ACK
CLOSING
FIN_WAIT2
LISTEN
FIN_WAIT1
SYN_RECV
ESTABLISHED
TIME_WAIT
上面的命令可以幫助分析哪種tcp狀態(tài)數(shù)量異常姑蓝。其中的SYN_RECV表示正在等待處理的請求數(shù)鹅心;ESTABLISHED表示正常數(shù)據(jù)傳輸狀態(tài)纺荧;TIME_WAIT表示處理完畢旭愧,等待超時結(jié)束的請求數(shù)。
附:查看IP連接數(shù)狀況
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
發(fā)現(xiàn)異常的输枯,可以封了這個IP
===============
TCP/IP TIME_WAIT狀態(tài)原理
TIME_WAIT狀態(tài)原理
----------------------------
通信雙方建立TCP連接后,主動關(guān)閉連接的一方就會進(jìn)入TIME_WAIT狀態(tài)占贫。
客戶端主動關(guān)閉連接時,會發(fā)送最后一個ack后靶剑,然后會進(jìn)入TIME_WAIT狀態(tài)蜻拨,再停留2個MSL時間(后有MSL的解釋)桩引,進(jìn)入CLOSED狀態(tài)缎讼。
下圖是以客戶端主動關(guān)閉連接為例坑匠,說明這一過程的血崭。
TIME_WAIT狀態(tài)存在的理由
----------------------------
TCP/IP協(xié)議就是這樣設(shè)計(jì)的,是不可避免的夹纫。主要有兩個原因:
1)可靠地實(shí)現(xiàn)TCP全雙工連接的終止
TCP協(xié)議在關(guān)閉連接的四次握手過程中,最終的ACK是由主動關(guān)閉連接的一端(后面統(tǒng)稱A端)發(fā)出的设凹,如果這個ACK丟失,對方(后面統(tǒng)稱B端)將重發(fā)出最終的FIN闪朱,因此A端必須維護(hù)狀態(tài)信息(TIME_WAIT)允許它重發(fā)最終的ACK月匣。如果A端不維持TIME_WAIT狀態(tài)奋姿,而是處于CLOSED 狀態(tài)锄开,那么A端將響應(yīng)RST分節(jié)称诗,B端收到后將此分節(jié)解釋成一個錯誤(在java中會拋出connection reset的SocketException)萍悴。
因而,要實(shí)現(xiàn)TCP全雙工連接的正常終止癣诱,必須處理終止過程中四個分節(jié)任何一個分節(jié)的丟失情況任岸,主動關(guān)閉連接的A端必須維持TIME_WAIT狀態(tài) 狡刘。
2)允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝
TCP分節(jié)可能由于路由器異常而“迷途”缤言,在迷途期間,TCP發(fā)送端可能因確認(rèn)超時而重發(fā)這個分節(jié),迷途的分節(jié)在路由器修復(fù)后也會被送到最終目的地枣耀,這個遲到的迷途分節(jié)到達(dá)時可能會引起問題蔫缸。在關(guān)閉“前一個連接”之后惋鸥,馬上又重新建立起一個相同的IP和端口之間的“新連接”,“前一個連接”的迷途重復(fù)分組在“前一個連接”終止后到達(dá)猜敢,而被“新連接”收到了。為了避免這個情況盒延,TCP協(xié)議不允許處于TIME_WAIT狀態(tài)的連接啟動一個新的可用連接,因?yàn)門IME_WAIT狀態(tài)持續(xù)2MSL添寺,就可以保證當(dāng)成功建立一個新TCP連接的時候胯盯,來自舊連接重復(fù)分組已經(jīng)在網(wǎng)絡(luò)中消逝计露。
MSL時間
----------------------------
MSL就是maximum segment lifetime(最大分節(jié)生命期)博脑,這是一個IP數(shù)據(jù)包能在互聯(lián)網(wǎng)上生存的最長時間票罐,超過這個時間IP數(shù)據(jù)包將在網(wǎng)絡(luò)中消失 叉趣。MSL在RFC 1122上建議是2分鐘该押,而源自berkeley的TCP實(shí)現(xiàn)傳統(tǒng)上使用30秒疗杉。
TIME_WAIT狀態(tài)維持時間
----------------------------
TIME_WAIT狀態(tài)維持時間是兩個MSL時間長度,也就是在1-4分鐘乡数。Windows操作系統(tǒng)就是4分鐘椭蹄。
用于統(tǒng)計(jì)當(dāng)前各種狀態(tài)的連接的數(shù)量的命令
---------------------------
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回結(jié)果如下:
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
對上述結(jié)果的解釋:
CLOSED:無連接是活動的或正在進(jìn)行
LISTEN:服務(wù)器在等待進(jìn)入呼叫
SYN_RECV:一個連接請求已經(jīng)到達(dá)闻牡,等待確認(rèn)
SYN_SENT:應(yīng)用已經(jīng)開始绳矩,打開一個連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
進(jìn)一步論述這個問題:
===============================
--------------客戶端主動關(guān)閉連接-----------------------
注意一個問題罩润,進(jìn)入TIME_WAIT狀態(tài)的一般情況下是客戶端翼馆。
大多數(shù)服務(wù)器端一般執(zhí)行被動關(guān)閉割以,服務(wù)器不會進(jìn)入TIME_WAIT狀態(tài)。
當(dāng)在服務(wù)器端關(guān)閉某個服務(wù)再重新啟動時严沥,服務(wù)器是會進(jìn)入TIME_WAIT狀態(tài)的猜极。
舉例:
1.客戶端連接服務(wù)器的80服務(wù)消玄,這時客戶端會啟用一個本地的端口訪問服務(wù)器的80跟伏,
訪問完成后關(guān)閉此連接翩瓜,立刻再次訪問服務(wù)器的
80受扳,這時客戶端會啟用另一個本地的端口,而不是剛才使用的那個本地端口勘高。
原因就是剛才的那個連接還處于TIME_WAIT狀態(tài)。
2.客戶端連接服務(wù)器的80服務(wù)坟桅,這時服務(wù)器關(guān)閉80端口,立即再次重啟80端口的服務(wù)仅乓,
這時可能不會成功啟動立美,原因也是服務(wù)器的連
接還處于TIME_WAIT狀態(tài)方灾。
服務(wù)端提供服務(wù)時建蹄,一般監(jiān)聽一個端口就夠了裕偿。例如Apach監(jiān)聽80端口洞慎。
客戶端則是使用一個本地的空閑端口(大于1024),與服務(wù)端的Apache的80端口建立連接劲腿。
當(dāng)通信時使用短連接,并由客戶端主動關(guān)閉連接時鸟妙,主動關(guān)閉連接的客戶端會產(chǎn)生TIME_WAIT狀態(tài)的連接,一個TIME_WAIT狀態(tài)的連接就占用了一個本地端口重父。
這樣在TIME_WAIT狀態(tài)結(jié)束之前花椭,本地最多就能承受6萬個TIME_WAIT狀態(tài)的連接房午,就無端口可用了矿辽。
客戶端與服務(wù)端進(jìn)行短連接的TCP通信,如果在同一臺機(jī)器上進(jìn)行壓力測試模擬上萬的客戶請求袋倔,
并且循環(huán)與服務(wù)端進(jìn)行短連接通信雕蔽,那么這臺機(jī)器將產(chǎn)生4000個左右的TIME_WAIT socket宾娜,
后續(xù)的短連接就會產(chǎn)生address already in use : connect的異常批狐。
關(guān)閉的時候使用RST的方式,不進(jìn)入 TIME_WAIT狀態(tài)贾陷,是否可行?
--------------服務(wù)端主動關(guān)閉連接------------------------------
服務(wù)端提供在服務(wù)時嘱根,一般監(jiān)聽一個端口就夠了。例如Apach監(jiān)聽80端口该抒。
客戶端則是使用一個本地的空閑端口(大于1024)慌洪,與服務(wù)端的Apache的80端口建立連接凑保。
當(dāng)通信時使用短連接冈爹,并由服務(wù)端主動關(guān)閉連接時欧引,主動關(guān)閉連接的服務(wù)端會產(chǎn)生TIME_WAIT狀態(tài)的連接频伤。
由于都連接到服務(wù)端80端口,服務(wù)端的TIME_WAIT狀態(tài)的連接會有很多個憋肖。
假如server一秒鐘處理1000個請求,那么就會積壓240秒*1000=24萬個TIME_WAIT的記錄婚苹,服務(wù)有能力維護(hù)這24萬個記錄。
大多數(shù)服務(wù)器端一般執(zhí)行被動關(guān)閉膊升,服務(wù)器不會進(jìn)入TIME_WAIT狀態(tài)怎炊。
服務(wù)端為了解決這個TIME_WAIT問題廓译,可選擇的方式有三種:
保證由客戶端主動發(fā)起關(guān)閉(即做為B端)
關(guān)閉的時候使用RST的方式
對處于TIME_WAIT狀態(tài)的TCP允許重用
一般Apache的配置是:
Timeout 30
KeepAlive On #表示服務(wù)器端不會主動關(guān)閉鏈接
MaxKeepAliveRequests 100
KeepAliveTimeout 180
表示:Apache不會主動關(guān)閉鏈接评肆,
兩種情況下Apache會主動關(guān)閉連接:
1非区、Apache收到了http協(xié)議頭中有客戶端要求Apache關(guān)閉連接信息瓜挽,如setRequestHeader("Connection", "close");
2、連接保持時間達(dá)到了180秒的超時時間秸抚,將關(guān)閉速和。
如果配置如下:
KeepAlive Off #表示服務(wù)器端會響應(yīng)完數(shù)據(jù)后主動關(guān)閉鏈接
TIME_WAIT
# 使配置文件生效
[root@jokerpro ~]# sysctl –p
提示:
由于CentOS7.X系統(tǒng)中的模塊名不是ip_conntrack歹垫,而是nf_conntrack剥汤,所以在/etc/sysctl.conf優(yōu)化時,需要把net.ipv4.netfilter.ip_conntrack_max 這種老的參數(shù)吭敢,改成net.netfilter.nf_conntrack_max這樣才可以。
即對防火墻的優(yōu)化暮芭,在5.8上是
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
對于 ip_conntrack_max 計(jì)算方法
-允許的最大跟蹤連接條目,在這篇文檔中我們叫作CONNTRACK_MAX
CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32)
這里x是指針的bit數(shù)辕宏,(例如畜晰,32或者64bit)
內(nèi)存為8G
CONNTRACK_MAX = 810241024*1024 / 16384 / (64 / 32)
CONNTRACK_MAX
在7.4上是
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
另外瑞筐,在此優(yōu)化過程中可能會有報(bào)錯:
1凄鼻、5.8版本上
error: "net.ipv4.ip_conntrack_max"is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_max"is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unknown key
error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unknown key
這個錯誤可能是你的防火墻沒有開啟或者自動處理可載入的模塊ip_conntrack沒有自動載入聚假,解決辦法有二块蚌,一是開啟防火墻,二是自動處理開載入的模塊ip_conntrack
modprobe ip_conntrack
echo "modprobe ip_conntrack">> /etc/rc.local
2峭范、6.4版本上
error: "net.nf_conntrack_max"isan unknown key
error: "net.netfilter.nf_conntrack_max"isan unknown key
error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unknown key
error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unknown key
error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unknown key
error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unknown key
這個錯誤可能是你的防火墻沒有開啟或者自動處理可載入的模塊ip_conntrack沒有自動載入,
解決辦法有二瘪贱,一是開啟防火墻,二是自動處理開載入的模塊ip_conntrack
modprobe nf_conntrack
echo "modprobe nf_conntrack">> /etc/rc.local
3菜秦、6.4版本上
error: "net.bridge.bridge-nf-call-ip6tables"isan unknown key
error: "net.bridge.bridge-nf-call-iptables"isan unknown key
error: "net.bridge.bridge-nf-call-arptables"isan unknown key
這個錯誤是由于自動處理可載入的模塊bridge沒有自動載入其徙,解決辦法是自動處理開載入的模塊ip_conntrack
modprobe bridge
echo "modprobe bridge">> /etc/rc.local