天天看點

Linux下防禦DDOS攻擊的操作梳理

DDOS的全稱是Distributed Denial of Service,即"分布式拒絕服務攻擊",是指擊者利用大量“殭屍電腦”對攻擊目标發動大量的正常或非正常請求、耗盡目标主機資源或網絡資源,進而使被攻擊的主機不能為合法使用者提供服務。

DDOS攻擊的本質是:

利用木桶原理,尋找利用系統應用的瓶頸;阻塞和耗盡;目前問題:使用者的帶寬小于攻擊的規模,噪聲通路帶寬成為木桶的短闆。

可以參考下面的例子了解下DDOS攻擊。

1)某飯店可以容納100人同時就餐,某日有個商家惡意競争,雇傭了200人來這個飯店坐着不吃不喝,導緻飯店滿滿當當無法正常營業。(DDOS攻擊成功)

2)老闆當即大怒,派人把不吃不喝影響正常營業的人全都轟了出去,且不再讓他們進來搗亂,飯店恢複了正常營業。(添加規則和黑名單進行DDOS防禦,防禦成功)

3)主動攻擊的商家心存不滿,這次請了五千人逐批次來搗亂,導緻該飯店再次無法正常營業。(增加DDOS流量,改變攻擊方式)

4)飯店把那些搗亂的人轟出去隻後,另一批接踵而來。此時老闆将飯店營業規模擴大,該飯店可同時容納1萬人就餐,5000人同時來搗亂飯店營業也不會受到影響。(增加硬防與其抗衡)

DDOS攻擊隻不過是一個概稱,其下有各種攻擊方式,比如:"CC攻擊、SYN攻擊、NTP攻擊、TCP攻擊、DNS攻擊等等",現在DDOS發展變得越來越可怕,NTP服務放大攻擊漸漸成為主流了,這意味着可以将每秒的攻擊流量放大幾百倍,比如每秒1G的SYN碎片攻擊換成NTP放大攻擊,就成為了200G或者更多。

--------------------------------------------------順便介紹下NTP服務放大攻擊--------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<code>什麼事NTP服務?</code>

<code>網絡時間協定NTP(Network Time Protocol)是用于網際網路中時間同步的标準網際網路協定。NTP伺服器通過NTP服務向網絡上的計算機或其他裝置提供标準的授時服務,以保證這些服務系統的時鐘能夠同步。通常NTP服務使用UDP 123端口提供标準服務。</code>

<code>什麼是NTP服務放大攻擊?</code>

<code>标準NTP 服務提供了一個 monlist查詢功能,也被稱為MON_GETLIST,該功能主要用于監控 NTP 伺服器的服務狀況,當使用者端向NTP服務送出monlist查詢時,NTP 伺服器會向查詢端傳回與NTP 伺服器進行過時間同步的最後 600 個用戶端的 IP,響應包按照每 6 個 IP 進行分割,最多有 100 個響應包。由于NTP服務使用UDP協定,攻擊者可以僞造源發位址向NTP服務進行monlist查詢,這将導緻NTP伺服器向被僞造的目标發送大量的UDP資料包,理論上這種惡意導向的攻擊流量可以放大到僞造查詢流量的100倍。</code>

<code>NTP是用UDP傳輸的,是以可以僞造源位址。NTP協定中有一類查詢指令,用短小的指令即可令伺服器傳回很長的資訊,放大攻擊就是基于這類指令的。</code>

<code>比如:</code>

<code>小明以吳一帆的名義問李雷</code><code>"我們班有哪些人?"</code> <code>,李雷就回答吳一帆說</code><code>"有誰誰誰和誰誰誰……"</code><code>”"(幾百字),那麼小明就以8個字的成本,令吳一帆收到了幾百字的資訊,是以叫做放大攻擊。</code>

<code>(也就是說:對方伺服器是個話唠,你以小明的身份問他一個問題,他回答小明一千句,結果小明崩潰了)</code>

<code>網絡上一般NTP伺服器都有很大的帶寬,攻擊者可能隻需要1Mbps的上傳帶寬欺騙NTP伺服器,即可給目标伺服器帶來幾百上千Mbps的攻擊流量,達到借刀殺人的效果。</code>

