目錄
?Nginx 隱藏版本號
?限制危險請求方法
?請求限制(CC攻擊防御)
?壓力測試
?防盜鏈
?防止防盜鏈
?動態黑名單
?自動添加黑名單
?HTTPS配置
? ? ? ? HTTPS 概念
? ? ? ? 安全通信的四大原則
????????HTTPS的幾種加密方式
????????nginx https的作用
Nginx 隱藏版本號
? ? ? ? !!!注意 每個配置過的文件都要重啟nginx 注意!!!!
? ? ? ? !!!配置文件 要及時覆蓋掉 或者刪除掉 要不然會有沖突 !!!!
? ? ? ? 在生產環境中,需要隱藏Nginx的版本號,以避免泄漏 nginx的版本,使攻擊者不能針對特定的版本進行攻擊;在隱藏版本號之前可以使用Fiddler 工具抓取數據包,查看nginx版本,也可以在OpenEuler 中使用命令curl -I 查看
? ? ? ? 修改配置文件(vim /etc/nginx/conf/nginx.conf)
? ? ? ? 配置前 是可以看到版本號的?
? ????????????????? ? ?
? ? ? ? 驗證:
? ? ? ????????? ?
?限制危險請求方法
?驗證:
????????
?請求限制(CC攻擊防御)
? ? ? ? 驗證:?
vim /usr/local/nginx/html/index.html #內容隨便寫
111111111for i in $(seq 100);do curl 192.168.10.101;done #訪問多次就訪問失敗了
curl 192。168.10.101 #單個訪問就可以訪問到
?壓力測試
? ? ? ? 在另外一臺電腦上下載? httpd-tools
?????????驗證:? ? ? ? 也可以通過訪問nginx的日志信息訪問的次數
? ? ? ? 防盜鏈
? ? ? ? 先修改win10的hosts文件?
? ? ? ? 同時;也要修改Linux系統中的hosts文件
?
vim /uar/local/nginx/conf/nginx.conf
server {listen 80;server_name www.aaa.com;cd /usr/local/nginx/html/(將所需要的圖片放到該目錄下)
vim index.html(里面內容全刪掉)
<h1>nihao zhshi wo de touxiang </h1> #這個是網站的首行,可以隨便寫 記得區分兩個網站
<img src="111.jpg"/> #“111.jpg”是我當前目錄下的照片
????????????????????????????????????????
?????????????????????????????????????????????????????
? ? ? ? 102下載httpd
dnf -y install httpdvim /var/www/html/index.html
<h1>zh shi fangdao lian </h1> #這個是網站的首行,可以隨便寫 記得區分兩個網站
<img src="http://www.aaa.com/111.jpg"/> #指向的是101的網站圖片systemctl stop firewalld
systemctl start httpd
????????
? ? ? ? 驗證:
win10 訪問 www.aaa.com www.bbb.com #是可以訪問到的?
防止防盜鏈
vim /usr/local/nginx/conf/nginx.conflocation ~* \.(png|jpg|pif|jpeg|bmp|)$ {root html;valid_referers aaa.com *.aaa.com;if ($invalid_referer) {return 403;}}win10 訪問 www.aaa.com #可以訪問到圖片內容www.bbb.com #不能訪問到圖片內容
驗證:
?
?動態黑名單
編輯黑名單配置文件
????????動態黑名單是 Nginx中一種實時攔截惡意請求的安全機制,它允許在不重啟服務的情況下,動態更新需要封禁的 IP地址或網段。相比靜態配置的 allow/deny指令,動態黑名單更靈活高效,適用于高并發、多變的攻擊防護場景。
vim /usr/local/nginx/conf/blockips.conf
192.168.1.0 #禁止整個網段
192.168.10.102 1; #禁止這個IPIP地址后的數字含義:0 ""; #允許
1 403; #完全封禁
2 444; #靜默斷開
3 503; #服務不可用vim /usr/local/nginx/conf/nginx.confhttp下:
geo $block_ip {
default 0; #默認允許訪問
include /usr/local/nginx/conf/blockips.conf; #包含黑名單
}server下:if ($block_ip) { #判斷標記值return 403; #封禁動作}
? ? ? ? 驗證:使用102 訪問101
?????????
自動添加黑名單
vim aaa.sh
#!/bin/bsah
awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c |sort -nr | awk '{if($1>100) print $2 " 1;"}' > /usr/local/nginx/conf/blockips.conf 102:
dnf -y install httpd-tools
ab -n 300 -c 30 http://192.168.10.101/101:
cat /usr/local/nginx/logs/access.log #會自動記錄超過100次訪問的ip
102驗證:
101查看訪問日志
HTTPS配置
? ? ? ? HTTPS 概念
HTTPS,全稱HyperText Transfer Protocol over Secure Socket Layer,設計初衷是為了保證數據傳輸安全。http(超文本傳輸協議)是客戶端瀏覽器與web 服務器之間的通信協議,而 https 協議可以認為是 HTTP + SSL/TLS,在 http 之下 tcp 之上加了ss1一層,用于對應用層數據的加解密。
? ? ? ? HTTP不安全
????????HTTP 由于是明文傳輸,主要存在三大風險:竊聽風險、篡改風險、冒充風險。???????
- 竊聽風險:中間人可以獲取到通信內容,由于內容是明文,所以獲取明文后有安全風險
- 篡改風險:中間人可以篡改報文內容后再發送給對方,風險極大。
- 冒充風險:比如你以為是在和某寶通信,但實際上是在和一個釣魚網站通信。
? ? ? ? 安全通信的四大原則
- 機密性:即對數據加密,解決了竊聽風險,因為即使被中間人竊聽,由于數據是加密的,他也拿不到明文;
- 完整性:指數據在傳輸過程中沒有被篡改,不多不少,保持原樣,中途如果哪怕改了一個標點符號,接收方也能識別出來,從來判定接收報文不合法:
- 身份認證:確認對方的真實身份,即證明“你媽是你媽”的問題,這樣就解決了冒充風險,用戶不用擔心訪問的是某寶結果卻在和釣魚網站通信的問題:
- 不可否認:即不可否認已發生的行為,比如小明向小紅借了1000元,但沒打借條,或者打了借條但沒有簽名,就會造成小紅的資金損失。
????????HTTPS的幾種加密方式
?????????HTTP 是明文傳輸的,那我們給報文加密,既然要加密,我們肯定需要通信雙方協商好密鑰吧。一種是通信雙方使用同一把密鑰,即對稱加密的方式來給報文進行加解密。
????????非對稱加密:使用一對密鑰,即公鑰和私鑰。公鑰可以公開,任何人都可以使用公鑰對數據進行加密;私鑰由所有者保密,只有使用對應的私鑰才能對加密數據進行解密。
????????數字證書:數字證書是一種由證書頒發機構(CA)簽發的電子文件,它將用戶的身份信息(如姓名、組織、域名等)與公鑰進行綁定。其主要作用是驗證公鑰的真實性和持有者的身份,防止中間人攻擊,確保通信雙方能夠安全地交換信息。????????
????????nginx https的作用
?????????加密傳輸數據:HTTPS 使用 SSL/TLS 協議對數據進行加密,確保數據在客戶端(如瀏覽器)和服務器(如 Nginx 服務器)之間傳輸時不被竊取或篡改。例如,用戶在電商網站上輸入的用戶名、密碼、信用卡信息等敏感數據,通過 HTTPS 加密后,即使數據在傳輸過程中被攔截,攻擊者也無法獲取其真實內容。
????????驗證服務器身份:HTTPS 通過數字證書來驗證服務器的身份,確保客戶端連接到的是真實可靠的服務器,而不是假冒的服務器。用戶訪問銀行網站時,瀏覽器會驗證銀行服務器的數字證書,如果證書有效且與銀行域名匹配,用戶就可以確認自己連接到了正確的銀行服務器,防止遭受釣魚攻擊。
????????數據完整性保護:HTTPS 使用消息認證碼(MAC)等技術來確保數據在傳輸過程中的完整性,防止數據被意外或惡意篡改。如果數據在傳輸過程中被篡改,接收方可以通過驗證 MAC 發現數據的變化,從而拒絕接受被篡改的數據?
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=benet/CN=localhost"vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
server_name localhost;server {
listen 80;
# listen somename:8080;
# server_name somename alias another.alias;
return 301 https://$host$request_uri;
}
驗證: