Linux安全之三大攻擊(SYN,DDOS,CC)原理及處理
TCP自從1974年被發明出來之後,歷經30多年發展,目前成為最重要的網際網路基礎協議,但TCP協議中也存在一些缺陷。
SYN攻擊就是利用TCP協議的缺陷,來導致系統服務停止正常的響應。
SYN攻擊原理
TCP在傳遞資料前需要經過三次握手,SYN攻擊的原理就是向伺服器傳送SYN資料包,並偽造源IP地址。
伺服器在收到SYN資料包時,會將連線加入backlog佇列,並向源IP傳送SYN-ACK資料包,並等待ACK資料包,以完成三次握手建立連線。
由於源IP地址是偽造的不存在主機IP,所以伺服器無法收到ACK資料包,並會不斷重發,同時backlog佇列被不斷被攻擊的SYN連線佔滿,導致無法處理正常的連線。
SYN攻擊處理
針對SYN攻擊的幾個環節,提出相應的處理方法:
方式1:減少SYN-ACK資料包的重發次數(預設是5次):
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
|
方式2:使用SYN Cookie技術:
sysctl -w net.ipv4.tcp_syncookies=1
|
方式3:增加backlog佇列(預設是1024):
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
|
方式4:限制SYN併發數:
iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT –limit 1/s
|
SYN攻擊模擬
還有一款synkill也可以用來模擬SYN攻擊。
使用DDoS deflate指令碼自動遮蔽攻擊ip
DDoS deflate是一款免費的用來防禦和減輕DDoS攻擊的指令碼。它通過netstat監測跟蹤建立大量網路連線的IP地址,在檢測到某個結點超過預設的限制時,該程式會通過APF或IPTABLES禁止或阻擋這些IP.
DDoS deflate其實是一個Shell指令碼,使用netstat和iptables工具,對那些連結數過多的IP進行封鎖,能有效防止通用的惡意掃描器,但它並不是真正有效的DDoS防禦工具。
DDoS deflate工作過程描述:
同一個IP連結到伺服器的連線數到達設定的伐值後,所有超過伐值的IP將被遮蔽,同時把遮蔽的IP寫入ignore.ip.list檔案中,與此同時會在tmp中生成一個指令碼檔案,這個指令碼檔案馬上被執行,但是一
執行就遇到sleep預設的秒,當睡眠了這麼多的時間後,解除被遮蔽的IP,同時把之前寫入ignore.ip.list檔案中的這個被封鎖的IP刪除,然後刪除臨時生成的檔案。
一個事實:如果被遮蔽的IP手工解遮蔽,那麼如果這個IP繼續產生攻擊,那麼指令碼將不會再次遮蔽它(因為加入到了ignore.ip.list),直到在預設的時間之後才能起作用,加入到了ignore.ip.list中的
IP是檢測的時候忽略的IP。可以把IP寫入到這個檔案以避免這些IP被堵塞,已經堵塞了的IP也會加入到ignore.ip.list中,但堵塞了預定時間後會從它之中刪除。
如何確認是否受到DDOS攻擊?
[root@test3-237 ~]# netstat -ntu | awk `{print $5}` | cut -d: -f1 | sort | uniq -c | sort -n
1 Address
1 servers)
2 103.10.86.5
4 117.36.231.253
4 19.62.46.24
6 29.140.22.18
8 220.181.161.131
2911 167.215.42.88
每個IP幾個、十幾個或幾十個連線數都還算比較正常,如果像上面成百上千肯定就不正常了。比如上面的167.215.42.88,這個ip的連線有2911個!這個看起來就很像是被攻擊了!
下面就說下通過DDoS deflate指令碼來自動遮蔽DDOS攻擊的ip
1)下載DDoS deflate安裝指令碼,並執行安裝。
[root@test3-237 ~]# wget http://www.inetbase.com/scripts/ddos/install.sh
[root@test3-237 ~]# chmod 0700 install.sh
[root@test3-237 ~]# ./install.sh
————————————————————————–
解除安裝DDos default的操作如下:
# wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
# chmod 0700 uninstall.ddos
# ./uninstall.ddos
————————————————————————–
2)配置DDoS deflate下面是DDoS deflate的預設配置位於/usr/local/ddos/ddos.conf ,內容如下:
[root@test3-237 ~]# cat /usr/local/ddos/ddos.conf
##### Paths of the script and other files
PROGDIR=”/usr/local/ddos”
PROG=”/usr/local/ddos/ddos.sh”
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名單
CRON=”/etc/cron.d/ddos.cron” //定時執行程式
APF=”/etc/apf/apf”
IPT=”/sbin/iptables”
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with –cron
##### option so that the new frequency takes effect
FREQ=1 //檢查時間間隔,預設1分鐘。設定檢測時間間隔,預設是分鐘,由於系統使用crontab功能,最小單位是分鐘
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大連線數,超過這個數IP就會被遮蔽,一般預設即可。預設是150,這是一個經驗值,如果伺服器效能比較高,可以設定200以上,以避免誤殺
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=0 //使用APF還是iptables遮蔽IP。推薦使用iptables,將APF_BAN的值改為0即可。設定為1表示使用APF,如果使用APF則需要先安裝,centos中預設就沒有安裝
##### KILL=0 (Bad IPs are`nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1 //是否遮蔽IP,預設即可
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO=”root” //當IP被遮蔽時給指定郵箱傳送郵件,推薦使用,換成自己的郵箱即可。如果不希望傳送郵件,設定為空,即EMAIL_TO=””
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用IP時間(鎖定ip的時間),預設600秒,可根據情況調整
需要注意的是:
DDos default安裝完成後在/usr/local/ddos目錄下產生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE這四個檔案,其中:
ddos.conf是配置檔案,ddos.sh是一個Shell檔案,ignore.ip.list是存放忽略IP的檔案,LICENSE是版權宣告檔案,安裝完成後還在/etc/cron.d/下生產了ddos.cron檔案,內容如下:
[root@test3-237 ~]# cat /etc/cron.d/ddos.cron
SHELL=/bin/sh
0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1
意思是每隔一分鐘執行一下/usr/local/ddos/ddos.sh,這個指令碼是關鍵!
這個cron任務是依賴ddos.conf檔案中的NO_OF_CONNECTIONS變數產生的,如果修改了此值,可以通過執行如下命令更新(實際也是在安裝是執行了如下命令):
[root@test3-237 ~]# /usr/local/ddos/ddos.sh -c
Stopping crond: [ OK ]
Starting crond: [ OK ]
Stopping crond: [ OK ]
Starting crond: [ OK ]
或者
[root@test3-237 ~]# /usr/local/ddos/ddos.sh –cron
Stopping crond: [ OK ]
Starting crond: [ OK ]
Stopping crond: [ OK ]
Starting crond: [ OK ]
3)DDos default選項
# /usr/local/ddos/ddos.sh -h #檢視選項
# /usr/local/ddos/ddos.sh -k n #殺掉連線數大於n的連線。n預設為配置檔案的NO_OF_CONNECTIONS
比如:
[root@test3-237 ~]# /usr/local/ddos/ddos.sh -k 150
2 103.110.186.75
1 servers)
1 Address
# /usr/local/ddos/ddos.sh -c #按照配置檔案建立一個執行計劃。使得ddos.conf檔案配置後生效
DDoS deflate其實是一個Shell指令碼,使用netstat和iptables工具,對那些連結數過多的IP進行封鎖,能有效防止通用的惡意掃描器,但它並不是真正有效的DDoS防禦工具。
DDoS deflate工作過程描述:
同一個IP連結到伺服器的連線數到達設定的伐值後,所有超過伐值的IP將被遮蔽,同時把遮蔽的IP寫入ignore.ip.list檔案中,與此同時會在tmp中生成一個指令碼檔案,這個指令碼檔案馬上被執行,但是一
執行就遇到sleep預設的秒,當睡眠了這麼多的時間後,解除被遮蔽的IP,同時把之前寫入ignore.ip.list檔案中的這個被封鎖的IP刪除,然後刪除臨時生成的檔案。
一個事實:如果被遮蔽的IP手工解遮蔽,那麼如果這個IP繼續產生攻擊,那麼指令碼將不會再次遮蔽它(因為加入到了ignore.ip.list),直到在預設的時間之後才能起作用,加入到了ignore.ip.list中的
IP是檢測的時候忽略的IP。可以把IP寫入到這個檔案以避免這些IP被堵塞,已經堵塞了的IP也會加入到ignore.ip.list中,但堵塞了預定時間後會從它之中刪除。
如何確認是否受到DDOS攻擊?
[root@test3-237 ~]# netstat -ntu | awk `{print $5}` | cut -d: -f1 | sort | uniq -c | sort -n
1 Address
1 servers)
2 103.10.86.5
4 117.36.231.253
4 19.62.46.24
6 29.140.22.18
8 220.181.161.131
2911 167.215.42.88
每個IP幾個、十幾個或幾十個連線數都還算比較正常,如果像上面成百上千肯定就不正常了。比如上面的167.215.42.88,這個ip的連線有2911個!這個看起來就很像是被攻擊了!
下面就說下通過DDoS deflate指令碼來自動遮蔽DDOS攻擊的ip
1)下載DDoS deflate安裝指令碼,並執行安裝。
[root@test3-237 ~]# wget http://www.inetbase.com/scripts/ddos/install.sh
[root@test3-237 ~]# chmod 0700 install.sh
[root@test3-237 ~]# ./install.sh
————————————————————————–
解除安裝DDos default的操作如下:
# wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
# chmod 0700 uninstall.ddos
# ./uninstall.ddos
————————————————————————–
2)配置DDoS deflate下面是DDoS deflate的預設配置位於/usr/local/ddos/ddos.conf ,內容如下:
[root@test3-237 ~]# cat /usr/local/ddos/ddos.conf
##### Paths of the script and other files
PROGDIR=”/usr/local/ddos”
PROG=”/usr/local/ddos/ddos.sh”
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名單
CRON=”/etc/cron.d/ddos.cron” //定時執行程式
APF=”/etc/apf/apf”
IPT=”/sbin/iptables”
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with –cron
##### option so that the new frequency takes effect
FREQ=1 //檢查時間間隔,預設1分鐘。設定檢測時間間隔,預設是分鐘,由於系統使用crontab功能,最小單位是分鐘
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大連線數,超過這個數IP就會被遮蔽,一般預設即可。預設是150,這是一個經驗值,如果伺服器效能比較高,可以設定200以上,以避免誤殺
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=0 //使用APF還是iptables遮蔽IP。推薦使用iptables,將APF_BAN的值改為0即可。設定為1表示使用APF,如果使用APF則需要先安裝,centos中預設就沒有安裝
##### KILL=0 (Bad IPs are`nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1 //是否遮蔽IP,預設即可
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO=”root” //當IP被遮蔽時給指定郵箱傳送郵件,推薦使用,換成自己的郵箱即可。如果不希望傳送郵件,設定為空,即EMAIL_TO=””
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用IP時間(鎖定ip的時間),預設600秒,可根據情況調整
需要注意的是:
DDos default安裝完成後在/usr/local/ddos目錄下產生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE這四個檔案,其中:
ddos.conf是配置檔案,ddos.sh是一個Shell檔案,ignore.ip.list是存放忽略IP的檔案,LICENSE是版權宣告檔案,安裝完成後還在/etc/cron.d/下生產了ddos.cron檔案,內容如下:
[root@test3-237 ~]# cat /etc/cron.d/ddos.cron
SHELL=/bin/sh
0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1
意思是每隔一分鐘執行一下/usr/local/ddos/ddos.sh,這個指令碼是關鍵!
這個cron任務是依賴ddos.conf檔案中的NO_OF_CONNECTIONS變數產生的,如果修改了此值,可以通過執行如下命令更新(實際也是在安裝是執行了如下命令):
[root@test3-237 ~]# /usr/local/ddos/ddos.sh -c
Stopping crond: [ OK ]
Starting crond: [ OK ]
Stopping crond: [ OK ]
Starting crond: [ OK ]
或者
[root@test3-237 ~]# /usr/local/ddos/ddos.sh –cron
Stopping crond: [ OK ]
Starting crond: [ OK ]
Stopping crond: [ OK ]
Starting crond: [ OK ]
3)DDos default選項
# /usr/local/ddos/ddos.sh -h #檢視選項
# /usr/local/ddos/ddos.sh -k n #殺掉連線數大於n的連線。n預設為配置檔案的NO_OF_CONNECTIONS
比如:
[root@test3-237 ~]# /usr/local/ddos/ddos.sh -k 150
2 103.110.186.75
1 servers)
1 Address
# /usr/local/ddos/ddos.sh -c #按照配置檔案建立一個執行計劃。使得ddos.conf檔案配置後生效
CC攻擊
cc攻擊主要攻擊頁面,模擬很多使用者來不斷的訪問網站,導致系統資源被大量佔用,那麼在Linux系統中,我們要如何知道自己是否被cc攻擊了呢?
檢視所有80埠的連線數
netstat -nat|grep -i “80”|wc -l
對連線的IP按連線數量進行排序
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
檢視TCP連線狀態
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,“ ”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,“ ”,arr[k]}’
netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c
檢視80埠連線數最多的20個IP
netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk ‘/:80/{split($5,ip,“:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20
用tcpdump嗅探80埠的訪問看看誰最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F“。” ‘{print $1“。”$2“。”$3“。”$4}’ | sort | uniq -c | sort -nr |head -20
查詢較多time_wait連線
netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20
查詢較多的SYN連線
netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
封單個IP的命令是:
iptables -I INPUT -s 211.1.0.0 -j DROP
封IP段的命令是:
iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP
封整個段的命令是:
iptables -I INPUT -s 211.0.0.0/8 -j DROP
封幾個段的命令是:
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
想在伺服器啟動自執行的話有三個方法:
1、把它加到/etc/rc.local中
2、iptables-save 》/etc/sysconfig/iptables可以把你當前的iptables規則放到/etc/sysconfig/iptables中,系統啟動iptables時自動執
行。
3、service iptables save 也可以把你當前的iptables規則放/etc/sysconfig/iptables中,系統啟動iptables時自動執行。
後兩種更好此,一般iptables服務會在network服務之前啟來,更安全。
解封的話:
iptables -D INPUT -s IP地址 -j REJECT
iptables -F 全清掉了
相關文章
- SYN洪水攻擊原理
- 【網路安全】如何有效地防禦DDOS攻擊和CC攻擊?
- LINUX下SYN FLOOD攻擊及LINUX下SYN攻防簡述Linux
- 【DDOS】巧用iptables 幾招搞定 SYN洪水攻擊!
- 【網路安全知識】DDOS攻擊和CC攻擊有什麼區別?
- Linux被DDOS&CC攻擊解決例項Linux
- DDoS攻擊與CC攻擊的區別是什麼?
- 【網路安全入門知識】如何有效防禦DDoS攻擊和CC攻擊?
- 利用iptables來緩解和預防DDOS及CC攻擊
- CC攻擊的原理是什麼?如何防禦CC攻擊?
- 什麼是CC攻擊?與DDoS攻擊有什麼區別?
- TCP洪水攻擊(SYN_SENT)的診斷和處理TCP
- 什麼是CC攻擊?CC攻擊型別【網路安全教程】型別
- CC攻擊原理是什麼?網站被CC攻擊如何防禦?網站
- CC攻擊:CC攻擊的原理便是攻擊者控制某些主機不停地發許
- SYN Flood攻擊的基本原理(轉)
- CC攻擊的原理是什麼?防禦CC攻擊的方法有哪些?
- 阻止SYN Flood攻擊
- DDoS Deflate防Linux下DDOS攻擊Linux
- 分散式拒絕服務攻擊(DDoS)原理及防範分散式
- DDOS攻擊原理,種類及其防禦
- 3 分鐘視訊講解 SYN Flood 攻擊原理
- 在Linux中,什麼是DDoS攻擊?如何在Linux中防禦DDoS攻擊?Linux
- 教你如何在Linux中防止SYN Flood攻擊Linux
- CC攻擊的原理和應對的策略
- 分散式拒絕服務攻擊(DDoS)原理分散式
- 淺談 JavaScript DDoS 攻擊原理與防禦JavaScript
- 淺談JavaScript DDoS攻擊原理與防禦JavaScript
- 淺談JS DDoS攻擊原理與防禦JS
- DDOS攻擊分為幾大類?網路安全入門教程
- 什麼是CC攻擊?網站被CC攻擊怎麼辦?網站
- 遊戲伺服器防ddos攻擊,三招搞定ddos攻擊遊戲伺服器
- web安全之XSS攻擊原理及防範Web
- 聚焦DDoS安全,分享防禦DDoS攻擊的幾大有效方法
- TCP/IP協議的SYN攻擊TCP協議
- 【網路安全入門】DDOS攻擊和DOS攻擊之間有什麼區別及聯絡?
- Nginx防止DDOS攻擊Nginx
- 反射型 DDoS 攻擊的原理和防範措施反射