转帖:对linux中半增加半连接数量和防止服务器被dos***
1.增大隊列SYN最大半連接數
? ? 在Linux中執行命令"sysctl -a|grep net.ipv4.tcp_max_syn_backlog",在返回的"net.ipv4.tcp_max_syn_backlog=256"中顯示 Linux隊列的最大半連接容量是256.這個默認值對于Web服務器來說是遠遠不夠的,一次簡單的SYN***就足以將其完全占用.因此,防御DOS***最簡單的辦法就是增大這個默認值,在Linux中執行命令"sysctl -w et.ipv4.tcp_max_syn_backlog=3000",這樣就可以將隊列SYN最大半連接數容量值改為3000了
2.減小超時值
在Linux中建立TCP連接時,在客戶端和服務器之間創建握手過程中,當服務器未收到客戶端的確認包時,會重發請求包,一直到超時才將此條目從未連接隊列是刪除,也就是說半連接存在一定的存活時間,超過這個時間,半連接就會自動斷開,在上述SYN***測試中,當經過較長的的時間后,就會發現一些半連接已經自動斷開了.半連接存活時間實際上是系統所有重傳次數等待的超時時間之和,這個值越大,半連接數占用的Backlog隊列的時間就越長,系統能處理的 SYN請求就越少,因此,縮短超時時間就可以有效防御SYN***,這可以通過縮小重傳超時時間和減少重傳次數來實現.在Linux中默認的重傳次數為5 次,總超時時間為3分鐘,在Linux中執行命令"sysctl -w net.ipv4.tcp_synack_retries=1",將超時重傳次數設置為1.
3.利用SYN cookie來防御DOS***
除了在TCP協議棧中開辟一個內存空間來存儲半連接數之外,為避免因為SYN請求數量太多,導致該隊列被填滿的情況下,Linux服務器仍然可以處理新的 SYN連接,可以利用SYN Cookie技術來處理SYN連接.什么是SYN Cookie呢?SYN Cookie是用一個Cookie來響應TCP SYN請求的,在正常的TCP連接過程中,當服務器接收一個SYN數據包,就會返回一個SYN -ACK包來應答,然后進入TCP -SYN -RECV(半開放連接)狀態來等待最后返回的ACK包.服務器用一個數據空間來描述所有未決的連接,然而這個數據空間的大小是有限的,所以***者將塞滿這個空間,在TCP SYN COOKIE的執行過程中,當服務器收到一個SYN包的時候,他返回一個SYN -ACK包,這個數據包的ACK序列號是經過加密的,它由TCP連接的源地址和端口號,目標地址和端口號,以及一個加密種子經過HASH計算得出的,然后服務器釋放所有的狀態.如果一個ACK包從客戶端返回后,服務器重新計算COOKIE來判斷它是不是上個SYN -ACK的返回包.如果是的話,服務器就可以直接進入TCP連接狀態并打開連接.這樣服務器就可以避免守候半開放連接了,在Linux中執行命令"echo "echo "1" > / proc/sys/net/ipv4/tcp_syncookies"> > /etc/rc_local",這樣即可啟動SYN Cookie,并將其添加到了Linux的啟動文件,這樣即使系統重啟也不影響SYN Cookie的激活狀態.
4.過濾可疑的IP直址
當客戶機對服務器進行***時.在服務器上可以進行抓包操作,這樣可以對數據包中的IP進行檢測,然后再對這些可疑的潮行過濾,從而將其無法正常連接服務器.利用Linux自帶的"tcpdump"命令可以實現抓包操作.執行命令"tcpdump -c 1000 -l eth 0 -n dst port 80 > test.txt",就可以在當前目錄下創建一個'test.txt"文件,在其中包含大量的網絡數據包,通過對該文件的的分析,就很容易得到可疑的客戶端IP,之后利用系統自帶的"iptables"命令即可對可疑IP進行屏蔽.便如執行命令"iptables -A INPUT -s 219.29.78.79 -d 0/0 -j REJECT",即可禁止"219.29.78.79"的外部主要訪問本機所有端口.其中"-j REJECT"參數表示禁止訪問.
原文來自:http://www.cnblogs.com/ask2650/archive/2010/02/20/1669582.html
轉載于:https://blog.51cto.com/naonao/1409742
總結
以上是生活随笔為你收集整理的转帖:对linux中半增加半连接数量和防止服务器被dos***的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现textarea限制输入字数
- 下一篇: 连续函数注记