Настройка NAT для нескольких изолированных сетей с помощью iptables
У меня есть шлюзовая машина, подключенная к нескольким внутренним сетям, на которых я хотел бы настроить NAT. Однако подвох заключается в том, что эти сети должны быть изолированы друг от друга, что я не смог понять. Вот моя конфигурация:
eth0: 192.168.1.0/28 (в восходящем направлении), шлюз назначен 192.168.1.1
eth1: 192.168.1.16/28 (нисходящий поток 1), шлюз назначен 192.168.1.16
eth2: 192.168.1.32/28 (вниз по течению 2), шлюз назначен 192.168.1.32
До сих пор я настроил iptables для разрешения цепочек по умолчанию:
iptables -P INPUT ALLOW
iptables -P OUTPUT ALLOW
iptables -P FORWARD ALLOW
Затем я включил IP-пересылку в ядре и настроил iptables:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
Однако эта конфигурация позволяет одному компьютеру на eth1 получать доступ к другому компьютеру на eth2, хотя я явно не указал правило, разрешающее это. Как изолировать эти сети или разрешить доступ только к определенным хостам / портам?
2 ответа
Вы устанавливаете политику FORWARD
цепь к ALLOW
Таким образом, даже если ничего в цепочке не совпадает, трафик будет разрешен.
Вы, вероятно, должны установить его на DROP
вместо.
Как отмечается в ответе М. Хэмптона, для работы NAT необходимо оставить функцию переадресации.
Для быстрого взлома я бы попытался заблокировать переадресацию между внутренними подсетями, например. добавьте эти команды к себе:
iptables -A FORWARD -i eth1 -o eth2 -j DENY
iptables -A FORWARD -i eth2 -o eth1 -j DENY
Это будет грязно с 3 внутренними подсетями, так как у вас будет 6 правил блокировки, и довольно страшно для 4:).