好幾個月沒寫博客,一方面是工做忙緣由,一方面是內容太淺,沒什麼實際應用的我也不想寫,如今正好最近遭受了大量的UDP***,我給你們介紹一下我這裏是如何防護DDOS等流量***。php
先給你們看看我最近遭受***狀況數據彙總
css
一、最近1周,總共受到流量***14次,均是UDP***;html
二、前9次均是機房幫忙進行流量牽引、清洗或黑洞;nginx
三、但機房能夠給清洗的量有限,基本8G如下能夠幫忙,並且這個清洗有的機房是收費,有的是免費,8G以上的話,機房就得把流量牽引到黑洞,也就是封IP,通常是禁止訪問2小時,若是解封后還有屢次***,就得封24小時,目前我這裏是受到封IP,直接更換公網IP,但最近幾天***此時過多,老是被動更換ip也不是一個好的方式,因此我這裏考察了不少方案,最終採用了高防,價格便宜、性價比高。web
我公司也不是沒有防禦方式,有IPS與IDS設備,也有防火牆,通常小流量4G如下均能防護,但***量超過4G後,流量基本都沒法到達我公司網絡,因此只能採用其餘方案。後端
下面是我考察行業內的方案,選擇3個比較好的,有錢其實我也想選擇阿里雲盾或騰訊大禹,由於他們防護配置簡單,而且是分佈式防護,跟CDN加速同樣,***都是轉發到就近的高防節點,例如:上海電信的***量就直接在上海電信高防防護,這樣能夠防護更多的***,而且即便某節點被***垮了,也只是影響整個節點,其餘節點正常。安全
但價格太貴(機房的流量清洗更貴,哈哈),公司不批,爲了保證業務,只能選擇價格便宜、性價比高的高防,我選擇的是40G 電信+聯通節點的方案,最大整個高防能夠防護100G,目前我這裏***都在40G如下,正好知足需求,此方案細節爲:bash
電信單ip防護40g流量***/1000w pps,聯通單ip防護10g流量***/500w pps。 聯通防護10G,緣由是聯通內網管控嚴格,基本***都是從電信來的。
自從使用了高防方案,總共遭受了5次***,但均未影響業務。網絡
有了高防節點,你能夠選擇2個方案進行配置:tcp
一、最簡單的使用Iptables的DNAT技術,直接讓流量經過高防後,轉發到源站;
二、使用nginx的反向代理技術;
方案一優點是配置簡單,配置好iptables規則後,不須要管後端源站有多少域名,只須要流量是經過高防通通轉發到源站,但缺點是源站沒法獲取客戶的真實IP。
方案二優點是能夠獲取讓源站獲取客戶真實IP,缺點是源站有多少域名都須要在nginx的反向代理裏配置。
當前這2個方案,都得結合DNS技術,須要把高防的IP解析到域名,通常高防多節點會給你2個IP,一個是電信,一個是聯通,因此你須要在DNS裏解析這2個IP,我使用DNSPOD,因此你能夠參考下面
在"線路類型"這裏,默認與電信線路都解析到高防的電信裏,聯通就解析到聯通裏,TTL時間最好能短一些,若是有問題能夠快速切換,但因爲我這個是免費dnspod,因此只能是600秒了。
另外若是想使用高防,你源站IP也須要先切換到一個新的IP,由於舊的已經暴漏,若是不換IP,可能致使對方直接***你源站,而且切換到新IP後,80端口也只容許高防IP獲取數據。
下面介紹若是使用iptables的dnat與nginx反向代理。
一、IPTABLE的DNAT
A、須要先配置轉發功能
sysctl -w net.ipv4.ip_forward=1
B、配置iptables
*nat :PREROUTING ACCEPT [9:496] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -d 高防電信IP/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 源站IP:源站web端口 -A PREROUTING -d 高防聯通IP/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 源站IP:源站web端口 -A POSTROUTING -p tcp -m tcp --dport 源站web端口 -j SNAT --to-source 高防電信IP -A POSTROUTING -p tcp -m tcp --dport 源站web端口 -j SNAT --to-source 高防聯通IP COMMIT # Generated by iptables-save v1.4.7 on Wed Feb 22 11:49:17 2017 *filter :INPUT DROP [79:4799] :FORWARD ACCEPT [37:2232] :OUTPUT ACCEPT [150:21620] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -s 公司機房網段/24 -p tcp -m multiport --dports 22,10050 -j ACCEPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT COMMIT
針對上面高防電信IP、高防聯通IP、源站IP、源站web端口、公司機房網段進行修改。
完成後重啓iptables就能夠生效(dnspod的配置別忘記),源站不須要修改任何配置。
二、Nginx的反向代理
A、安裝
yum或編譯都行,但若是想讓源站獲取真實用戶IP須要新增模塊(高防與源站都須要有此模塊)
--with-http_realip_module
這個模板默認yum安裝是已存在,若是不知道本身有哪些模塊可使用下面命令查看
nginx -V
B、在高防的nginx的裏配置
upstream web { server xxx.xxx.xxx.xxx:80; } server { listen 80; server_name notice1.ops.xxx.xxx; client_max_body_size 10M; proxy_read_timeout 30; access_log /var/log/nginx/access_notice.log; error_log /var/log/nginx/error_notice.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400; proxy_pass http://web; } }
須要修改upstream web裏的server源站ip與端口,以及server_name那裏的域名。
最後你須要在iptables裏開通本機80容許公網訪問。
C、在源站的nginx裏配置
server { listen 80; server_name notice1.ops.xxx.xxx; index index.html index.htm index.php; root /var/www/html/; access_log /var/log/nginx/notice-access.log; error_log /var/log/nginx/notice-error.log; error_page 502 = /502.html; location ~ .*\.(php|php5)?$ { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; set_real_ip_from xxx.xxx.xxx.xxx; real_ip_header X-Real-IP; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|mp3)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } }
主要須要修改的是server_name與set_real_ip_from,後者是須要填寫高防的IP。
完成後重啓nginx,而且在iptables防火牆裏設置只容許高防IP訪問本身本地80.
另外若是你有多個域名,就寫多個虛擬主機配置文件就好。
目前高防方案只能防禦100G如下***,若是***超過100G,你能夠選擇阿里雲盾的,能夠最高支持300G的,另外真的要是超過了100G***,你能夠聯繫網監了。
下面是我針對***量作的防護方案,你們能夠參考。