最近服務器上一個drupal站一個無效請求導致服務器cpu超高,特別消耗資源,剛好近期在研究iptable的ddos策略,就來嘗試研究一下解決辦法.
首先,看看iptable解決辦法,對于要解決syn flood以及ddos等推薦用iptable,比較輕量級,也是iptable比較擅長的.
在網上找了一下,iptable的 recent模塊可以解決問題,先看一下recent的參數(shù).
- --name #設定列表名稱,默認DEFAULT。
- --rsource #源地址,此為默認。
- --rdest #目的地址
- --seconds #指定時間內
- --hitcount #命中次數(shù)
- --set #將地址添加進列表,并更新信息,包含地址加入的時間戳。
- --rcheck #檢查地址是否在列表,以第一個匹配開始計算時間。
- --update #和rcheck類似,以最后一個匹配計算時間。
- --remove #在列表里刪除相應地址,后跟列表名稱及地址。
最終測試,下面的代碼可以測試通過:
- #!/bin/bash
- IPT=/sbin/iptables
- # Max connection in seconds
- SECONDS=100
- # Max connections per IP
- BLOCKCOUNT=10
- # ....
- # ..
- # default action can be DROP or REJECT
- DACTION="REJECT"
- $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
- $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} //Vevb.com
- # ....
- # ..
向服務器發(fā)送超過10次請求,就會出現(xiàn)connect closed的錯誤消息,表示成功,測試用瀏覽器即可,因為之后10次請求,多的話可以用ab -n xx -c xx.
其次,varnish的解決方案.
varnish的優(yōu)點是VCL功能強大,之前筆者用varnish做過防止robots抓取的操作,但是vcl如何防止ddos以及同一ip的限制,在網上看到一個解決方案,就是security.vcl,但是感覺vcl寫得忒忒多,不知道是不是因為功能太復雜的原因.
具體查看這個VCL:https://github.com/ssm/security.vcl
最后,Nginx和Apache解決方案,Nginx和Apache是最終的web服務器,所以安全層面可以放到這里來做,關于并發(fā)訪問的模塊.
Nginx有一個 ngx_http_limit_conn_module
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Apache的模塊,limitipconn
http://dominia.org/djao/limitipconn2.html
如果機房自帶ddos防御機制,所以一般沒問題,因此drupal方面,可以使用fast404等模塊,減少這種404多帶來的cpu壓力.
再順便推薦一下drupal的一個安全模塊,Security kit:https://www.drupal.org/project/seckit
新聞熱點
疑難解答
圖片精選