自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CentOS SYN Flood攻擊原理Linux下設(shè)置

系統(tǒng) Linux
未連接隊(duì)列:在三次握手協(xié)議中,服務(wù)器維護(hù)一個(gè)未連接隊(duì)列,該隊(duì)列為每個(gè)客戶端的CentOS SYN包 (syn=j)開設(shè)一個(gè)條目,該條目表明服務(wù)器已收到CentOS SYN包,并向客戶發(fā)出確認(rèn),正在等待客戶的確認(rèn)包。

特別值得一提的是CentOS SYN有很多值得學(xué)習(xí)的地方,這里我們主要介紹CentOS SYN攻擊,包括介紹CentOS SYN 原理等方面。CentOS SYN Flood攻擊利用的是IPv4中TCP協(xié)議的三次握手(Three-Way Handshake)過(guò)程進(jìn)行的攻擊。

一:什么是CentOS SYN Flood攻擊

CentOS SYN Flood攻擊利用的是IPv4中TCP協(xié)議的三次握手(Three-Way Handshake)過(guò)程進(jìn)行的攻擊。這個(gè)協(xié)議規(guī)定,如果一端想向另一端發(fā)起TCP連接,它需要首先發(fā)送TCP SYN (synchronize)包到對(duì)方。

對(duì)方收到后發(fā)送一個(gè)TCP SYN+ACK包回來(lái),發(fā)起方再發(fā)送TCP ACK (ACKnowledge Character)包回去,這樣三次握手就結(jié)束了。在上述過(guò)程中,還有一些重要的概念。

未連接隊(duì)列:在三次握手協(xié)議中,服務(wù)器維護(hù)一個(gè)未連接隊(duì)列,該隊(duì)列為每個(gè)客戶端的CentOS SYN包 (syn=j)開設(shè)一個(gè)條目,該條目表明服務(wù)器已收到CentOS SYN包,并向客戶發(fā)出確認(rèn),正在等待客戶的確認(rèn)包。

這些條目所標(biāo)識(shí)的連接在服務(wù)器處于CentOS SYN_RECV狀態(tài),當(dāng)服務(wù)器收到客戶的確認(rèn)包時(shí),刪除該條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài)?;蛘哒f(shuō)TCP服務(wù)器收到TCP SYN request包時(shí)。

在發(fā)送TCP SYN+ACK包回TCP客戶機(jī)前,TCP服務(wù)器要先分配好一個(gè)數(shù)據(jù)區(qū)專門服務(wù)于這個(gè)即把形成的TCP連接。一般把收到CentOS SYN包而還未收到ACK包時(shí)的連 接狀態(tài)成為半開連接(Half-open Connection)。

Backlog參數(shù):表示未連接隊(duì)列的最大容納數(shù)目。CentOS SYN -ACK 重傳次數(shù):服務(wù)器發(fā)送完CentOS SYN -ACK包,如果未收到客戶確認(rèn)包,服務(wù)器進(jìn)行首次重傳,等待一段時(shí)間仍未收到客戶確認(rèn)包,進(jìn)行第二次重傳,如果重傳次數(shù)超過(guò)系統(tǒng)規(guī)定的最大重傳次數(shù)。

系統(tǒng)將該連接信息從半連接隊(duì)列中刪除。注意,每次重傳等待的時(shí)間不一定相同。半連接存活時(shí)間:是指半連接隊(duì)列的條目存活的最長(zhǎng)時(shí)間,也即服務(wù)從收到SYN包到確認(rèn)這個(gè)報(bào)文無(wú)效的最長(zhǎng)時(shí)間。

該時(shí)間值是所有重傳請(qǐng)求包的最長(zhǎng)等待時(shí)間總和。有時(shí)我們也稱半連接存活時(shí)間為Timeout時(shí)間、CentOS SYN _RECV存活時(shí)間。在最常見的CentOS SYN Flood攻擊中,攻擊者在短時(shí)間內(nèi)發(fā)送大量的TCP SYN包給受害者,這時(shí)攻擊者是TCP客戶機(jī),受害者是TCP服務(wù)器。

