----------------------------------------------------------------------------------------------------------------------------
大
多數(shù) Linux 發(fā)布版都定義了適當(dāng)?shù)木彌_區(qū)和其他 Transmission Control
Protocol(TCP)參數(shù)。可以修改這些參數(shù)來(lái)分配更多的內(nèi)存,從而改進(jìn)網(wǎng)絡(luò)性能。設(shè)置內(nèi)核參數(shù)的方法是通過(guò) proc 接口,也就是通過(guò)讀寫(xiě)
/proc 中的值。幸運(yùn)的是,sysctl 可以讀取 /etc/sysctl.conf 中的值并根據(jù)需要填充
/proc,這樣就能夠更輕松地管理這些參數(shù)。清單 2 展示在互聯(lián)網(wǎng)服務(wù)器上應(yīng)用于 Internet 服務(wù)器的一些比較激進(jìn)的網(wǎng)絡(luò)設(shè)置。
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# 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.ip_local_port_range = 1024 65000
將這些設(shè)置添加到 /etc/sysctl.conf 的現(xiàn)有內(nèi)容中。第一個(gè)設(shè)置啟用 TCP SYN cookie。當(dāng)從客戶機(jī)發(fā)來(lái)新的
TCP 連接時(shí),數(shù)據(jù)包設(shè)置了 SYN 位,服務(wù)器就為這個(gè)半開(kāi)的連接創(chuàng)建一個(gè)條目,并用一個(gè) SYN-ACK
數(shù)據(jù)包進(jìn)行響應(yīng)。在正常操作中,遠(yuǎn)程客戶機(jī)用一個(gè) ACK 數(shù)據(jù)包進(jìn)行響應(yīng),這會(huì)使半開(kāi)的連接轉(zhuǎn)換為全開(kāi)的。有一種稱為 SYN 泛濫(SYN
flood) 的網(wǎng)絡(luò)攻擊,它使 ACK 數(shù)據(jù)包無(wú)法返回,導(dǎo)致服務(wù)器用光內(nèi)存空間,無(wú)法處理到來(lái)的連接。SYN cookie
特性可以識(shí)別出這種情況,并使用一種優(yōu)雅的方法保留隊(duì)列中的空間(細(xì)節(jié)參見(jiàn) 參考資料
一節(jié))。大多數(shù)系統(tǒng)都默認(rèn)啟用這個(gè)特性,但是確保配置這個(gè)特性更可靠。
啟用 TCP 窗口伸縮使客戶機(jī)能夠以更高的速度下載數(shù)據(jù)。TCP 允許在未從遠(yuǎn)程端收到確認(rèn)的情況下發(fā)送多個(gè)數(shù)據(jù)包,默認(rèn)設(shè)置是最多 64 KB,在與延遲比較大的遠(yuǎn)程客戶機(jī)進(jìn)行通信時(shí)這個(gè)設(shè)置可能不夠。窗口伸縮會(huì)在頭中啟用更多的位,從而增加窗口大小。
后面四個(gè)配置項(xiàng)增加 TCP 發(fā)送和接收緩沖區(qū)。這使應(yīng)用程序可以更快地丟掉它的數(shù)據(jù),從而為另一個(gè)請(qǐng)求服務(wù)。還可以強(qiáng)化遠(yuǎn)程客戶機(jī)在服務(wù)器繁忙時(shí)發(fā)送數(shù)據(jù)的能力。
最后一個(gè)配置項(xiàng)增加可用的本地端口數(shù)量,這樣就增加了可以同時(shí)服務(wù)的最大連接數(shù)量。
在下一次引導(dǎo)系統(tǒng)時(shí),或者下一次運(yùn)行 sysctl -p /etc/sysctl.conf 時(shí),這些設(shè)置就會(huì)生效。
----------------------------------------------------------------------------------------------------------------------------
磁盤(pán)子系統(tǒng)的調(diào)優(yōu)
磁盤(pán)在 LAMP 架構(gòu)中扮演著重要的角色。靜態(tài)文件、模板和代碼都來(lái)自磁盤(pán),組成數(shù)據(jù)庫(kù)的數(shù)據(jù)表和索引也來(lái)自磁盤(pán)。對(duì)磁盤(pán)的許多調(diào)優(yōu)(尤其是對(duì)于數(shù)據(jù)庫(kù))集中于避免磁盤(pán)訪問(wèn),因?yàn)榇疟P(pán)訪問(wèn)的延遲相當(dāng)高。因此,花一些時(shí)間對(duì)磁盤(pán)硬件進(jìn)行優(yōu)化是有意義的。
首先要做的是,確保在文件系統(tǒng)上禁用 atime 日志記錄特性。atime
是最近訪問(wèn)文件的時(shí)間,每當(dāng)訪問(wèn)文件時(shí),底層文件系統(tǒng)必須記錄這個(gè)時(shí)間戳。因?yàn)橄到y(tǒng)管理員很少使用
atime,禁用它可以減少磁盤(pán)訪問(wèn)時(shí)間。禁用這個(gè)特性的方法是,在 /etc/fstab 的第四列中添加 noatime 選項(xiàng)。
演示如何啟用 noatime 的 fstab 示例
/dev/VolGroup00/LogVol00 / ext3 defaults,noatime 1 1
LABEL=/boot /boot ext3 defaults,noatime 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=SWAP-hdb2 swap swap defaults 0 0
LABEL=SWAP-hda3 swap swap defaults 0 0
有多種磁盤(pán)硬件組合,而且 Linux 不一定能夠探測(cè)出訪問(wèn)磁盤(pán)的最佳方式。可以使用 hdparm 命令查明和設(shè)置用來(lái)訪問(wèn)
IDE 磁盤(pán)的方法。hdparm -t /path/to/device
執(zhí)行速度測(cè)試,可以將這個(gè)測(cè)試結(jié)果作為性能基準(zhǔn)。為了使結(jié)果盡可能準(zhǔn)確,在運(yùn)行這個(gè)命令時(shí)系統(tǒng)應(yīng)該是空閑的。
在 /dev/hd 上執(zhí)行的速度測(cè)試
# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 182 MB in 3.02 seconds = 60.31 MB/sec
hdparm 的常用選項(xiàng)
選項(xiàng) 描述
-vi 向磁盤(pán)查詢它支持的設(shè)置以及它正在使用的設(shè)置。
-c 查詢/啟用 (E)IDE 32 位 I/O 支持。hdparm -c 1 /dev/hda 啟用這個(gè)設(shè)置。
-m 查詢/設(shè)置每中斷多扇區(qū)模式。如果設(shè)置大于零,設(shè)置值就是每個(gè)中斷可以傳輸?shù)淖畲笊葏^(qū)數(shù)量。
-d 1 -X 啟用直接內(nèi)存訪問(wèn)(DMA)傳輸并設(shè)置 IDE 傳輸模式。hdparm 手冊(cè)頁(yè)詳細(xì)說(shuō)明了在 -X 后面可以設(shè)置的數(shù)字。只有在 -vi 說(shuō)明目前并未使用最快速的模式的情況下,才需要進(jìn)行這個(gè)設(shè)置。
不幸的是,對(duì)于 Fiber Channel and Small Computer Systems Interface(SCSI)系統(tǒng),調(diào)優(yōu)依賴于具體的驅(qū)動(dòng)器。
必須將有幫助的設(shè)置添加到啟動(dòng)腳本中,比如 rc.local。
----------------------------------------------------------------------------------------------------------------------------
TCP/IP子系統(tǒng)的調(diào)優(yōu)
所有的TCP/IP調(diào)優(yōu)參數(shù)都位于/proc/sys/net/目錄. 例如, 下面是最重要的一些調(diào)優(yōu)參數(shù), 后面是它們的含義:
1. /proc/sys/net/core/rmem_max — 最大的TCP數(shù)據(jù)接收緩沖
2. /proc/sys/net/core/wmem_max — 最大的TCP數(shù)據(jù)發(fā)送緩沖
3. /proc/sys/net/ipv4/tcp_timestamps — 時(shí)間戳在(請(qǐng)參考RFC 1323)TCP的包頭增加12個(gè)字節(jié)
4. /proc/sys/net/ipv4/tcp_sack — 有選擇的應(yīng)答
5. /proc/sys/net/ipv4/tcp_window_scaling — 支持更大的TCP窗口. 如果TCP窗口最大超過(guò)65535(64K), 必須設(shè)置該數(shù)值為1
6. rmem_default — 默認(rèn)的接收窗口大小
7. rmem_max — 接收窗口的最大大小
8. wmem_default — 默認(rèn)的發(fā)送窗口大小
9. wmem_max — 發(fā)送窗口的最大大小
/proc目錄下的所有內(nèi)容都是臨時(shí)性的, 所以重啟動(dòng)系統(tǒng)后任何修改都會(huì)丟失.
建議在系統(tǒng)啟動(dòng)時(shí)自動(dòng)修改TCP/IP參數(shù):
把下面代碼增加到/etc/rc.local文件, 然后保存文件, 系統(tǒng)重新引導(dǎo)的時(shí)候會(huì)自動(dòng)修改下面的TCP/IP參數(shù):
echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
TCP/IP參數(shù)都是自解釋的, TCP窗口大小設(shè)置為256960, 禁止TCP的時(shí)間戳(取消在每個(gè)數(shù)據(jù)包的頭中增加12字節(jié)), 支持更大的TCP窗口和TCP有選擇的應(yīng)答.
上面數(shù)值的設(shè)定是根據(jù)互連網(wǎng)連接和最大帶寬/延遲率來(lái)決定.
注: 上面實(shí)例中的數(shù)值可以實(shí)際應(yīng)用, 但它只包含了一部分參數(shù).
另外一個(gè)方法: 使用 /etc/sysctl.conf 在系統(tǒng)啟動(dòng)時(shí)將參數(shù)配置成您所設(shè)置的值:
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1
----------------------------------------------------------------------------------------------------------------------------
文件子系統(tǒng)的調(diào)優(yōu)
ulimit -a 用來(lái)顯示當(dāng)前的各種用戶進(jìn)程限制。
Linux對(duì)于每個(gè)用戶,系統(tǒng)限制其最大進(jìn)程數(shù)。為提高性能,可以根據(jù)設(shè)備資源情況,
設(shè)置各linux 用戶的最大進(jìn)程數(shù),下面我把某linux用戶的最大進(jìn)程數(shù)設(shè)為10000個(gè):
ulimit -u 10000
對(duì)于需要做許多 socket 連接并使它們處于打開(kāi)狀態(tài)的 Java 應(yīng)用程序而言,
最好通過(guò)使用 ulimit -n xx 修改每個(gè)進(jìn)程可打開(kāi)的文件數(shù),缺省值是 1024。
ulimit -n 4096 將每個(gè)進(jìn)程可以打開(kāi)的文件數(shù)目加大到4096,缺省為1024
其他建議設(shè)置成無(wú)限制(unlimited)的一些重要設(shè)置是:
數(shù)據(jù)段長(zhǎng)度:ulimit -d unlimited
最大內(nèi)存大小:ulimit -m unlimited
堆棧大小:ulimit -s unlimited
CPU 時(shí)間:ulimit -t unlimited
虛擬內(nèi)存:ulimit -v unlimited
暫時(shí)地,適用于通過(guò) ulimit 命令登錄 shell 會(huì)話期間。
永久地,通過(guò)將一個(gè)相應(yīng)的 ulimit 語(yǔ)句添加到由登錄 shell 讀取的文件中, 即特定于 shell 的用戶資源文件,如:
1)、解除 Linux 系統(tǒng)的最大進(jìn)程數(shù)和最大文件打開(kāi)數(shù)限制:
vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
說(shuō)明:* 代表針對(duì)所有用戶
noproc 是代表最大進(jìn)程數(shù)
nofile 是代表最大文件打開(kāi)數(shù)
2)、讓 SSH 接受 Login 程式的登入,方便在 ssh 客戶端查看 ulimit -a 資源限制:
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改為 yes,并把 # 注釋去掉
b、重啟 sshd 服務(wù):
/etc/init.d/sshd restart
3)、修改所有 linux 用戶的環(huán)境變量文件:
vi /etc/profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
/**************************************
有時(shí)候在程序里面需要打開(kāi)多個(gè)文件,進(jìn)行分析,系統(tǒng)一般默認(rèn)數(shù)量是1024,(用ulimit -a可以看到)對(duì)于正常使用是夠了,但是對(duì)于程序來(lái)講,就太少了。
修改2個(gè)文件。
1./etc/security/limits.conf
vi /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
2./etc/pam.d/login
session required /lib/security/pam_limits.so
**********
另外確保/etc/pam.d/system-auth文件有下面內(nèi)容
session required /lib/security/$ISA/pam_limits.so
這一行確保系統(tǒng)會(huì)執(zhí)行這個(gè)限制。
***********
3.一般用戶的.bash_profile
#ulimit -n 1024
重新登陸ok
----------------------------------------------------------------------------------------------------------------------------
內(nèi)存子系統(tǒng)的調(diào)優(yōu)
內(nèi)存子系統(tǒng)的調(diào)優(yōu)不是很容易,需要不停地監(jiān)測(cè)來(lái)保證內(nèi)存的改變不會(huì)對(duì)服務(wù)器的其他子系統(tǒng)造成負(fù)面影響。如果要改變虛擬內(nèi)存參數(shù)(在/proc/sys/vm),建議您每次只改變一個(gè)參數(shù)然后監(jiān)測(cè)效果。對(duì)與虛擬內(nèi)存的調(diào)整包括以下幾個(gè)項(xiàng)目:
配置Linux內(nèi)核如何更新dirty
buffers到磁盤(pán)。磁盤(pán)緩沖區(qū)用于暫存磁盤(pán)的數(shù)據(jù)。相對(duì)于內(nèi)存來(lái)講,磁盤(pán)緩沖區(qū)的速度很慢。因此,如果服務(wù)器使用這類內(nèi)存,性能會(huì)成問(wèn)題。當(dāng)緩沖區(qū)內(nèi)
的數(shù)據(jù)完全dirty,使用:sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0"
vm.bdflush有9個(gè)參數(shù),但是建議您只改變其中的3個(gè):
1 nfract, 為排隊(duì)寫(xiě)入磁盤(pán)前,bdflush daemon允許的緩沖區(qū)最大百分比
2 ndirty, 為bdflush即刻寫(xiě)的最大緩沖區(qū)的值。如果這個(gè)值很大,bdflush需要更多的時(shí)間完成磁盤(pán)的數(shù)據(jù)更新。
7 nfract_sync, 發(fā)生同步前,緩沖區(qū)變dirty的最大百分比
配置kswapd daemon,指定Linux的內(nèi)存頁(yè)數(shù)量
sysctl -w vm.kswapd="1024 32 64"
三個(gè)參數(shù)的描述如下:
– tries_base 相當(dāng)于內(nèi)核每次所的“頁(yè)”的數(shù)量的四倍。對(duì)于有很多交換信息的系統(tǒng),增加這個(gè)值可以改進(jìn)性能。
– tries_min 是每次kswapd swaps出去的pages的最小數(shù)量。
– swap_cluster 是kswapd 即刻寫(xiě)如的pages數(shù)量。數(shù)值小,會(huì)提高磁盤(pán)I/O的性能;數(shù)值大可能也會(huì)對(duì)請(qǐng)求隊(duì)列產(chǎn)生負(fù)面影響。
如果要對(duì)這些參數(shù)進(jìn)行改動(dòng),請(qǐng)使用工具vmstat檢查對(duì)性能的影響。其它可以改進(jìn)性能的虛擬內(nèi)存參數(shù)為:
_ buffermem
_ freepages
_ overcommit_memory
_ page-cluster
_ pagecache
_ pagetable_cache
----------------------------------------------------------------------------------------------------------------------------
網(wǎng)絡(luò)子系統(tǒng)的調(diào)優(yōu)
操作系統(tǒng)安裝完畢,就要對(duì)網(wǎng)絡(luò)子系統(tǒng)進(jìn)行調(diào)優(yōu)。對(duì)其它子系統(tǒng)的影響:影響CPU利用率,尤其在有大量TCP連接、塊尺寸又非常小時(shí),內(nèi)存的使用會(huì)明顯增加。
如何預(yù)防性能下降
如下的sysctl命令用于改變安全設(shè)置,但是它也可以防止網(wǎng)絡(luò)性能的下降。這些命令被設(shè)置為缺省值。
◆關(guān)閉如下參數(shù)可以防止黑客對(duì)服務(wù)器IP地址的攻擊
sysctl -w net.ipv4.conf.eth0.accept_source_route=0
sysctl -w net.ipv4.conf.lo.accept_source_route=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.all.accept_source_route=0
◆開(kāi)啟TCP SYN cookies,保護(hù)服務(wù)器避免受syn-flood攻擊,包括服務(wù)取決denial-of-service
(DoS) 或者分布式服務(wù)拒絕distributed denial-of-service (DDoS) (僅適用Red Hat
Enterprise Linux AS)
sysctl -w net.ipv4.tcp_syncookies=1
◆以下命令使服務(wù)器忽略來(lái)自被列入網(wǎng)關(guān)的服務(wù)器的重定向。因重定向可以被用來(lái)進(jìn)行攻擊,所以我們只接受有可靠來(lái)源的重定向。
sysctl -w net.ipv4.conf.eth0.secure_redirects=1
sysctl -w net.ipv4.conf.lo.secure_redirects=1
sysctl -w net.ipv4.conf.default.secure_redirects=1
sysctl -w net.ipv4.conf.all.secure_redirects=1
另外,你可以配置接受或拒絕任何ICMP重定向。ICMP重定向是器傳輸信息的機(jī)制。比如,當(dāng)網(wǎng)關(guān)接收到來(lái)自所接網(wǎng)絡(luò)主機(jī)的
Internet數(shù)據(jù)報(bào)時(shí),網(wǎng)關(guān)可以發(fā)送重定向信息到一臺(tái)主機(jī)。網(wǎng)關(guān)檢查路由表獲得下一個(gè)網(wǎng)關(guān)的地址,第二個(gè)網(wǎng)關(guān)將數(shù)據(jù)報(bào)路由到目標(biāo)網(wǎng)絡(luò).關(guān)閉這些重定向
得命令如下:
sysctl -w net.ipv4.conf.eth0.accept_redirects=0
sysctl -w net.ipv4.conf.lo.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
◆如果這個(gè)服務(wù)器不是一臺(tái)路由器,那么它不會(huì)發(fā)送重定向,所以可以關(guān)閉該功能:
sysctl -w net.ipv4.conf.eth0.send_redirects=0
sysctl -w net.ipv4.conf.lo.send_redirects=0
sysctl -w net.ipv4.conf.default.send_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
◆配置服務(wù)器拒絕接受廣播風(fēng)暴或者smurf 攻擊attacks:
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
◆忽略所有icmp包或者pings:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
◆有些路由器針對(duì)廣播禎發(fā)送無(wú)效的回應(yīng),每個(gè)都產(chǎn)生警告并在內(nèi)核產(chǎn)生日志.這些回應(yīng)可以被忽略:
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
針對(duì)TCP和UDP的調(diào)優(yōu)
下邊的命令用來(lái)對(duì)連接數(shù)量非常大的服務(wù)器進(jìn)行調(diào)優(yōu).
◆對(duì)于同時(shí)支持很多連接的服務(wù)器,新的連接可以重新使用TIME-WAIT套接字. 這對(duì)于Web服務(wù)器非常有效:
sysctl -w net.ipv4.tcp_tw_reuse=1
如果你使用該命令,還要啟動(dòng)TIME-WAIT 套接字狀態(tài)的快速循環(huán)功能:
sysctl -w net.ipv4.tcp_tw_recycle=1
圖Figure 10-7顯示出將這些功能啟用,連接數(shù)量明顯降低.因?yàn)槊總€(gè)TCP傳輸都包含遠(yuǎn)程客戶端的信息緩存,所以有利于提高性能.緩存中存放round-trip時(shí)間、最大segment大小、擁塞窗口的信息。
◆
參數(shù)tcp_fin_timeout 是套接字關(guān)閉時(shí),保持FIN-WAIT-2狀態(tài)的時(shí)間。一個(gè)TCP連接以three-segment
SYN序列開(kāi)始, 以three-segment FIN序列結(jié)束.均不保留數(shù)據(jù).通過(guò)改變tcp_fin_timeout的值,
從FIN序列到內(nèi)存可以空閑出來(lái)處理新連接的時(shí)間縮短了,使性能得到改進(jìn).改變這個(gè)值的前要經(jīng)過(guò)認(rèn)真的監(jiān)測(cè),避免因?yàn)樗捞捉幼衷斐蓛?nèi)存溢出.
sysctl -w net.ipv4.tcp_fin_timeout=30
◆服務(wù)器的一個(gè)問(wèn)題是,同一時(shí)刻的大量TCP連接里有很多的連接被打開(kāi)但是沒(méi)有使用. TCP的keepalive功能檢測(cè)到這些連接,缺省情況下,在2小時(shí)之后丟掉. 2個(gè)小時(shí)的可能導(dǎo)致內(nèi)存過(guò)度使用,降低性能.因此改成1800秒(30分鐘)是個(gè)更好的選擇:
sysctl -w net.ipv4.tcp_keepalive_time=1800
◆對(duì)于所有的隊(duì)列,設(shè)置最大系統(tǒng)發(fā)送緩存(wmem) 和接收緩存(rmem)到8MB
sysctl -w net.ipv4.core.wmem_max=8388608
sysctl -w net.ipv4.core.rmem_max=8388608
這些設(shè)置指定了創(chuàng)建TCP套接字時(shí)為其分配的內(nèi)存容量. 另外,使用如下命令發(fā)送和接收緩存.該命令設(shè)定了三個(gè)值:最小值、初始值和最大值:
sysctl -w net.ipv4.tcp_rmem="4096 87380 8388608"
sysclt -w net.ipv4.tcp.wmem="4096 87380 8388608"
第三個(gè)值必須小于或等于wmem_max和rmem_max。
◆(SUSE LINUX Enterprise Server適用) 通過(guò)保留路徑驗(yàn)證來(lái)源數(shù)據(jù)包。缺省情況下,路由器轉(zhuǎn)發(fā)所有的數(shù)據(jù)包,即便是明顯的異常網(wǎng)絡(luò)流量。通過(guò)啟動(dòng)和是的過(guò)濾功能,丟掉這些數(shù)據(jù)包:
sysctl -w net.ipv4.conf.eth0.rp_filter=1
sysctl -w net.ipv4.conf.lo.rp_filter=1
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.all.rp_filter=1
◆當(dāng)服務(wù)器負(fù)載繁重或者是有很多客戶端都是超長(zhǎng)延時(shí)的連接故障,可能會(huì)導(dǎo)致half-open連接數(shù)量的增加。這對(duì)于Web服務(wù)器很來(lái)講很平
常,尤其有很多撥號(hào)客戶時(shí).這些half-open連接保存在 backlog connections 隊(duì)列中.將這個(gè)值最少設(shè)置為4096
(缺省為1024). 即便是服務(wù)器不接收這類連接,設(shè)置這個(gè)值還能防止受到denial-of-service (syn-flood)的攻擊.
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
◆設(shè)置ipfrag參數(shù),尤其是NFS和Samba服務(wù)器。這里,我們可以設(shè)置用于重新組合IP碎片的最大、最小內(nèi)存。當(dāng)ipfrag_high_thresh值被指派,碎片會(huì)被丟棄直到達(dá)到ipfrag_low_thres值。
當(dāng)TCP數(shù)據(jù)包傳輸發(fā)生錯(cuò)誤時(shí),開(kāi)始碎片整理。有效的數(shù)據(jù)包保留在內(nèi)存,同時(shí)損壞的數(shù)據(jù)包被轉(zhuǎn)發(fā)。例如,設(shè)置可用內(nèi)存范圍從256 MB到384 MB
sysctl -w net.ipv4.ipfrag_low_thresh=262144
sysctl -w net.ipv4.ipfrag_high_thresh=393216
----------------------------------------------------------------------------------------------------------------------------
網(wǎng)絡(luò)安全設(shè)置:
TCP SYN Flood 攻擊
TCP SYN Flood是一種常見(jiàn),而且有效的遠(yuǎn)端(遠(yuǎn)程)拒絕服務(wù)(Denial of
Service)攻擊方式,它透過(guò)一定的操作破壞TCP三次握手建立正常連接,佔(zhàn)用並耗費(fèi)系統(tǒng)資源,使得提供TCP服務(wù)的主機(jī)系統(tǒng)無(wú)法正常工作。
由於TCP SYN
Flood是透過(guò)網(wǎng)路底層對(duì)服務(wù)器Server進(jìn)行攻擊的,它可以在任意改變自己的網(wǎng)路IP地址的同時(shí),不被網(wǎng)路上的其他設(shè)備所識(shí)別,這樣就給防範(fàn)網(wǎng)路犯
罪部門(mén)追查犯罪來(lái)源造成很大的困難。
系統(tǒng)檢查
一般情況下,可以一些簡(jiǎn)單步驟進(jìn)行檢查,來(lái)判斷系統(tǒng)是否正在遭受TCP SYN Flood攻擊。
1、 服務(wù)端無(wú)法提供正常的TCP服務(wù)。連接請(qǐng)求被拒絕或超時(shí)。
2、透過(guò) netstat -an 命令檢查系統(tǒng),發(fā)現(xiàn)有大量的SYN_RECV連接狀態(tài)。
3. iptables的設(shè)置,引用自CU
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人寫(xiě)作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并發(fā)數(shù)每秒1次,可以根據(jù)自己的需要修改
防止各種端口掃描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻擊(Ping of Death)
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
----------------------------------------------------------------------------------------------------------------------------
暫定步驟:
修改/etc/profile文件,加入:
ulimit -u 10240
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
修改/etc/rc.d/rc.local,加入:
echo ‘131072′ > /proc/sys/fs/file-max
echo ‘131072′ > /proc/sys/fs/inode-max
(1G內(nèi)存值修改成:65535 2G內(nèi)存值修改成:131072 4G內(nèi)存值修改成:262144)
修改/etc/sysctl.conf文件,加入:
net.core.rmem_default = 8388608
net.core.rmem_max = 8388608
net.core.wmem_default = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1
net.core.netdev_max_backlog=3000
#Modify i-node
sys.fs.file-max= 65535
sys.fs.inode-max= 65535
#Set System Memory
vm.bdflush="30 500 0 0 500 3000 60 20 0"
vm.kswapd="1024 32 64"
#Disable HackAttack!
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.lo.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.default.secure_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
net.ipv4.tcp_syncookies=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
#Web Servers
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1800
net.ipv4.core.wmem_max=16777216
net.ipv4.core.rmem_max=16777216
net.ipv4.tcp_rmem="4096 87380 8388608"
net.ipv4.tcp.wmem="4096 87380 8388608"
net.ipv4.tcp_max_syn_backlog=8192
防火墻安全:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人寫(xiě)作
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并發(fā)數(shù)每秒1次,可以根據(jù)自己的需要修改
防止各種端口掃描
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻擊(Ping of Death)
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
備注說(shuō)明:(相對(duì)比較激進(jìn)的網(wǎng)絡(luò)參數(shù)調(diào)整)
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# 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 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000
----------------------------------------------------------------------------------------------------------------------------
LINUX安全設(shè)置步驟:
刪除所有那些不能在你系統(tǒng)上使用的默認(rèn)用戶和組賬戶: lp,sync,shutdown,halt, news, uucp, operator, games, gopher
ROOT自動(dòng)從shell注銷(xiāo)
編輯你的配置文件”vi /etc/profile”,在某個(gè)地方加入如下行,
“HISTFILESIZE=”
TMOUT=3600
我們?yōu)樽兞?#8221;TMOUT=”輸入的這個(gè)值使用秒表示的、代表一個(gè)小時(shí)(60*60=3600秒)。如果你將此行加入你的 “/etc/profile” 文件,那么在一小時(shí)的非活動(dòng)狀態(tài)之后將要系統(tǒng)里的所有用戶自動(dòng)注銷(xiāo)。你可以在用戶私人的”.bashrc”文件里面
設(shè)置這個(gè)變量,可以在一個(gè)確定的時(shí)間以后自動(dòng)注銷(xiāo)他們。
禁止并且卸載所有沒(méi)有用的服務(wù)
你必須禁止別切卸載所有你不用的的服務(wù),那樣的話,你就能少擔(dān)心一些。看看你的”/etc/inetd.conf”文件, 用注釋的方法禁用(在一行的開(kāi)始加個(gè)#),然后給inetd進(jìn)程發(fā)送一個(gè)SIGHUP命令去更新到當(dāng)前的”inetd.conf”文件。這樣做:
第一步把”/etc/inetd.conf”更改許可權(quán)限成600,那樣的話,就只有root可以讀和寫(xiě)。
[Root@kapil /]# chmod 600 /etc/inetd.conf
第二步確保”/etc/inetd.conf”的所有者是root。
第
三步編輯inetd.conf文件(vi /etc/inetd.conf),并且禁止一些服務(wù),就像:ftp, telnet, shell,
login, exec, talk, ntalk, imap, pop-2, pop-3, finger,
auth等等,除非你打算用它。關(guān)閉這些服務(wù)就降低一些風(fēng)險(xiǎn)。
第四步給你的inetd進(jìn)程發(fā)送一個(gè)HUP信號(hào)[root@kapil /]# killall -HUP inetd
第五步設(shè)置”/etc/inetd.conf”文件為不可更改,使用 chattr 命令,這樣的話,沒(méi)人能修改那個(gè)文件。*簡(jiǎn)單的設(shè)置文件為不可更改,執(zhí)行如下命令:
[root@kapil /]# chattr +i /etc/inetd.conf
這將防止對(duì)”inetd.conf”文件的任何更改(意外的更改或者其他更改)。只有超級(jí)用戶root能設(shè)置或者清除這個(gè)文件屬性。修改inetd.conf *簡(jiǎn)單的取消不可更改的設(shè)置,執(zhí)行如下命令:
[root@kapil /]# chattr -i /etc/inetd.conf
免疫”/etc/services”文件
你必須免疫 “/etc/services” 文件,防止未經(jīng)授權(quán)的刪除、增加服務(wù)。
免疫 “/etc/services” 文件,使用命令:
[root@kapil /]# chattr +i /etc/services
禁止Control-Alt-Deletc鍵盤(pán)關(guān)機(jī)命令
在你的”/etc/inittab”文件里面注釋掉如下的行(用一個(gè)”#”)。
這樣做,編輯inittab文件(vi /etc/inittab),更換:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
讀入:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
現(xiàn)在,按照如下提示輸入,讓更改生效:
[root@kapil /]# /sbin/init q
為腳本文件整理”/etc/rc.d/init.d”下的權(quán)限
整理腳本文件的許可權(quán)限,可靠的開(kāi)始和結(jié)束所有你需要在引導(dǎo)時(shí)運(yùn)行的常態(tài)進(jìn)程,這樣做:
[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
這意味著只有root可以被允許讀,寫(xiě),和執(zhí)行目錄里面的腳本文件。
隱藏你的系統(tǒng)信息
默認(rèn)狀態(tài)下,當(dāng)你登錄到linux機(jī)器時(shí),他告訴你Linux分布商的名字,版本,核心版本和服務(wù)器名字。這對(duì)一個(gè)駭客來(lái)說(shuō)從你的服務(wù)器得到這些信息足夠了以必須立刻用一個(gè)”Login:”提示符提示用戶。
第一步
這樣做,編輯”/etc/rc.d/rc.local”文件,放置”#”在如下行的前面。
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo “” >; /etc/issue
#echo “$R” >;>; /etc/issue
#echo “Kernel $(uname -r) on $a $(uname -m)” >;>; /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >;>; /etc/issue
第二步
然后,刪除如下文件:在”/etc/”目錄下的”issue.net” 和 “issue”:
[root@kapil /]# rm -f /etc/issue
[root@kapil /]# rm -f /etc/issue.net
禁止未用的 SUID/SGID 程序
一個(gè)常規(guī)用戶如果設(shè)置為SUID root,將能夠作為root運(yùn)行程序。一個(gè)系統(tǒng)管理員必須最小化使用這些 SUID/GUID程序, 而且禁止那些不需要的程序。
第1步
從root擁有的程序里發(fā)現(xiàn)所有有`s’ 位的程序,用此命令:
[root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
* 在被選中的程序上禁止suid 位,鍵入如下命令:
[root@kapil /]# chmod a-s [program]
關(guān)閉ipv6
vi /etc/modprobe.conf,在文件中添加以下兩行
alias net-pf-10 off
alias ipv6 off
----------------------------------------------------------------------------------------------------------------------------