我有一台远程服务器 (B),它将某些传入流量转发到另一台服务器 (A,目标) 的另一个端口。
使用“伪装”我只能看到来自转发服务器 (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
}
}
答案1
作为泰罗·基尔卡宁很高兴回答我的问题,我希望可以为您提供一个最小的工作示例。
先决条件:
- 必须激活 IP 转发(检查
sysctl -a | grep forward
)remote server
- 两台服务器必须位于同一网络中
- 您
different server
必须具有remote server
默认网关(在您的情况下这可能吗?) - 内核应该是 4.18,否则你还需要定义一个后路由规则(见nftables 维基)
- 您的外部接口是
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;
}
}
要调试,请检查different server