根據(jù)上面的描述,受害者會(huì)為每個(gè)TCP SYN包分配一個(gè)特定的數(shù)據(jù)區(qū),只要這些CentOS SYN 包具有不同的源地址(這一點(diǎn)對(duì)于攻擊者來(lái)說(shuō)是很容易偽造的)。這把給TCP服務(wù)器系統(tǒng)造成很大的系統(tǒng)負(fù)擔(dān), 最終導(dǎo)致系統(tǒng)不能正常工作。

二:CentOS SYN Cookie原理

能夠有效防范CentOS SYN Flood攻擊的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk發(fā)明。CentOS SYN Cookie是對(duì)TCP服務(wù)器端的三次握手協(xié)議作一些修改,專門用來(lái)防范CentOS SYN Flood攻擊的一種手段。

它的原理是, 在TCP服務(wù)器收到TCP SYN包并返回TCP SYN+ACK包時(shí),不分配一個(gè)專門的數(shù)據(jù)區(qū),而是根據(jù)這個(gè)CentOS SYN包計(jì)算出一個(gè)cookie值。在收到TCP ACK包時(shí),TCP服務(wù)器在根據(jù)那個(gè)cookie值檢查這個(gè)TCP ACK包的合法性。

如果合法,再分配專門的數(shù)據(jù)區(qū)進(jìn)行處理未來(lái)的TCP連接。下面分Linux和FreeBSD來(lái)說(shuō)說(shuō)如何配置內(nèi)核參數(shù)來(lái)實(shí)現(xiàn)CentOS SYN Cookie

三:Linux下設(shè)置

如果你的服務(wù)器配置不太好,TCP TIME_WAIT套接字?jǐn)?shù)量達(dá)到兩、三萬(wàn),服務(wù)器很容易被拖死。通過(guò)修改Linux內(nèi)核參數(shù),可以減少服務(wù)器的TIME_WAIT套接字?jǐn)?shù)量。

TIME_WAIT可以通過(guò)以下命令查看:以下是代碼片段:netstat -an | grep "TIME_WAIT" | wc -l 在Linux下,如CentOS,可以通過(guò)修改/etc/sysctl.conf文件來(lái)達(dá)到目的。

增加以下幾行:以下是代碼片段:

  1. net.ipv4.tcp_fin_timeout = 30 
  2. net.ipv4.tcp_keepalive_time = 1200 
  3. net.ipv4.tcp_syncookies = 1 
  4. net.ipv4.tcp_tw_reuse = 1 
  5. net.ipv4.tcp_tw_recycle = 1 
  6. net.ipv4.ip_local_port_range = 102465000 
  7. net.ipv4.tcp_max_syn_backlog = 8192 
  8. net.ipv4.tcp_max_tw_buckets = 5000 
  9. net.ipv4.tcp_synack_retries = 2 
  10. net.ipv4.tcp_syn_retries = 2  

說(shuō)明:

net.ipv4.tcp_syncookies = 1 表示開啟CentOS SYN Cookies,這是個(gè)BOOLEAN。當(dāng)出現(xiàn)CentOS SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理,可防范少量CentOS SYN攻擊,默認(rèn)為0,表示關(guān)閉;

net.ipv4.tcp_tw_reuse = 1 表示開啟重用,這是個(gè)BOOLEAN。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;

net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,這是個(gè)BOOLEAN,默認(rèn)為0,表示關(guān)閉。

net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。單位為秒。

net.ipv4.tcp_keepalive_time = 1200 表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí),改為20分鐘。單位為秒。

net.ipv4.ip_local_port_range = 102465000 表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192 表示CentOS SYN隊(duì)列的長(zhǎng)度,默認(rèn)為1024,加大隊(duì)列長(zhǎng)度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。

net.ipv4.tcp_max_tw_buckets = 5000 表示系統(tǒng)同時(shí)保持TIME_WAIT套接字的最大數(shù)量,如果超過(guò)這個(gè)數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。

