Smtp

NFTables:是否可以在不偽裝的情況下轉發流量?

  • September 29, 2020

我有一個遠端伺服器(B),它將某些傳入流量轉發到不同伺服器的另一個埠(A,dest)。

使用“偽裝”,我只能看到來自轉發伺服器 (B) 的流量,是否可以看到來自原始來源 (C) 的流量?如果我將“偽裝”替換為“接受”,我將無法再到達目的地 (A) 的 8080 埠。

草圖:

C -> B:25 -> A:8080
# A receives C requests as if B made them
# Unfortunately this breaks some implementations like SPF

NFTables 配置:

# define destination address
define dest = 10.0.0.2

# table for smtp forwarding
table ip smtp {
chain pre {
 type nat hook prerouting priority -100
 tcp dport 25 dnat to $dest:8080
}
chain post {
 type nat hook postrouting priority 100
 ip daddr $dest masquerade
}
}

由於Tero Kilkanen很高興回答我的問題,我希望可以為您提供一個最小的工作範例。

前提條件:

  1. IP 轉發必須sysctl -a | grep forwardremote server
  2. 兩台伺服器必須在同一個網路中
  3. different server必須擁有remote server預設網關(在您的情況下這可能嗎?)
  4. 核心應該是 4.18 否則你還需要定義一個後路由規則(參見nftables wiki
  5. 否則,您remote server的外部介面將相應替換enp35s0

鑑於此,您可以使用以下 NFTables 規則

table ip nat {
       chain prerouting {
               type nat hook prerouting priority 0; policy accept;
               iif "enp35s0" tcp dport 25 dnat to 10.0.0.2:8080
       }
}
table inet filter {
       chain input {
               type filter hook input priority 0; policy accept;
       }

       chain forward {
               type filter hook forward priority 0; policy accept;
       }

       chain output {
               type filter hook output priority 0; policy accept;
       }
}

調試檢查 tcpdumpdifferent server

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