Как повторно ввести пакет в Iptables?

Iptables ничего не знает об удаленных пользователях.

Пара хороших альтернатив может включать:

  • Потребуйте, чтобы пользователь создал соединение SSH или некоторый тип VPN к Вашей сети.
  • Используйте что-то как стук порта к открытому доступу через брандмауэр только для человека, который в состоянии отправить удар.

2
задан 30 November 2010 в 15:40
3 ответа

Я соглашаюсь с ответом MrShunz. Используйте libnetfilter_queue. Для использования его Вам будет нужна версия 2.6.14 ядра Linux или позже созданный с поддержкой nfnetlink_queue. Существует две части для установки:

  1. Ваш iptables/netfilter управляет для отправки пакетов в пространство пользователя, и
  2. Ваша программа пространства пользователя, которая обработает пакеты, как желаемый и затем возвратит их netfilter.

iptables правило могло бы выглядеть примерно так:

IN_INTERFACE=eth0
SOURCE_NETWORK=192.168.66.0/24
QUEUE_NUM=1
iptables -t raw -A PREROUTING -i $IN_INTERFACE -s $SOURCE_NETWORK -j NFQUEUE --queue-num $QUEUE_NUM

Это представит все пакеты, прибывающие через определенный интерфейс от определенной сети до Вашего процесса пространства пользователя, который слушает на очереди номер 1.

Ваша программа, которая должна будет, вероятно, быть записана в C или C++, будет использовать libnetfilter_queue API. Извините, я не собираюсь писать любой код здесь (существует пример кода в документах API, которые я связал с), но основная идея состоит в том, что Ваша программа будет:

  • считайте каждый пакет, отправленный очереди,
  • сделайте свои желаемые модификации к пакету,
  • и наконец, укажите "вердикт" к netfilter, говоря, принять ли или ОТБРОСИТЬ пакет. По-видимому, Вы будете ПРИНИМАТЬ большую часть времени.

Я лично не использовал этот API, но мое чтение документов состоит в том, что ПРИНЯТИЕ пакета на самом деле означает повторно вводить его, как изменено, назад в netfilter, продолжать пересекать iptables rulesets. Я мог быть неправым по этому вопросу, таким образом, можно хотеть заняться расследованиями далее перед согласием на этот ход разработки.

3
ответ дан 3 December 2019 в 10:21

IIRC, для перевведения (к запуску цепочки, хотя!), использовать NF_REPEAT как вердикт.

1
ответ дан 3 December 2019 в 10:21

Кажется, что libipq был удержан от использования libnetfilter_queue. Состояния документации:

издание вердиктов и/или перевведение измененных пакетов к ядру nfnetlink_queue подсистема

походит на то, что Вы ищете...

0
ответ дан 3 December 2019 в 10:21
  • 1
    Даже после использования 'libnetfilter_queue'/'libipq'.. Я не могу выяснить механизм относительно того, как пакет мог быть передан цепочке PREROUTING. Вы могли помочь мне в этом отношении? –  Amit S 30 November 2010 в 16:36
  • 2
    @Amit Извините, просто нашел его с определенным поиском с помощью Google.Никогда не использовался. –  Mr Shunz 30 November 2010 в 17:47
  • 3
    без проблем. :) –  Amit S 1 December 2010 в 02:05

Теги

Похожие вопросы