Настройка 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:).

Другие вопросы по тегам