<code>是以現在新的ntpd已經可以通過配置檔案,關掉除時間同步以外的查詢功能。而時間同步的查詢和傳回大小相同(沒記錯的話),是以沒辦法用作放大攻擊。</code>

<code>如何檢視是否遭受NTP放大攻擊?</code>

<code>如果網絡上檢測到大流量的UDP 123端口的資料,就可以确認正在遭受此類攻擊。</code>

<code>如何防範NTP放大攻擊?</code>

<code>1)更新服務程式版本</code>

<code>将系統中的NTP服務更新到 ntpd 4.2.7p26 或之後的版本,因為 ntpd 4.2.7p26 版本後,服務預設是關閉monlist查詢功能的。</code>

<code>2)關閉服務的monlist查詢功能:</code>

<code>首先查詢問題主機的REQ_MON_GETLIST和REQ_MON_GETLIST_1請求是否可用。具體操作方法:</code>

<code>   </code><code># ntpq -c rv&lt;localhost/remotehost&gt;</code>

<code>   </code><code># ntpdc -c sysinfo&lt;localhost/remotehost&gt;</code>

<code>   </code><code># ntpdc -n -c monlist&lt;localhost/remotehost&gt;</code>

<code>如果上述功能可用,可嘗試通過修改ntp.conf檔案解決問題,具體操作建議是在上述配置檔案中增加下面的配置:</code>

<code>   </code><code>IPV4: restrict default kod nomodify notrap nopeer noquery</code>

<code>   </code><code>IPv6: restrict -6 default kod nomodify notrap nopeer noquery</code>

<code>允許發起時間同步的IP,與本伺服器進行時間同步,但是不允許修改ntp服務資訊,也不允許查詢伺服器的狀态資訊(如monlist)*/</code>

<code>另外,還可以配置限制通路指令,如:</code>

<code>restrict default noquery    </code><code>#允許普通的請求者進行時間同步,但是不允許查詢ntp服務資訊*/</code>

<code>修改并儲存配置檔案之後,請重新開機ntpd服務。</code>

-----------------------------------------------------------------------------------------------------------------------------------

近年來,一些重大的DDOS攻擊案例:

<code>1)2000年2月,包括雅虎、CNN、亞馬遜、eBay、http:</code><code>//Buy</code><code>.com、ZDNet,以及E*Trade和Datek等網站均遭受到了DDOS攻擊,并緻使部分網站癱瘓。</code>

<code>2)2007年5月,愛沙尼亞三周内遭遇三輪DDOS攻擊,總統府、議會、幾乎全部政府部門、主要政黨、主要媒體和2家大銀行和通訊公司的網站均陷入癱瘓,為此北約頂級反網絡恐怖主義專家前往該國救援。</code>

<code>3)2009年519斷網事件導緻南方六省營運商伺服器全部崩潰,電信在南方六省的網絡基本癱瘓。2009年7月,南韓主要網站三天内遭遇三輪猛烈的DDOS攻擊,南韓宣布提前成立網絡司令部。</code>

<code>4)比較著名的案例還有有:</code>

<code>  </code><code>全球三大遊戲平台:暴雪戰網、Valve Steam和EA Origin遭到大規模DDoS攻擊,緻使大批玩家無法登入與進行遊戲。随後名為DERP的黑客組織聲稱對此次大規模的DDoS攻擊行動負責。</code>

對于DDOS攻擊的簡單防護措施:  

<code>1)關閉不必要的服務和端口;</code>

<code>2)限制同一時間内打開的syn半連接配接數目;</code>

<code>3)縮短syn半連接配接的逾時時間;</code>

<code>4)及時安裝系統更新檔;</code>

<code>5)禁止對主機非開放服務的通路;</code>

<code>6)啟用防火牆防DDOS屬性。硬體防火牆價格比較昂貴,可以考慮利用Linux系統本身提供的防火牆功能來防禦。</code>

<code>7)另外也可以安裝相應的防護軟體,這裡強烈建議安裝安全狗軟體,防護性能不錯,并且免費。</code>

<code>8)購買DDOS防禦産品,比如阿裡雲盾的DDOS防禦中的高防IP,這個使用起來,效果也很給力。</code>

接下來說下Linux系統下預防DDOS攻擊的操作:

