Рейтинг:2

настроить мой Linux в качестве маршрутизатора, как включить переадресацию портов с помощью nftables?

флаг au
ufk

Я пытаюсь настроить свой Gentoo Linux в качестве маршрутизатора.

это моя конфигурация до сих пор.

WAN NIC это enp3s0 и LAN NIC enp1s0f0

прием подключений к ICMP, tcp-портам 53, 22, 80, 443, 445, 5900 и udp-портам 53,67,68 из локальной сети

прием соединения с SSH-порта 22 из WAN

они прекрасно работают, чего мне не удалось сделать, так это создать переадресацию портов.

Я пытаюсь настроить это, если соединение на порт 222 поступает из глобальной сети, чтобы перенаправить его на машину с IP-адресом 192.168.1.2 в порту 22 и это правило не выдает ошибку, но и не дает подключиться.

это моя конфигурация:

IP-фильтр таблицы {
    цепочка ввода {
        тип фильтра хука входного приоритета фильтр; политика принять;
        ct состояние { установлено, связано } принять
        iif "lo" принять
        iif "enp1s0f0" tcp dport { 22, 53, 80, 443, 445, 5900 } количество пакетов-счетчиков 0 байтов 0 журнал принятия
        iif "enp3s0" tcp dport { 22 } счетчик пакетов 0 байт 0 log accept
        iif "enp1s0f0" udp dport { 53, 67, 68 } принять
        iif "enp1s0f0" IP-протокол ICMP принимает
        счетчик пакетов 1 байт 259 дроп
    }

    выход цепи {
        фильтр приоритета вывода обработчика типа фильтра; политика принять;
        ct состояние {установлено, связано, новое} принять
        iif "lo" принять
    }

    цепочка вперед {
        тип фильтра перехвата приоритета фильтра; политика принять;
        iif "enp3s0" oif "enp1s0f0" ct state {установлено, связано} принять
        iif "enp1s0f0" oif "enp3s0" принять
        iif "enp3s0" oif "enp1s0f0" счетчик пакетов 0 байт 0 отбрасывается
    }

    посттрассировка цепи {
        type filter фильтр приоритета постмаршрутизации; политика принять;
    }
}
IP-адрес таблицы {
    посттрассировка цепи {
        введите nat hook приоритет постмаршрутизации srcnat; политика принять;
        Маскарад oifname "enp3s0"
    }

    предварительная маршрутизация цепи {
        введите приоритет предварительной маршрутизации nat hook 100; политика принять;
        iif "enp3s0" tcp dport { 222 } dnat to 192.168.1.2:22 ### <- ПРАВИЛО ПЕРЕАДРЕСАЦИИ ПОРТОВ ЗДЕСЬ
    }
}

как я могу исправить эту проблему?

Спасибо.

Рейтинг:2
флаг cl
A.B

Как только первый пакет нового потока (т. е. состояние NEW) проходит через предварительная маршрутизация цепь, ДНК происходит, и с новым пунктом назначения пакет маршрутизируется и пересекает фильтровать вперед цепь.

Затем это правило отбрасывает его:

        iif "enp3s0" oif "enp1s0f0" счетчик пакетов 0 байт 0 отбрасывается

Правило, разрешающее этот первый пакет (которого нет в учредил государство) нужно.

Это можно было бы вставить перед правилом отбрасывания на первый взгляд наивно:

iif "enp3s0" oif "enp1s0f0" ip daddr 192.168.1.2 tcp dport 22 принять

и из-за специфической топологии: локальная сеть 192.168.1.0/24 не маршрутизируется, поэтому по умолчанию недоступна из Интернета, этого, вероятно, будет достаточно (технически маршрутизатор следующего перехода может обмануть и достичь 192.168.1.2:22 напрямую без НАТ). Но если система ничего не делала маскарад (и вместо 192.168.1.0/24 была маршрутизируемая локальная сеть), это оставило бы службу доступной напрямую.

На самом деле есть более простой и безопасный метод, который также является более общим на случай, если некоторые другие порты также ДНК-ed и все такое ДНК все правила должны быть разрешены: добавьте правило, разрешающее Любые пакет, подвергшийся ДНК трансформация. Это более подробно в эквиваленте iptables-расширения' контрек матч:

ДНКТ

Виртуальное состояние, совпадающее, если исходный пункт назначения отличается от источник ответа.

Просто вставьте это вместо этого в фильтровать вперед перед последним уронить правило:

кт статус днат принять

или, если быть немного более точным:

iif enp3s0 oif enp1s0f0 ct статус dnat accept

вплоть до очень точного:

iif enp3s0 oif enp1s0f0 ct state новый ct status dnat ip saddr 192.168.1.2 tcp dport 22 accept

Этот статус может появиться только из-за предыдущего ДНК правило, выполненное в потоке, поэтому оно подтверждает намерение: принять.


Примечания:

  • нет необходимости использовать разные таблицы для разных типов крючков (фильтр и нат) пока речь идет об одной семье (IP здесь).

    Это привычка, унаследованная от iptables это может ограничить возможности. Например, сфера действия установлен это стол. Используя тот же набор между фильтр цепь и нат цепочка требует, чтобы они находились в одной таблице (где установлен определено). К сожалению, многие примеры даже из вики по-прежнему используют соглашения об именах, имитирующие iptables.

  • а тут не важно, исторический приоритет для предварительная маршрутизация не 100, а -100 (иначе дстнат).

    Это имело бы значение только в том случае, если бы были другие таблицы, включая предварительная маршрутизация цепи или если iptables нат правила использовались вместе (и в таком случае рекомендуется использовать -101 или -99, а не точно -100), чтобы определить, какие правила имеют приоритет.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.