因為ssl加解密的几制已經搞很久了還是有問題
所以找看看其他的解決方案
這几天試了一下 nginx 的 mirror 功能
記錄一下
在要執行 mirror 的 nginx 上設定如下
server {
listen 443 ssl;
server_name aaa.com.tw;
ssl_certificate /etc/ssl/certs/server.cer;
ssl_certificate_key /etc/ssl/certs/server.key;
location / {
proxy_pass http://primary_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
mirror /mirror;
mirror_request_body on;
}
location /mirror {
internal;
proxy_pass http://secondary_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1s;
proxy_connect_timeout 1s;
}
}
upstream primary_backend {
server 10.0.0.1:80;
}
upstream secondary_backend {
server 10.0.0.2:80;
}
10.0.0.1 是提供服務的server
10.0.0.2 接收 mirror過來的內容
10.0.0.1 10.0.0.2 二台都必須要起web server並listen 非加密的 80 port
10.0.0.2只需要啟動即可 不需要跟 10.0.0.1有相同的網頁內容
因為如果10.0.0.2沒有 web server mirror過來的封包會被直接丟掉
同時在 10.0.0.2上啟動 ids 軟体 如 snort, suricata 等 分析mirror過來的內容
10.0.0.1會把client的request解密後同時送到 10.0.0.1 10.0.0.2
但不會 mirror server response 的內容
10.0.0.2 上的nginx access log 預設會記錄 10.0.0.1這個ip
如果要改成 request client的ip nginx.conf 要新增以下內容
server {
set_real_ip_from 10.0.0.1;
real_ip_header X-Real-IP;