<code>Linux伺服器在運作過程中可能會受到黑客攻擊,常見的攻擊方式有SYN,DDOS等。</code>

<code>通過更換IP,查找被攻擊的站點可能避開攻擊,但是中斷服務的時間比較長。比較徹底的解決方法是添置硬體防火牆,但是硬體防火牆價格比較昂貴。可以考慮利用Linux系統本身提供的防火牆功能來防禦。</code>

<code>SYN攻擊是利用TCP</code><code>/IP</code><code>協定3次握手的原理,發送大量的建立連接配接的網絡包,但不實際建立連接配接,最終導緻被攻擊伺服器的網絡隊列被占滿,無法被正常使用者通路。</code>

<code>Linux核心提供了若幹SYN相關的配置,加大SYN隊列長度可以容納更多等待連接配接的網絡連接配接數,打開SYN Cookie功能可以阻止部分SYN攻擊,降低重試次數也有一定效果。</code>

<code>而DDOS則是通過使網絡過載來幹擾甚至阻斷正常的網絡通訊,通過向伺服器送出大量請求,使伺服器超負荷,阻斷某一使用者通路伺服器阻斷某服務與特定系統或個人的通訊。可以通過配置防火牆或者使用腳本工具來防範DDOS攻擊;</code>

1)優化幾個sysctl核心參數:

<code>[root@test3-237 ~]</code><code># vim /etc/sysctl.conf</code>

<code>......</code>

<code>net.ipv4.tcp_max_syn_backlog = 4096      </code><code>#表示SYN隊列的長度,加大隊列長度可以容納更多等待連接配接的網絡連接配接數</code>

<code>net.ipv4.tcp_syncookies = 1              </code><code>#表示開啟SYN Cookies功能。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉,1表示打開;</code>

<code>net.ipv4.tcp_synack_retries = 2          </code><code>#下面這兩行表示定義SYN重試次數</code>

<code>net.ipv4.tcp_syn_retries = 2      </code>

<code>#提高TCP連接配接能力</code>

<code>net.ipv4.tcp_rmem = 32768</code>

<code>net.ipv4.tcp_wmem = 32768</code>

<code>net.ipv4.tcp_sack = 0     </code><code>#打開tcp_sack功能,1表示"關閉",0表示"打開"</code>

<code>[root@test3-237 ~]</code><code># sysctl -p    #使上面配置生效</code>

2)利用linux系統自帶iptables防火牆進行預防:

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

<code>先檢視伺服器上連接配接web端口(比如80端口)的哪個ip是最多的,如果發現可疑ip,就果斷将其斷開與伺服器連接配接</code>

<code>檢視80端口的連接配接情況</code>

<code>[root@test3-237 ~]</code><code># netstat -an | grep ":80" | grep ESTABLISHED</code>

<code>下面的指令表示擷取伺服器上ESTABLISHED連接配接數最多的前10個ip,排除了内部ip段192.168|127.0開頭的。</code>

<code>[root@test3-237 ~]</code><code># /bin/netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -10|grep -v -E '192.168|127.0'</code>

<code>      </code><code>4001 140.205.140.205</code>

<code>      </code><code>2388 124.65.197.154</code>

<code>      </code><code>1807 111.205.224.15</code>

<code>      </code><code>18 10.51.58.16</code>

<code>      </code><code>.......</code>

<code>将上面140.205.140.205、124.65.197.154、111.205.224.15的這三個ip的包丢棄</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -s 140.205.140.205 -p tcp -j DROP</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -s 124.65.197.154 -p tcp -j DROP</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -s 111.205.224.15 -p tcp -j DROP</code>

<code>[root@test3-237 ~]</code><code># service iptables save</code>

<code>[root@test3-237 ~]</code><code># service iptables restart</code>

<code>不過上面的方法對于僞造源IP位址的SYN FLOOD攻擊就無效了!</code>

<code>-------------------------------------其他預防攻擊的設定-------------------------------------</code>

<code>防止同步包洪水(Sync Flood),縮短SYN-Timeout時間:</code>

<code>[root@test3-237 ~]</code><code># iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -i eth0 -m limit --limit 1/sec --limit-burst 5 -j ACCEPT</code>

<code>其中:</code>

