防范DDoS攻擊最主要的手段是加錢上高防,同時隱藏網站真實IP。本文詳細介紹幾種網站隱藏真實ip的方法和優缺點,讓你能真正做一個永不暴露真實IP的網站。
做一個永不暴露真實IP的網站
返回目錄
既然不想暴露網站的真實IP,那么真實服務器前面至少套一層代理。一般來說,位于最前線的反向代理主要有如下幾種:
- CDN:內容分發網絡,就近為用戶提供服務,加速訪問;
- 高防IP:高防IP一般位于大帶寬的骨干網節點上,用于清洗DDoS流量;
- SLB:負載均衡器,用在大流量、繁忙的網站上,常見的SLB有LVS、F5等。
這三種反向代理主要作用不一樣,配置好的情況下都能隱藏服務器真實IP。對于普通的網站,使用CDN或者高防就足夠,業務量大的情況下才會用到SLB。
下面介紹使用了反向代理的情況下,隱藏網站真實IP的操作。
防火墻
使用防火墻是最簡單的做法,即:將反向代理的回源IP加入白名單,屏蔽其他IP的任何請求。
例如使用CloudFlare的免費CDN服務,其回源IP可從 https://www.cloudflare.com/zh-cn/ips/ 獲取,然后將其加入白名單,同時屏蔽其他IP:
# 將cf ip地址放在 cf_ips.txt# 首先將cf的ip加入白名單while read -r linedo firewall-cmd --zone=trusted --add-source=$linedone < cf_ips.txt# 然后移除其他ip對http和https服務的訪問firewall-cmd --remove-service=http firewall-cmd --remove-service=https
經過上述設置,Cloudflare 的IP能正常訪問,其他IP完全無法訪問真實ip的網站服務器,很好的隱藏了真實IP。
該方法設置簡單,適用于服務器托管單站點的情形。當服務器上托管多個網站,并且某些站點需要直接暴露外網時,這種做法缺乏靈活性,無法實現。
也可以通過Nginx的allow/deny指令達到相同效果
IPv6
對于防火墻和網絡不熟悉的網友,可以考慮使用IPv6來隱藏網站的真實IP。具體操作為:
1.找一臺有IPv6地址的服務器,只有IPv6的NAT VPS更好。目前IPv6地址正在普及中,許多商家都免費提供IPv6地址,例如 一些VPS商家整理 中的 阿里云、Vultr、Linode、CloudCone,有的還提供不止一個IPv6地址;
2. 設置網站只監聽IPv6端口。以Nginx為例,網站配置文件形如:
server {
listen [::]:80;
server_name 主機名; # 請改成自己的主機名
return 301 https://主機名$request_uri;}server {
listen [::]:443 ssl http2;
server_name 主機名;
ssl_certificate 證書路徑;
ssl_certificate_key ssl密鑰路徑;
# 其他設置}
3. 找一家支持只有IPv6的CDN,例如 Cloudflare,設置IPv6解析:
CloudFlare設置ipv6解析
經過上面三步設置,基本上可確保不會泄漏真實IP,原因如下:
1. 絕大多數情況下,人們都會理所當然的找IPv4,不會想到你的網站根本不存在IPv4網絡上;
2. 相對于IPv4,IPv6的地址段實在太龐大。即使有zmap這種幾小時掃描完全球ipv4段的神器,或者Shodan搜索引擎,也很難從海量地址中尋找單個地址。
如果不放心,可以同樣加上防火墻,就萬無一失了:
# 首先將cf的ip加入白名單while read -r linedo firewall-cmd --zone=trusted --add-source=$linedone < cf_ips.txt# 然后屏蔽其他地址對ipv6的訪問權限firewall-cmd --add-rich-rule="rule family='ipv6' source address='::0/0' drop"
該方法同樣設置簡單,以奇招勝出,單臺服務器能托管多個網站,并且其他網站可直接暴露不受影響。
CNAME
另一種常見隱藏真實IP方式是使用CNAME,同樣無需設置防火墻。其操作如下:
1. CDN回源時使用CNAME方式回源到另一個主機名上。例如tlanyan.pp.ua回源的www.abcdexfd.com。需要注意的是,前端域名和源站域名最好不是同一個,防止通過爆破二級域名泄漏真實IP;
2. 在源站服務器上設置默認站點,防止通過host方式爆破。由于默認站點只是為了防止SNI方式泄漏真實IP,因此使用自簽證書即可:
# 生成密鑰openssl genrsa -out example.key 2048# 生成證書,期間需要填一些信息openssl req -new -x509 -days 3650 -key example.key -out example.pem
接著以Nginx為例,設置默認站點:
server {
listen 80 default_server;
server_name example.com;
return 301 https://example.com$request_uri;}server {
listen 443 ssl http2;
server_name example.com default_server;
ssl_certificate example.pem;
ssl_certificate_key example.key;}
然后重啟Nginx即可。
該方法無需設置防火墻,設置較為簡單,但是需要額外一個域名。
注意事項
以上操作只能讓他人在明面上無法直接訪問真實服務器,但請仔細閱讀 隱藏網站的真實ip:https://itlanyan.com/hide-site-real-ip/ 中的建議,防止有發送郵件、WordPress pingback等隱式暴露IP的行為。
遇到DDoS怎么辦?
如果域名之前從未用過,一出道就用上面提到的方法,基本上可以保證不會泄漏網站的真實IP。
但是不泄漏真實IP不代表不會被DDoS或者CC攻擊,遇到DDoS怎么辦?解決辦法主要有:
1. 加錢上高防保平安;
2. DNS解析域名到127.0.0.1保平安;
3. 關機保平安。
請根據實際情況和業務需求采取相應措施。
FreeBuf
系統安全運維
CNCERT國家工程研究中心
安全內參
安全圈
GoUpSec
GoUpSec
系統安全運維
中國信息安全
聚銘網絡
聚銘網絡
系統安全運維