默認(rèn)為180000,改 為5000。對(duì)于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對(duì)于Squid,效果卻不大。此項(xiàng)參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。

net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries是定義CentOS SYN重試次數(shù)。 執(zhí)行以下命令使配置生效:以下是代碼片段:/sbin/sysctl -p 如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:以下是代碼片段:/sbin/sysctl -w key=value

四:FreeBSD下設(shè)置

yayu個(gè)人學(xué)習(xí)的觀點(diǎn):FreeBSD中對(duì)CentOS SYN的防御和Linux下可能不一樣,配置的參數(shù)也不完全相同,相關(guān)配置和理解可能不對(duì):)TCP鏈接中有一個(gè)MSL(max segment lifetime)的概念,也就是最大生成時(shí)間,MSL 的值在一般的實(shí)現(xiàn)中取30s,有些實(shí)現(xiàn)采用2分鐘。

在TCP的狀態(tài)機(jī)中的“被動(dòng)關(guān)閉”:從CLOSE_WAIT到LAST_ACK中有一個(gè)如下的規(guī)則:當(dāng) TCP執(zhí)行一個(gè)主動(dòng)關(guān)閉,并發(fā)回最后一個(gè)ACK,該連接必須在TIME_WAIT狀態(tài)停留的時(shí)間為2倍的MSL。這樣可讓TCP再次發(fā)送最后的ACK以防 這個(gè)ACK丟失(另一端超時(shí)并重發(fā)最后的 FIN)。

存在這個(gè)規(guī)則導(dǎo)致一個(gè)后果就是在這個(gè)2*MSL的時(shí)間內(nèi),該地址上的鏈接(客戶端地址、端口和服務(wù)器端的地址、端口)不能被使用。比如我們?cè)诮⒁粋€(gè)鏈接后關(guān)閉鏈接然后迅速重啟鏈接,那么就會(huì)出現(xiàn)端口不可用的情況。

TIME_WAIT時(shí)間是2*MSL。因此可以通過(guò)調(diào)整net.inet.tcp.msl來(lái)減少TIME_WAIT時(shí)間。對(duì)于Web服務(wù)器完全可以將這個(gè)值調(diào)整為7500或2000(訪問(wèn)一個(gè)web,超過(guò)4~15秒頁(yè)面還刷不出來(lái),就可以考慮放棄了-_-)

參數(shù)設(shè)置參考:

以下是引用片段:net.inet.tcp.syncookies=1防止DOS攻擊net.inet.tcp.msl=7500防止DOS攻擊,默認(rèn)為30000net.inet.tcp.blackhole=2接收到一個(gè)已經(jīng)關(guān)閉的端口發(fā)來(lái)的所有包,直接drop,如果設(shè)置為1則是只針對(duì)TCP包

net.inet.udp.blackhole=1接收到一個(gè)已經(jīng)關(guān)閉的端口發(fā)來(lái)的所有UDP包直接dropFreeBSD下,yayu沒看見“/sbin/sysctl -p”這樣的命令可以使/etc/sysctl.conf的內(nèi)容生效,所以直接使用命令了:

以下是代碼片段:sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1

五:其他

除了修改服務(wù)器的內(nèi)核參數(shù),還可以修改apache的配置文件中的Timeout、KeepAlive、MaxClients等參數(shù)來(lái)防止Dos攻擊,如果有接口調(diào)用,還要注意控制一下調(diào)用的時(shí)間。請(qǐng)聽下文分解。

ACK 英文縮寫: ACK (ACKnowledge Character) 中文譯名: 確認(rèn)字符 分 類: 傳輸與接入 解 釋: 在數(shù)據(jù)通信傳輸中,接收站發(fā)給發(fā)送站的一種傳輸控制字符。它表示確認(rèn)發(fā)來(lái)的數(shù)據(jù)已經(jīng)接受無(wú)誤。

NAK是否定應(yīng)答或者非應(yīng)答的縮寫。它是一個(gè)用于數(shù)字通信中確認(rèn)數(shù)據(jù)受到但是有小錯(cuò)誤的信號(hào)。有時(shí)候NAK信號(hào)也叫REJ(拒絕)。
CentOS SYN 包(synchronize)

