Debian防護DDOS(簡易版本)

DDOS攻擊主要仍是靠硬防,不過,對於一些小的騷擾,能夠採用DDoS deflate+iptables的方法減輕。web

=================================================================服務器

1、DDoS deflate網絡

DDoS deflate官方網站:http://deflate.medialayer.com/併發

如何確認是否受到DDOS攻擊?
執行:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
執行後,將會顯示服務器上全部的每一個IP多少個鏈接數。tcp

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 106.11.68.13
1 Address
1 servers)
2 39.69.84.165
6 125.65.242.94
132 127.0.0.1
每一個IP幾個、十幾個或幾十個鏈接數都還算比較正常,若是像上面成百上千確定就不正常了。網站

 

一、安裝DDoS deflatethis

wget http://www.inetbase.com/scripts/ddos/install.sh //下載DDoS deflate
chmod 0700 install.sh //添加權限
./install.sh //執行spa


二、配置DDoS deflateserver

下面是DDoS deflate的默認配置位於/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分鐘

##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大鏈接數,超過這個數IP就會被屏蔽,通常默認便可

##### 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=1 //使用APF仍是iptables。推薦使用iptables,將APF_BAN的值改成0便可。

##### 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被屏蔽時給指定郵箱發送郵件,推薦使用,換成本身的郵箱便可

##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用IP時間,默認600秒,可根據狀況調整
用戶可根據給默認配置文件加上的註釋提示內容,修改配置文件。

查看/usr/local/ddos/ddos.sh文件的第117行

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

修改成如下代碼便可!

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sed -n ‘/[0-9]/p’ | sort | uniq -c | sort -nr > $BAD_IP_LIST

=================================================================

2、iptables

SYN攻擊是利用TCP/IP協議3次握手的原理,發送大量的創建鏈接的網絡包,但不實際創建鏈接,最終致使被攻擊服務器的網絡隊列被佔滿,沒法被正經常使用戶訪問。SYN Flood攻擊雖然原理簡單,可是形成的危害卻十分嚴重。
首先檢測,兩種方法:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -alnt | awk '{print $5}' |awk -F ":" '{print $1}' | sort | uniq -c |sort -n

初步先制定iptables關於單個IP併發TCP鏈接

限制連往本機的web服務,1個C段的IP的併發鏈接不超過100個,超過的被拒絕:
#iptables -I INPUT -p tcp --dport 80 -m iplimit --iplimit-above 100 --iplimit-mask 24 -j REJECT
延伸例子:
限制連往本機的telnet單個IP併發鏈接爲2個,超過的鏈接被拒絕:
#iptables -I INPUT -p tcp --dport 23 -m iplimit --iplimit-above 2 -j REJECT

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT
#限制連往本機的web服務,1個C段的IP的併發鏈接不超過100個,超過的被拒絕:
延伸例子:
限制連往本機的telnet單個IP併發鏈接爲2個,超過的鏈接被拒絕:
#iptables -I INPUT -p tcp --dport 23 -m connlimit --connlimit-above 2 -j REJECT

 iplimit模塊不可用,現改用connlimit

防止同步包洪水(Sync Flood)

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人寫做
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn併發數每秒1次,能夠根據本身的須要修改

iptables -t mangle -A POSTROUTING -p tcp --syn -m connlimit --connlimit-above 20 -j LOG --log-level 4 --log-prefix "iptables: "
iptables -t mangle -A POSTROUTING -p tcp --syn -m connlimit --connlimit-above 20 -j DROP
#控制單個IP的最大併發鏈接數(我設置了最大併發鏈接數爲20)

防止各類端口掃描# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPTPing洪水攻擊(Ping of Death)# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

相關文章
相關標籤/搜索