Iptables ничего не знает об удаленных пользователях.
Пара хороших альтернатив может включать:
Я соглашаюсь с ответом MrShunz. Используйте libnetfilter_queue. Для использования его Вам будет нужна версия 2.6.14 ядра Linux или позже созданный с поддержкой nfnetlink_queue. Существует две части для установки:
iptables
/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, которые я связал с), но основная идея состоит в том, что Ваша программа будет:
Я лично не использовал этот API, но мое чтение документов состоит в том, что ПРИНЯТИЕ пакета на самом деле означает повторно вводить его, как изменено, назад в netfilter, продолжать пересекать iptables
rulesets. Я мог быть неправым по этому вопросу, таким образом, можно хотеть заняться расследованиями далее перед согласием на этот ход разработки.
Кажется, что libipq был удержан от использования libnetfilter_queue. Состояния документации:
издание вердиктов и/или перевведение измененных пакетов к ядру nfnetlink_queue подсистема
походит на то, что Вы ищете...