<code>--limit 1</code><code>/s</code> <code>限制syn并發數每秒1次,可以根據自己的需要修改防止各種端口掃描</code>

<code>[root@test3-237 ~]</code><code># iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT</code>

<code>Ping洪水攻擊(Ping of Death)</code>

<code>[root@test3-237 ~]</code><code># iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT</code>

<code>控制單個IP的最大并發連接配接數。</code>

<code>如下設定表示:允許單個IP的最大連接配接數為 30</code>

<code>[root@test3-237 ~]</code><code># iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT</code>

<code>控制單個IP在一定的時間(比如60秒)内允許建立立的連接配接數。</code>

<code>如下設定表示:單個IP在60秒内隻允許最多建立30個連接配接</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT</code>

<code>---------------------------------------------------------------------------------------------------</code>

<code>如果出現報錯:</code>

<code>iptables: Invalid argument. Run `dmesg' </code><code>for</code> <code>more</code> <code>information.</code>

<code>解決辦法:</code>

<code>增加 xt_recent子產品的參數值即可,預設是20</code>

<code>[root@test3-237 ~]</code><code># cat /sys/module/xt_recent/parameters/ip_pkt_list_tot</code>

<code>20</code>

<code>[root@test3-237 ~]</code><code># echo 50 &gt; /sys/module/xt_recent/parameters/ip_pkt_list_tot</code>

<code>50</code>

<code>禁止</code><code>ping</code><code>(即禁止從外部</code><code>ping</code><code>這台伺服器):</code>

<code>[root@test3-237 ~]</code><code># echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all</code>

<code>用iptables屏蔽IP(如下禁止213.8.166.237連接配接本機的80端口)</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -s 213.8.166.227 -p tcp -m tcp -m state --state NEW --dport 80 --syn -j REJECT</code>

<code>允許某ip連接配接(如下允許13.78.66.27連接配接本機的80端口)</code>

<code>[root@test3-237 ~]</code><code># iptables -A INPUT -s 13.78.66.27 -p tcp -m tcp -m state --state NEW --dport 80 --syn -j ACCEPT</code>

3)使用DDoS deflate腳本自動屏蔽攻擊ip 

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

<code>DDoS deflate是一款免費的用來防禦和減輕DDoS攻擊的腳本。它通過</code><code>netstat</code><code>監測跟蹤建立大量網絡連接配接的IP位址,在檢測到某個結點超過預設的限制時,該程式會通過APF或IPTABLES禁止或阻擋這些IP.</code>

<code>DDoS deflate其實是一個Shell腳本,使用</code><code>netstat</code><code>和iptables工具,對那些連結數過多的IP進行封鎖,能有效防止通用的惡意掃描器,但它并不是真正有效的DDoS防禦工具。</code>

<code>DDoS deflate工作過程描述:</code>

<code>同一個IP連結到伺服器的連接配接數到達設定的伐值後,所有超過伐值的IP将被屏蔽,同時把屏蔽的IP寫入ignore.ip.list檔案中,與此同時會在tmp中生成一個腳本檔案,這個腳本檔案馬上被執行,但是一</code>

<code>運作就遇到</code><code>sleep</code><code>預設的秒,當睡眠了這麼多的時間後,解除被屏蔽的IP,同時把之前寫入ignore.ip.list檔案中的這個被封鎖的IP删除,然後删除臨時生成的檔案。</code>

<code>一個事實:如果被屏蔽的IP手工解屏蔽,那麼如果這個IP繼續産生攻擊,那麼腳本将不會再次屏蔽它(因為加入到了ignore.ip.list),直到在預設的時間之後才能起作用,加入到了ignore.ip.list中的</code>

<code>IP是檢測的時候忽略的IP。可以把IP寫入到這個檔案以避免這些IP被堵塞,已經堵塞了的IP也會加入到ignore.ip.list中,但堵塞了預定時間後會從它之中删除。</code>

<code>如何确認是否受到DDOS攻擊?</code>

<code>[root@test3-237 ~]</code><code># netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n</code>

<code>      </code><code>1 Address</code>

<code>      </code><code>1 servers)</code>

<code>      </code><code>2 103.10.86.5</code>

<code>      </code><code>4 117.36.231.253</code>

<code>      </code><code>4 19.62.46.24</code>

<code>      </code><code>6 29.140.22.18</code>

<code>      </code><code>8 220.181.161.131   </code>

<code>      </code><code>2911 167.215.42.88</code>

<code>每個IP幾個、十幾個或幾十個連接配接數都還算比較正常,如果像上面成百上千肯定就不正常了。比如上面的167.215.42.88,這個ip的連接配接有2911個!這個看起來就很像是被攻擊了!</code>

<code>下面就說下通過DDoS deflate腳本來自動屏蔽DDOS攻擊的ip</code>

<code>1)下載下傳DDoS deflate安裝腳本,并執行安裝。</code>

<code>[root@test3-237 ~]</code><code># wget http://www.inetbase.com/scripts/ddos/install.sh</code>

<code>[root@test3-237 ~]</code><code># chmod 0700 install.sh</code>

<code>[root@test3-237 ~]</code><code># ./install.sh</code>

<code>--------------------------------------------------------------------------</code>

<code>解除安裝DDos default的操作如下:</code>

<code># wget http://www.inetbase.com/scripts/ddos/uninstall.ddos</code>

<code># chmod 0700 uninstall.ddos</code>

<code># ./uninstall.ddos</code>

<code>2)配置DDoS deflate下面是DDoS deflate的預設配置位于</code><code>/usr/local/ddos/ddos</code><code>.conf ,内容如下:</code>

<code>[root@test3-237 ~]</code><code># cat /usr/local/ddos/ddos.conf</code>

<code>##### Paths of the script and other files</code>

<code>PROGDIR=</code><code>"/usr/local/ddos"</code>

<code>PROG=</code><code>"/usr/local/ddos/ddos.sh"</code>

<code>IGNORE_IP_LIST=</code><code>"/usr/local/ddos/ignore.ip.list"</code>         <code>//IP</code><code>位址白名單</code>

<code>CRON=</code><code>"/etc/cron.d/ddos.cron"</code>                            <code>//</code><code>定時執行程式</code>

<code>APF=</code><code>"/etc/apf/apf"</code>

<code>IPT=</code><code>"/sbin/iptables"</code>

<code>##### frequency in minutes for running the script</code>

<code>##### Caution: Every time this setting is changed, run the script with --cron</code>

<code>#####          option so that the new frequency takes effect</code>

<code>FREQ=1                        </code><code>//</code><code>檢查時間間隔,預設1分鐘。設定檢測時間間隔,預設是分鐘,由于系統使用</code><code>crontab</code><code>功能,最小機關是分鐘</code>

<code>##### How many connections define a bad IP? Indicate that below.</code>

<code>NO_OF_CONNECTIONS=150             </code><code>//</code><code>最大連接配接數,超過這個數IP就會被屏蔽,一般預設即可。預設是150,這是一個經驗值,如果伺服器性能比較高,可以設定200以上,以避免誤殺</code>

<code>##### APF_BAN=1 (Make sure your APF version is atleast 0.96)</code>

<code>##### APF_BAN=0 (Uses iptables for banning ips instead of APF)</code>

<code>APF_BAN=0                      </code><code>//</code><code>使用APF還是iptables屏蔽IP。推薦使用iptables,将APF_BAN的值改為0即可。設定為1表示使用APF,如果使用APF則需要先安裝,centos中預設就沒有安裝</code>

<code>##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)</code>

<code>##### KILL=1 (Recommended setting)</code>

<code>KILL=1                        </code><code>//</code><code>是否屏蔽IP,預設即可</code>

<code>##### An email is sent to the following address when an IP is banned.</code>

<code>##### Blank would suppress sending of mails</code>

<code>EMAIL_TO=</code><code>"root"</code>              <code>//</code><code>當IP被屏蔽時給指定郵箱發送郵件,推薦使用,換成自己的郵箱即可。如果不希望發送郵件,設定為空,即EMAIL_TO=</code><code>""</code>

<code>##### Number of seconds the banned ip should remain in blacklist.</code>

<code>BAN_PERIOD=600              </code><code>//</code><code>禁用IP時間(鎖定ip的時間),預設600秒,可根據情況調整</code>

<code>需要注意的是:</code>

<code>DDos default安裝完成後在</code><code>/usr/local/ddos</code><code>目錄下産生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE這四個檔案,其中:</code>

<code>ddos.conf是配置檔案,ddos.sh是一個Shell檔案,ignore.ip.list是存放忽略IP的檔案,LICENSE是版權聲明檔案,安裝完成後還在</code><code>/etc/cron</code><code>.d/下生産了ddos.</code><code>cron</code><code>檔案,内容如下:</code>

<code>[root@test3-237 ~]</code><code># cat /etc/cron.d/ddos.cron</code>

<code>SHELL=</code><code>/bin/sh</code>

<code>0-59</code><code>/1</code> <code>* * * * root </code><code>/usr/local/ddos/ddos</code><code>.sh &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>意思是每隔一分鐘執行一下</code><code>/usr/local/ddos/ddos</code><code>.sh,這個腳本是關鍵!</code>

<code>這個</code><code>cron</code><code>任務是依賴ddos.conf檔案中的NO_OF_CONNECTIONS變量産生的,如果修改了此值,可以通過運作如下指令更新(實際也是在安裝是運作了如下指令):</code>

<code>[root@test3-237 ~]</code><code># /usr/local/ddos/ddos.sh -c</code>

<code>Stopping crond:                                            [  OK  ]</code>

<code>Starting crond:                                            [  OK  ]</code>

<code>或者</code>

<code>[root@test3-237 ~]</code><code># /usr/local/ddos/ddos.sh --cron</code>

<code>3)DDos default選項</code>

<code># /usr/local/ddos/ddos.sh -h       #檢視選項</code>

<code># /usr/local/ddos/ddos.sh -k n     #殺掉連接配接數大于n的連接配接。n預設為配置檔案的NO_OF_CONNECTIONS</code>

<code>  </code><code>比如:</code>

<code>  </code><code>[root@test3-237 ~]</code><code># /usr/local/ddos/ddos.sh -k 150</code>

<code>      </code><code>2 103.110.186.75</code>

<code># /usr/local/ddos/ddos.sh -c       #按照配置檔案建立一個執行計劃。使得ddos.conf檔案配置後生效</code>

4)分享一個防禦DDOS攻擊的shell腳本

<code>Linux伺服器中一旦受到DDOS的攻擊(比如IDC機房伺服器被攻擊了,關機,拔網線,降流量),目前隻能通過封IP來源來暫時解決。</code>

<code>然而IP來源變化多端,光靠手工來添加簡直是惡夢,是以還是想辦法寫個shell腳本來定時處理,這才是比較靠譜的辦法。</code>

<code>[root@test3-237 ~]</code><code># mkdir /root/bin</code>

<code>[root@test1-237 ~]</code><code># cat /root/bin/dropip.sh    //此腳本自動提取攻擊ip,然後自動屏蔽</code>

<code>#!/bin/bash</code>

<code>/bin/netstat</code> <code>-na|</code><code>grep</code> <code>ESTABLISHED|</code><code>awk</code> <code>'{print $5}'</code><code>|</code><code>awk</code> <code>-F: </code><code>'{print $1}'</code><code>|</code><code>sort</code><code>|</code><code>uniq</code> <code>-c|</code><code>sort</code> <code>-rn|</code><code>head</code> <code>-10|</code><code>grep</code> <code>-</code><code>v</code> <code>-E </code><code>'192.168|127.0'</code><code>|</code><code>awk</code> <code>'{if ($2!=null &amp;&amp; $1&gt;4) {print $2}}'</code><code>&gt;</code><code>/tmp/dropip</code>

<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>cat</code> <code>/tmp/dropip</code><code>)</code>

<code>do</code>

<code>/sbin/iptables</code> <code>-A INPUT -s $i -j DROP</code>

<code>echo</code> <code>“$i </code><code>kill</code> <code>at `</code><code>date</code><code>`”&gt;&gt;</code><code>/var/log/ddos</code>

<code>done</code>

<code>以上腳本中最重要的是第二行,即:</code>

<code>擷取ESTABLISHED連接配接數最多的前10個ip并寫入臨時檔案</code><code>/tmp/dropip</code><code>,排除了内部ip段192.168|127.0開頭的.通過</code><code>for</code><code>循環将dropip裡面的ip通過iptables全部drop掉,然後寫到日志檔案</code><code>/var/log/ddos</code><code>。</code>

<code>給腳本添加執行權限</code>

<code>[root@test1-237 ~]</code><code># chmod +x /root/bin/dropip.sh</code>

<code>添加到計劃任務,每分鐘執行一次</code>

<code>[root@test1-237 ~]</code><code>#crontab -e</code>

<code>*</code><code>/1</code> <code>* * * * </code><code>/root/bin/dropip</code><code>.sh</code>

<code>----------------------------------------------------------------------------------------</code>

<code>下面是針對連接配接數屏蔽IP</code>

<code>#!/bin/sh </code>

<code>/bin/netstat</code> <code>-ant |</code><code>grep</code> <code>80 |</code><code>awk</code> <code>'{print $5}'</code> <code>|</code><code>awk</code> <code>-F</code><code>":"</code> <code>'{print $1}'</code> <code>|</code><code>sort</code> <code>|</code><code>uniq</code> <code>-c |</code><code>sort</code> <code>-rn |</code><code>grep</code> <code>-</code><code>v</code> <code>-E </code><code>'192.168|127.0'</code> <code>|</code><code>awk</code> <code>'{if ($2!=null &amp;&amp; $1&gt;50)}'</code> <code>&gt; </code><code>/root/drop_ip</code><code>.txt </code>

<code>for</code> <code>i </code><code>in</code> <code>`</code><code>cat</code> <code>/root/drop_ip</code><code>.txt` </code>

<code>do</code> 

<code>/sbin/iptables</code> <code>-I INPUT -s $i -j DROP; </code>

<code>done</code> 

5)Linux下使用safedog(安全狗)軟體防禦DDOS攻擊:

<code>[root@test3-237 ~]</code><code># setenforce 0     //關閉selinux,否則不能安裝成功</code>

<code>[root@test3-237 ~]</code><code># getenforce       //永久關閉selinux需要配置/etc/sysconfig/selinux檔案,并重新開機機器生效!!</code>

<code>Permissive</code>

<code>安裝(nginx版)安全狗(safedog)</code>

<code>[root@test3-237 ~]</code><code># wget http://safedog.cn/safedogwz_linux_Nginx64.tar.gz</code>

<code>[root@test3-237 ~]</code><code># tar -zvxf safedogwz_linux_Nginx64.tar.gz</code>

<code>[root@test3-237 ~]</code><code># cd safedogwz_linux_Nginx64</code>

<code>[root@test3-237 safedogwz_linux_Nginx64]</code><code># chmod 755 install.py</code>

<code>[root@bastion-IDC safedogwz_linux_Nginx64]</code><code># ls</code>

<code>install_files  </code><code>install</code><code>.py  uninstall.py</code>

<code>[root@test3-237 safedogwz_linux_Nginx64]</code><code># ./install.py -A          //解除安裝安全狗就用uninstall.py</code>

<code>.......</code>

<code>  </code><code>step 3.5, start service...                                                                      [ok]</code>

<code>  </code><code>step 3.6, save safedog </code><code>install</code> <code>info...                                                          [ok]</code>

<code>   </code><code>Tips:</code>

<code>  </code><code>(1)Run the </code><code>command</code> <code>to setup Server Defense Module: sdui</code>

<code>  </code><code>(2)Explore </code><code>more</code> <code>features by tapping the </code><code>command</code> <code>to </code><code>join</code> <code>Cloud Management Center (fuyun.safedog.cn) with your account:  sdcloud -h</code>

<code>If you need any help about installation,please tap the </code><code>command</code><code>: .</code><code>/install</code><code>.py -h</code>

<code>Install Completely!</code>

<code>溫馨提示:</code>

<code>1)安裝完成後,記得一定要重新啟動Nginx服務,網站安全狗軟體即可生效。</code>

<code>2)運作時,安裝腳本預設将自動擷取Nginx服務的安裝路徑;若自動擷取失敗則将提示輸入Nginx服務的安裝路徑(絕對路徑),需要根據所安裝的Nginx的目錄,填寫真實的安裝路徑。</code>

<code>3)當出現提示:Are you sure to uninstall?[y</code><code>/n</code><code>]時,輸入y</code>

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6756515.html,如需轉載請自行聯系原作者

繼續閱讀