TCP連接的第一個(gè)包,非常小的一種數(shù)據(jù)包。CentOS SYN 攻擊包括大量此類的包,由于這些包看上去來(lái)自實(shí)際不存在的站點(diǎn),因此無(wú)法有效進(jìn)行處理。每個(gè)機(jī)器的欺騙包都要花幾秒鐘進(jìn)行嘗試方可放棄提供正常響應(yīng)。

在黑客攻擊事件中,CentOS SYN攻擊是最常見又最容易被利用的一種攻擊手法。CentOS SYN攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,通過(guò)發(fā)送大量的半連接請(qǐng)求,耗費(fèi)CPU和內(nèi)存資源。

CentOS SYN攻擊除了能影響主機(jī)外,還可以危害路由 器、防火墻等網(wǎng)絡(luò)系統(tǒng),事實(shí)上CentOS SYN攻擊并不管目標(biāo)是什么系統(tǒng),只要這些系統(tǒng)打開TCP服務(wù)就可以實(shí)施。服務(wù)器接收到連接請(qǐng)求(syn= j),將此信息加入未連接隊(duì)列,并發(fā)送請(qǐng)求包給客戶(syn=k,ack=j+1),此時(shí)進(jìn)入SYN_RECV狀態(tài)。

當(dāng)服務(wù)器未收到客戶端的確認(rèn)包時(shí),重 發(fā)請(qǐng)求包,一直到超時(shí),才將此條目從未連接隊(duì)列刪除。配合IP欺騙,CentOS SYN攻擊能達(dá)到很好的效果,通常,客戶端在短時(shí)間內(nèi)偽造大量不存在的IP地址,向服 務(wù)器不斷地發(fā)送syn包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn)。

由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些偽造的CentOS SYN包將長(zhǎng)時(shí)間占用未 連接隊(duì)列,正常的CentOS SYN請(qǐng)求被丟棄,目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。

關(guān)于CentOS SYN攻擊防范技術(shù),人們研究得比較早。歸納起來(lái),主要有兩大類,一類是通過(guò)防火墻、路由器等過(guò)濾網(wǎng)關(guān)防護(hù),另一類是通過(guò)加固TCP/IP協(xié)議棧防范.但必須清楚的是,CentOS SYN攻擊不能完全被阻止,我們所做的是盡可能的減輕CentOS SYN攻擊的危害,除非將TCP協(xié)議重新設(shè)計(jì)。

【編輯推薦】

  1. CentOS VNC試驗(yàn)用的工控機(jī)不支持鼠標(biāo)
  2. CentOS gcc安裝問(wèn)題的解決方法
  3. CentOS系統(tǒng)是Linux常見版本之一
  4. CentOS PPPOE安裝配置客戶端軟件和前提條件
  5. CentOS NTFS安裝支持掛載與使用方法
責(zé)任編輯:佚名 來(lái)源: CSDN
相關(guān)推薦

2010-09-17 15:36:21

2010-09-30 10:01:38

2010-09-13 10:26:48

2021-09-28 20:19:09

參數(shù)優(yōu)化Zookeeper

2010-03-10 14:18:09

2010-09-30 11:02:33

2010-08-24 11:24:35

2011-08-29 16:19:01

UbuntuRamDisk

2010-09-13 10:45:04

2014-07-25 14:20:45

Linux腳本

2016-09-21 08:54:33

2009-11-11 10:26:02

LinuxOracle監(jiān)聽自啟動(dòng)

2009-07-06 17:00:17

Ubuntu Linushorewall防火墻

2009-06-29 08:38:14

Linux操作系統(tǒng)

2009-07-03 06:55:33

Linux

2014-04-09 14:15:23

2010-09-14 11:33:39

Linux下設(shè)置tft

2009-08-20 16:45:32

2009-12-07 09:53:27

ubuntu/root

2009-12-17 15:03:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)