Переадресация портов Iptables с ограничениями на некоторые

Переадресация портов Iptables с ограничениями на некоторые

У меня есть набор служб, для которых я хотел бы установить ACL на основе IP (белый список) для одной, но не для другой. Проблемы, похоже, проявляются, поскольку службы работают на одном и том же порту внутри (порт 80), но я использую разные порты на шлюзе для доступа к ним.

Порт 8088 на шлюзе -> Порт 80 на 10.0.0.A (с белым списком IP-адресов)
Порт 80 на шлюзе -> Порт 80 на 10.0.0.B

И я могу заставить это работать со всеми открытыми файлами, используя следующие правила:

iptables -t nat -A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
iptables -t nat -A ПРЕДВАРИТЕЛЬНАЯ ПРОСЫЛКА -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.B
iptables -A ПЕРЕСЫЛКА -p tcp -i eth0 --dport 80 -j ПРИНЯТЬ

Проблема в том, что правило FORWARD ACCEPT охватывает оба этих правила NAT, поскольку они, по-видимому, основаны на порте назначения (--dport 80), а не на входящем порте на шлюзе (80 против 8088).

Я не могу понять, как переписать правило FORWARD в два отдельных правила, чтобы можно было задать разное поведение для подключений, входящих в шлюз на 80 и 8088.

Дополнительная информация:

lsb_release -d
Описание: Debian GNU/Linux 7.5 (wheezy)
iptables --версия
iptablesv1.4.14

1-я попытка решения Мне удалось выделить цепочку и выполнить маршрутизацию там, но я не могу добавить строку ACL (отклонить) из-за следующего сообщения об ошибке:

x_tables: ip_tables: REJECT цель: действительна только в таблице фильтров, не nat

Вот что я вставил:

iptables -t nat -N Белый список
iptables -t nat -A Белый список -p tcp -j DNAT --to 10.0.0.A:80
iptables -t nat -A Белый список -s <whatsmyip.org> -j ВОЗВРАТ
iptables -t nat -A Белый список -j ОТКЛОНИТЬ
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j Белый список

Все работает отлично до строки 4, где REJECT внутри nat терпит неудачу. Если я закомментирую строку REJECT, я могу подтвердить, что оставшаяся часть логики работает, и порт становится открытым для дикой природы, потому что ничего не отклоняется.

Следующая попытка решения Похоже, что спотыкаюсь об исходную проблему, работая с правильно настроенной отдельной цепочкой. Правило PREROUTING, меняющее порт сразу сверху, все еще, похоже, вызывает проблему с попыткой не-NAT ACL. Правила ACL не действуют, и порт открыт для дикой природы.

iptables -N Белый список
iptables -A Белый список -s <whatsmyip.org> -j ВОЗВРАТ
iptables -A Белый список -j ОТКЛОНИТЬ
iptables -A ВХОД -i eth0 -p tcp --dport 8088 -j Белый список
iptables -t nat -A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

Попытка решения №3 Я попробовал сначала настроить белый список, а затем попытаться перенаправить порт после разрешения белого списка. Хотя правила загружаются, это не дает ожидаемого эффекта, так как трафик не достигает своего предполагаемого назначения с IP-адреса из белого списка. Хотя я на самом деле не уверен на 100%, каково на самом деле поведение. Я не могу сказать, отклоняется ли трафик в iptables, или, может быть, соединение принимается и проталкивается к месту назначения на порту 8088 без изменения порта? Я не уверен, как проверить, действительно ли выполняется перенаправление порта. Вот правила для этой попытки:

iptables -N Белый список
iptables -A Белый список -s <whatsmyip.org> -j ВОЗВРАТ
iptables -A Белый список -j ОТКЛОНИТЬ
iptables -A ВХОД -i eth0 -p tcp --dport 8088 -j Белый список
iptables -t nat -A ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A
iptables -t nat -A ВЫХОД -p tcp --dport 8088 -j ПЕРЕНАПРАВЛЕНИЕ --to-ports 80

Текущее состояние Не решено. Не уверен, стоит ли мне поискать другой способ перенаправления порта после белого списка или есть простой способ определить, где текущее решение дает сбой (пересылка через 8088 без перенаправления 80 или просто блокировка?)

решение1

Изменять

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

для перехода к цепочке, определенной пользователем, которая реализует ваши списки контроля доступа. Например,

iptables -t nat -N foo
iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN
iptables -t nat -A foo -j REJECT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo

Редактировать:

iptables -N foo
iptables -A foo --source 192.168.0.0/24 -j RETURN
iptables -A foo -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo

Вы проектируете фильтрацию пакетов, полностью игнорируя любую используемую вами NAT.

Связанный контент