Iptables
使用 iptables 根據模式匹配(–string)進行重定向
我想要做的是以這種方式重定向網路流量:
- HTTP GET 給定地址的每個對埠 80 的請求都應重定向到特定埠 (4444)。
- 其他所有請求都轉到埠 80。
由於由於各種原因我無法通過使用 Web 代理模組和/或轉發來做到這一點,我正在尋找一種使用 iptables 的方法。受這篇文章的啟發,我將這條規則用於我的 iptables:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -m string --algo bm --string 'GET /mjpegcgi.cgi' \ -j REDIRECT --to-port 4444
然後我打開了兩個在 4444 和 80 上監聽的 netcat 程序。但是,當我嘗試使用以下命令測試規則時:
wget -qO- http://192.168.1.88/mjpegcgi.cgi
我所擁有的總是僅來自埠 80 的響應。我究竟做錯了什麼?
您不能使用字元串匹配有意義地重定向這樣的連接。當
GET
請求通過線路到達時,連接已經建立。請記住,TCP 連接以三次握手開始;建立連接的交換不包括任何 HTTP 協議數據。此外,
REDIRECT
規則不會影響源自本地主機的流量。如果您正在測試REDIRECT
規則,還要確保您正在從另一個系統進行測試。您確實需要實現協議級代理來執行此類操作(例如,
mod_rewrite
具有代理目標的 Apache 可以工作)。