黑客如何用nginx攻擊一個網站?

語言: CN / TW / HK

~~最好的防禦方式就是攻擊~~ 知己知彼,百戰不殆。掌握攻擊者的套路才好頂得住攻擊。

可能我的讀者多少了解過Nginx,我先給不瞭解的同學簡單說一下原理。已經瞭解的跳到第二節。

3分鐘瞭解Nginx

Nginx是一款高效能的Web伺服器和反向代理伺服器。

它可以用來搭建網站、做應用伺服器,能夠處理大量的併發連線和請求。

  • 靜態內容託管(主要):可以用來做網頁、圖片、檔案的 “靜態”內容託管。
  • 動態內容託管(主要):將經常訪問的動態內容快取到記憶體中,提高訪問速度和效能。
  • 反向代理(主要):將客戶端的請求傳送到後端真實伺服器,並將後端伺服器的響應返回給客戶端。

類似於一個快遞收發室,指揮快遞(流量)應該投遞到哪個買家。

它還能提供一些高階功能:

  • 負載均衡:將客戶端的請求分發到多個後端伺服器上,從而提高服務的可用性和效能。
  • SSL/TLS加密傳輸:通過加密和認證保護資料傳輸安全。
  • HTTP/2支援:通過多路複用技術提高併發連線處理能力和頁面載入速度。
  • 安全防護:提供多種防護機制,如限制IP訪問、請求頻率限制、反爬蟲等。
  • 動態內容處理:支援FastCGI、uWSGI等協議,與後端應用伺服器進行動態內容互動。
  • 日誌記錄:記錄訪問日誌和錯誤日誌,方便監控和排查問題。
  • 自定義模組開發:支援自定義模組開發,可以根據需求進行二次開發和擴充套件。

讀到這裡,我知道很多人腦子都要爆了。現在讓我們直入主題。結合以上功能的能做哪些攻擊方式。

反向代理攻擊

使用Nginx作為反向代理伺服器,將攻擊流量轉發到目標伺服器。這樣就能隱藏攻擊流量的真實地址。

