NFTables: можно ли перенаправлять трафик, не маскируя его?
У меня есть удаленный сервер (B), который пересылает определенный входящий трафик на другой порт другого сервера (A, dest).
При "маскараде" я вижу только трафик, исходящий от прямого сервера (B), возможно ли увидеть трафик, исходящий из исходных источников (C)? Если я заменю "masquerade" на "accept", я больше не смогу подключиться к порту 8080 пункта назначения (A).
Эскиз:
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 ответ
Решение
Поскольку Tero Kilkanen так любезно ответил на мой вопрос, я надеюсь предоставить вам минимальный рабочий пример.
Предварительные условия:
- IP-переадресация должна быть активирована (проверьте с помощью
sysctl -a | grep forward
) наremote server
- оба сервера должны быть в одной сети
- Твой
different server
должен иметьremote server
в качестве шлюза по умолчанию (возможно ли это в вашем случае?) - Ядро должно быть 4.18, иначе вам нужно также определить правило постмаршрутизации (см. Nftables wiki)
- Ваш внешний интерфейс
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;
}
}
Для отладки проверьте tcpdump на
different server