需求#
Cloudflare 企業版套餐(200 美元的,或者更高),PRO 版本可以參考這篇文章:https://moeyy.cn/posts/d4fb87f4694a.html
你的站點必須使用 HTTPS
開始(在 CloudFlare 上操作).#
自動程序#
首先,需要登入 Cloudflare 控制面板,選擇域名 --> 防火牆 --> 自動程序,點擊 配置超級自動程序攻擊模式
如圖所示,可以按照我的圖片進行設置
托管規則#
然後打開選擇 防火牆 --> 托管規則,把選項全部勾上,敏感度高,操作為質詢。
網站以及 SSL 證書配置#
大致分享一下我的規則。
建議您的站點設置 SSL 證書並開啟 http2 協議:
並且開啟強制 https,也可以限制最低 TLS 版本為1.1(目前瀏覽器最低都是 1.2) 參考圖片:
頁面規則#
可以參考一下我的
防火牆規則#
阻止規則:#
Tor 是洋蔥路由,可以屏蔽。威脅分數大於等於 5 進行阻止。威脅分數正常訪客壓根不會觸發,不要害怕誤封。
驗證碼規則:#
第一段的意思是禁止 https 的訪問有 http1 的 HTTP 版本,因為正常訪客訪問 https 都是 HTTP2,只有代理 CC 會是 HTTP1,前提是你網站開啟了 https,不開啟 https 這個規則沒作用。
用戶代理這個我就不說了,防止一些奇奇怪怪的 ua。
威脅分數大於 1 的話自動彈出驗證碼,正常瀏覽器,乾淨的 IP 不會觸發。
最後一個是防止偽造 ip 的。
除了設置規則,你還需要設置一些其他的東西。
比如 HTTP DDOS, 全部拉滿:
到這裡,在 Cloudflare 上設置的規則已經完成了。接下來是設置源站的
Nginx 配置#
我們可以設置一個單獨的 UA 回源,並且只允許那個 ua 回源。
先在 Cloudflare 上操作:
創建一個 HTTP 請求頭修改,內容為 User-Agent:XXX (XXX 可以替換成其他):
比如我的是moeyydad,你可以替換成別的,別人猜不到就行。
然後我們在 nginx 配置文件內添加一個 if
if ($http_user_agent != "moeyydad"){
return 444;
}
這段代碼加在 root 的下面
證書防護#
可以防止源站證書被掃到。如果源站使用 ssl 回源,我們需要上傳證書,但是我們不能使用自己的證書,可以使用自簽證書。比如:
證書#
-----BEGIN CERTIFICATE-----
MIIDITCCAsagAwIBAgIUTcEWLzynkLCFCoAC1iDH2vG3EkYwCgYIKoZIzj0EAwIw
gY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTgwNgYDVQQL
Ey9DbG91ZEZsYXJlIE9yaWdpbiBTU0wgRUNDIENlcnRpZmljYXRlIEF1dGhvcml0
eTAeFw0xOTAxMTMxNDMxMDBaFw0zNDAxMDkxNDMxMDBaMGIxGTAXBgNVBAoTEENs
b3VkRmxhcmUsIEluYy4xHTAbBgNVBAsTFENsb3VkRmxhcmUgT3JpZ2luIENBMSYw
JAYDVQQDEx1DbG91ZEZsYXJlIE9yaWdpbiBDZXJ0aWZpY2F0ZTBZMBMGByqGSM49
AgEGCCqGSM49AwEHA0IABAg/hZ9lDHj/f+0jDRAN23TkNEqIi46mCGnwZVD3glxL
l+a1mpfXLHSEFTipnSyQgmvkPYzQGaEIFD0q6W/ZgMujggEqMIIBJjAOBgNVHQ8B
Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB
/wQCMAAwHQYDVR0OBBYEFCEZF6Eyem01XPbgwr6DXLZV1qsQMB8GA1UdIwQYMBaA
FIUwXTsqcNTt1ZJnB/3rObQaDjinMEQGCCsGAQUFBwEBBDgwNjA0BggrBgEFBQcw
AYYoaHR0cDovL29jc3AuY2xvdWRmbGFyZS5jb20vb3JpZ2luX2VjY19jYTAjBgNV
HREEHDAaggwqLmRuc3BvZC5jb22CCmRuc3BvZC5jb20wPAYDVR0fBDUwMzAxoC+g
LYYraHR0cDovL2NybC5jbG91ZGZsYXJlLmNvbS9vcmlnaW5fZWNjX2NhLmNybDAK
BggqhkjOPQQDAgNJADBGAiEAnrequCk/QZOOrcPH6C3Hgcy4SPNUy5rQtku/aYkj
qQoCIQCN6IyYNiXuwG+8jUgJrveiirBjiz2jXZSTEfVAyibjTg==
-----END CERTIFICATE-----
密鑰#
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK0HE3hTJQDg6p/fj
nS92eSuRKZEZ5F4grT6tWFKNYVmhRANCAAQIP4WfZQx4/3/tIw0QDdt05DRKiIuO
pghp8GVQ94JcS5fmtZqX1yx0hBU4qZ0skIJr5D2M0BmhCBQ9Kulv2YDL
-----END PRIVATE KEY-----
如何測試你的源 ip 不會被洩露呢?
你可以先在 hosts 文件把添加你的源 ip 和域名,然後打開瀏覽器訪問,如果無法訪問就是成功的,因為受到 ua 限制。
其次,檢查證書確保不是你域名的證書。還要檢查默認證書,https://ip/ 進行訪問,看看證書是不是你域名的,如果不是則大功告成。
其他配置#
屏蔽地區#
如果你的訪客只是中國地區的,你可以設置只允許中國訪問:
使用速率限制#
可以根據你網站的 api 或者其他進行速率限制。
自定義 Host 回源#
這個跟自定義 UA 回源類似,目前一些掃源程序的原理是帶一個 host 頭訪問全球的 ip 進行測試和驗證。
比如我設置一個回源域名為moeyydad.xyz回源,然後把源站域名moeyy.cn替換為moeyydad.xyz,這樣就不會找到我們的源站。配合自定義 UA 回源,源站配置CF 的自簽 SSL 證書,自定義 Host 回源,攻擊者則無法找到我們的源站。
CF 的自簽 SSL 證書 在這裡生成:
做完以上操作,你的網站已經是無敵的了。