perl server { listen 80; server_name www.example.com; location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

  • 所有訪問www.example.com:80的流量全部都會轉發到http://backend_server伺服器上。
  • proxy_set_header X-Real-IP $remote_addr; 設定請求頭提供真實來源ip
  • proxy_set_header Host $host;設定訪問的Host

只要把X-Real-IP改成其他不存在的IP,就可以隱藏自己的真實IP地址,讓攻擊更難以被追蹤和防禦。當然相對於客戶端來說,只能知道nginx的地址就不知道真實伺服器的地址了。

DDoS攻擊

DDoS攻擊就是藉助某些工具瞬間發動大量的請求,讓伺服器資源耗盡,無法正常響應其他使用者的請求,一般也常用於壓力測試。介紹一些常用的工具:

  • ApacheBench (ab):常用的命令列工具,用於模擬多個併發請求。可以控制請求總數、併發數等引數。
  • Siege:命令列工具,和上面一樣,並且還支援 HTTPHTTPS 協議。
  • JMeter:一個功能強大的 Java 應用程式,可以用於模擬各種負載情況。JMeter 可以通過圖形介面進行配置,支援更多協議和資料格式,包括 HTTP、HTTPS、SOAP、REST 等。

但事實往往比這個殘酷,攻擊者會做一些病毒,在網路上傳播開來,病毒執行時可以直接瘋狂訪問伺服器,或者利用Nginx提供的反向代理和其支援的比如socketSSL,不斷的建立握手請求。

限流、黑名單防禦

小熊主要給大家介紹怎麼防禦。這種病毒感染方式就不說了,我害怕戴銀手銬。

```yaml http { limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

geo $block {
    default 0;
    include /path/to/block_ip.txt;
}

server {
    listen 80;

    location / {
        limit_req zone=one burst=10 nodelay;
        if ($block) {
            return 403;
        }
        proxy_pass http://backend;
    }
}

} ```

  • limit_req_zone 定義了一個名為“one”的限制請求速率的區域,該區域的大小為10MB,請求速率限制為每秒5個請求。
  • limit_req 指定使用名為“one”的限制規則。
  • geo $block是黑名單,這個檔案可以寫需要遮蔽的ip
  • server塊中的location指令使用了limit_reqif表示黑名單的返回403狀態碼。

負載均衡防禦

假設我有兩個後端伺服器。

bash http { upstream backend { # 輪詢方式的負載均衡 server backend1.example.com; server backend2.example.com; } ... server{...} }

有多種負載均衡方式。

```bash server { ... location /api/ { # 輪訓 proxy_pass http://backend; }

location /lb/ {
  # IP雜湊方式的負載均衡
  ip_hash;
  proxy_pass http://backend;
}

location /upstream/ {
  # 根據伺服器效能或響應時間進行加權輪詢
  upstream backend {
    server backend1.example.com weight=2;
    server backend2.example.com;
  }
  # 對 backend 進行訪問
  proxy_pass http://backend;
}

location /least_conn/ {
  # 最少連線數的負載均衡
  least_conn;
  proxy_pass http://backend;
}

location /random/ {
  # 隨機方式的負載均衡
  random;
  proxy_pass http://backend;
}

location /sticky/ {
  # 基於客戶端IP的雜湊方式的負載均衡
  hash $remote_addr consistent;
  server backend1.example.com;
  server backend2.example.com;
}

} ```

很多人學nginx都會對ip_hash和基於客戶端IP的雜湊方式的負載均衡有疑惑。分不清,我一句話給大家講清楚。

  • ip_hash能保證相同來源一定能訪問相同的伺服器,適用於登入等有狀態的場景。在請求量少的時候,容易出現很多ip落在同一伺服器上,分佈不均衡。
  • 基於客戶端ip的hash,是根據客戶端 IP 地址計算雜湊值,然後將雜湊值與後端伺服器數量取模。使請求平均分配到不同的伺服器上,也能保證同一ip請求落到同一伺服器上。但是可以保證各個伺服器比較均衡。

我認為使用方式二更好,可能理解有限,歡迎各位讀者分享自己的看法!

網路釣魚攻擊

黑客可以使用Nginx偽裝成一個合法的網站,誘騙使用者輸入敏感資訊。例如,他們可以使用Nginx構造一個偽造的登入頁面,讓使用者輸入使用者名稱和密碼,然後將這些資訊傳送給黑客伺服器。

其實就是靜態託管+反向代理功能的組合。

```bash server { listen 80; server_name example.com;

# 靜態網站託管
location / {
    root   /var/www/mywebsite/dist;
    index  index.html index.htm;
}

# API代理轉發
location /api {
    proxy_pass  http://localhost:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

} ```

  • 訪問根目錄就訪問到靜態的網站資源。
  • 訪問/api路由轉發到api服務上。

我的部落格就用了這種方式,同樣的我寫了很多了不同的server{}塊,來監聽不同的域名,這樣我可以把多個網站全部部署在同一臺機器上,極限利用伺服器資源。

最後

這兩天在寫一個小程式,計劃做成程式設計師資源、求助、內推、課程、學習路線圖之類的綜合類小程式,所以更新有點慢了,見諒見諒。

對於今天所述的文章,真正有不良居心的人,總是會有更sao的攻擊方法。我也不敢說得太多,而且這些攻擊的行為都是違法的,建議大家學會以後手下留情。

今天的目的實際上是教大家學會nginx的常用配置方法,用心良苦,莫辜負點個贊再走。

一起進步

你好,我是小熊,是一個愛技術但是更愛錢的程式設計師。上進且佛系自律的人。喜歡發小祕密/臭屁又愛炫耀。

奮鬥的大學,激情的現在。賺了錢買了房,寫了書出了名。當過面試官,帶過徒弟搬過轉。

大廠外來務工人員。是我,我是小熊,是不一樣的煙火歡迎圍觀。

可掘金私信我,也可 加我好友 我們一起進步

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 3 天,點選檢視活動詳情