Iptables

使用 iptables 根據模式匹配(–string)進行重定向

  • February 24, 2012

我想要做的是以這種方式重定向網路流量:

  1. HTTP GET 給定地址的每個對埠 80 的請求都應重定向到特定埠 (4444)。
  2. 其他所有請求都轉到埠 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 可以工作)。

引用自:https://serverfault.com/questions/363459