#### 勿以君子之心度小人之腹
我的小破網站也玩了幾年,也就是我個人線上履歷啊、個人音樂網站啊、資料管理系統等內容,沒有什麼值錢的資料,我就覺得安全性沒有那麼重要,誰會吃飽了撐的來破壞我這些東西?做那些損人而不利己的事?
但是我的網站遭遇過一次幾乎滅頂之災,幾年累積的資料被清空,能改的被改動,但是我的後台服務沒有日誌功能,我完全查不到是誰操作了什麼。
後來我給服務加了日誌系統,發現每天凌晨都有大量莫名其妙的請求打到我的服務上,我驚呆了,人教人學不會,事教人一次就會。所以安全意識要強,正如標題「勿以君子之心度小人之腹」
所以這次要把網關弄好,別給駭客一點可乘之機,主要是 nginx 配置優化和後端服務隱藏
ini 体验AI代码助手 代码解读复制代码server {
listen 80;
server_name bj985.com www.bj985.com;
# 安全規則
limit_req zone=req_limit burst=15 nodelay;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
# 只攔截危險腳本,不攔圖片
location ~* \.(php|jsp|asp|aspx|sh|py|cgi)$ {
deny all;
return 403;
}
# 【關鍵】攔截指定關鍵字
location ~* (manager|phpmyadmin|shell|cmd) {
deny all;
return 403;
}
# 主頁面轉發(已刪除 limit_except,圖片正常)
location / {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 自動跳轉 PC / 手機
set $is_mobile 0;
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android)) {
set $is_mobile 1;
}
if ($is_mobile = 0) {
rewrite ^/$ /personalpc break;
}
if ($is_mobile = 1) {
rewrite ^/$ /personal2 break;
}
}
location ^~ /api {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
後端服務不要直接對外提供服務,比如我的服務跑在 8088 端口,使用 IP:8088 完全訪問不了後台任務介面,所有服務必須經過 nginx 轉發,如果你的 gin 服務是這樣寫的
css 体验AI代码助手 代码解读复制代码r := gin.New()
r.Run(":8080")
// 或者
r.Run("0.0.0.0:8080")
一定要改成
css 体验AI代码助手 代码解读复制代码r := gin.New()
r.Run("127.0.0.1:8080")
這樣即使駭客繞過了 nginx 網關,使用你的 IP 加埠號也訪問不了你的後端服務
這個也是必須的,不然有問題完全摸瞎,完全查不到