копирование (мирроринг) пакетов с одного порта на другой (возможностями iptables)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

yanat
Сообщения: 7
ОС: linux

копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

Есть на машине интерфейс, 178.217.16Z.XX, на который приходит поток данных, жестко привязанных к принимаемому порту 1567.
Необходимо поток данных, предназначенный для порта 1567 , также направить на эту же машину 178.217.16Z.XX на порт 1194.
Причем, копировать надо данные приходящие на порт 1567, а не весь трафик, чтобы 2 потока на порты 1567 и 1194 были одинаковы.
С помощью iptables делаю следующее:

Код: Выделить всё

iptables -t nat -A PREROUTING -p udp --dport 1567 -j DNAT --to-destination 127.0.0.1:1194

  но tcpdump  ничего не показывает.

Как решить эту проблему?

  Сам  командный файл


 #!/bin/sh

#==== Сбросить правила и удалить цепочки.
    iptables -t filter -F
    iptables -t filter -X
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X

#=== Удалить старые правила и
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

#=== установить по умолчанию============================
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT

#== Разрешить соединение по 22 порту
#== SSH клиент (22)
    iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp -i eth0 --dport 22 -j ACCEPT
#====================================================
   iptables -A INPUT -i tun+ -p all -j ACCEPT
   iptables -A OUTPUT -o tun+ -p all -j ACCEPT
   iptables -A FORWARD -i tun+ -j ACCEPT

#==== Открыть порты TCP 18010,TCP 1567,UDP 1567 на интерфейсе eth0 для машины 139.17.XX.XX=======Caremon
    iptables -A INPUT -i eth0 -s 139.17.XX.XX -p tcp -m multiport --dports 18010,1567 -j ACCEPT
    iptables -A INPUT -i eth0 -s 139.17.XX.XX -p udp --dport 1567 -j ACCEPT

#==== Открыть порты TCP 18010,TCP 1567,50528,UDP 1567 на интерфейсе eth0 для машины 139.17.YY.YY=Caremon
    iptables -A INPUT -i eth0 -s 139.17.YY.YY -p tcp -m multiport --dports 18010,1567,50528 -j ACCEPT
    iptables -A INPUT -i eth0 -s 139.17.YY.YY -p udp --dport 1567 -j ACCEPT

#==== Открыть порты TCP 18010,16000 на интерфейсе eth0 для машины 128.95.ZZZ.ddd===========Ringserver==
    iptables -A INPUT -i eth0 -s 128.95.ZZZ.ddd -p tcp -m multiport --dports 18010,16000 -j ACCEPT
#==== Открыть порты TCP 18010,16000 на интерфейсе eth0 для машины 69.44.aaa.bbb ===========Ringserver==
    iptables -A INPUT -i eth0 -s 69.44.aaa.bbb -p tcp -m multiport --dports 18010,16000 -j ACCEPT

#==== Открыть порты UDP,TCP 1194 на интерфейсе eth1 для всех машин
    iptables -A INPUT -m udp -p udp --dport 1194 -d 178.217.16Z.XX -j ACCEPT
    iptables -A INPUT -m tcp -p tcp --dport 1194 -d 178.217.16Z.XX -j ACCEPT

    iptables -A INPUT -m tcp -p tcp --dport 1567 -d 178.217.16Z.YY -j ACCEPT
    iptables -A INPUT -m udp -p udp --dport 1567 -d 178.217.16Z.YY -j ACCEPT

    iptables -A INPUT -p tcp --dport 1202 -d 178.217.16Z.YY -j ACCEPT
    iptables -A INPUT -p tcp --dport 1203 -d 178.217.16Z.YY -j ACCEPT
    iptables -A INPUT -p tcp --dport 1204 -d 178.217.16Z.YY -j ACCEPT
    iptables -A INPUT -p tcp --dport 1205 -d 178.217.16Z.YY -j ACCEPT
    iptables -A INPUT -p tcp --dport 1206 -d 178.217.16Z.YY -j ACCEPT

#==== Разрешаем прохождение любого трафика по интерфейсу обратной петли.
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    iptables -A FORWARD -i lo -j ACCEPT

#==== Разрешить входящий ping
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#=====Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим
#=====признак ESTABLISHED. Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
 iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
 iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#====@@@@@@
iptables -t nat -A PREROUTING -p udp --dport 1567 -j DNAT --to-destination 127.0.0.1:1194

#=====Запрещаем остальное на интерфейсе eth0,eth1
    iptables -A INPUT -i eth0 -j DROP
    iptables -A INPUT -i eth1 -j DROP
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение KiWi »

Либо никак, либо каким-нибудь самопальным модулем iptables(самопальном в том смысле, что в ядре его нет).

Хотя насчёт последнего ОЧЕНЬ сомневаюсь -- iptables работает с уже существующими пакетами и новых не создаёт.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение Ленивая Бестолочь »

KiWi писал(а):
01.04.2011 18:12
Либо никак, либо каким-нибудь самопальным модулем iptables(самопальном в том смысле, что в ядре его нет).

Хотя насчёт последнего ОЧЕНЬ сомневаюсь -- iptables работает с уже существующими пакетами и новых не создаёт.

ну уверен, но м/б как-то что-то типа того реализовать?

Код: Выделить всё

iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.253.0
iptables -t nat -A PREROUTING -i eth0 -d 192.168.253.0 -dport 1567 -j DNAT --to-destination 178.217.16Z:1194
iptables -t filter -A FORWARD -d 192.168.253.0 ! -dport 1567 -j DROP

192.168.253.0 - любойнемаршрутищируемый адрес.

я не знаю на практике - проходят ли пакеты из TEE ещё раз нетфильтр?
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение KiWi »

Ленивая Бестолочь писал(а):
01.04.2011 22:20
KiWi писал(а):
01.04.2011 18:12
Либо никак, либо каким-нибудь самопальным модулем iptables(самопальном в том смысле, что в ядре его нет).

Хотя насчёт последнего ОЧЕНЬ сомневаюсь -- iptables работает с уже существующими пакетами и новых не создаёт.

ну уверен, но м/б как-то что-то типа того реализовать?

Код: Выделить всё

iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.253.0
iptables -t nat -A PREROUTING -i eth0 -d 192.168.253.0 -dport 1567 -j DNAT --to-destination 178.217.16Z:1194
iptables -t filter -A FORWARD -d 192.168.253.0 ! -dport 1567 -j DROP

192.168.253.0 - любойнемаршрутищируемый адрес.

я не знаю на практике - проходят ли пакеты из TEE ещё раз нетфильтр?

Оххх...
Через PREROUTING врядли -- тогда бы оно ушло в бесконечное копирование.

Нет, конечно, я понял как это реализовать -- но это костылище.
Учитывая, что 1194 -- это openvpn, то он точно захочет что-нибудь ответить. Если и первое приложение начнёт отвечать, то может получиться странное.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение Alex2ndr »

Главный вопрос - а зачем это надо? Может быть то что вы хотите делается иначе? Мне еще ни разу такое не было нужно...
Спасибо сказали:
yanat
Сообщения: 7
ОС: linux

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

Alex2ndr писал(а):
02.04.2011 00:52
Главный вопрос - а зачем это надо? Может быть то что вы хотите делается иначе? Мне еще ни разу такое не было нужно...


Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение Alex2ndr »

yanat писал(а):
04.04.2011 07:54
Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Дык нужно то это зачем? Ну занят порт программой и что? Для чего нужно копировать то? Насколько я понимаю в пределах одной машины это все трудновоспроизводимо... Фиг знает как оно там в пределах ядра движется. Поэтому как решение в лоб - поставить перед этой еще одну машинку, на которой организовать port mirroring посредством маркировки и нескольких таблиц маршрутизации.
Спасибо сказали:
yanat
Сообщения: 7
ОС: linux

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

Alex2ndr писал(а):
04.04.2011 11:19
yanat писал(а):
04.04.2011 07:54
Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Дык нужно то это зачем? Ну занят порт программой и что? Для чего нужно копировать то? Насколько я понимаю в пределах одной машины это все трудновоспроизводимо... Фиг знает как оно там в пределах ядра движется. Поэтому как решение в лоб - поставить перед этой еще одну машинку, на которой организовать port mirroring посредством маркировки и нескольких таблиц маршрутизации.

Нужно, чтобы эти же данные получала другая программа на этом же компьютере, только на другой порт.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение KiWi »

yanat писал(а):
04.04.2011 13:04
Alex2ndr писал(а):
04.04.2011 11:19
yanat писал(а):
04.04.2011 07:54
Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Дык нужно то это зачем? Ну занят порт программой и что? Для чего нужно копировать то? Насколько я понимаю в пределах одной машины это все трудновоспроизводимо... Фиг знает как оно там в пределах ядра движется. Поэтому как решение в лоб - поставить перед этой еще одну машинку, на которой организовать port mirroring посредством маркировки и нескольких таблиц маршрутизации.

Нужно, чтобы эти же данные получала другая программа на этом же компьютере, только на другой порт.

Очевидно, что программа может захотеть ответить. Точнее, обе программы. Что будет в этом случае?
Спасибо сказали:
yanat
Сообщения: 7
ОС: linux

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

KiWi писал(а):
04.04.2011 21:38
yanat писал(а):
04.04.2011 13:04
Alex2ndr писал(а):
04.04.2011 11:19
yanat писал(а):
04.04.2011 07:54
Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Дык нужно то это зачем? Ну занят порт программой и что? Для чего нужно копировать то? Насколько я понимаю в пределах одной машины это все трудновоспроизводимо... Фиг знает как оно там в пределах ядра движется. Поэтому как решение в лоб - поставить перед этой еще одну машинку, на которой организовать port mirroring посредством маркировки и нескольких таблиц маршрутизации.

Нужно, чтобы эти же данные получала другая программа на этом же компьютере, только на другой порт.

Очевидно, что программа может захотеть ответить. Точнее, обе программы. Что будет в этом случае?


Эти программы работают только на прием
Спасибо сказали:
alex_suse
Сообщения: 204
ОС: Debian, openSUSE, Gentoo

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение alex_suse »

yanat писал(а):
05.04.2011 07:17
KiWi писал(а):
04.04.2011 21:38
yanat писал(а):
04.04.2011 13:04
Alex2ndr писал(а):
04.04.2011 11:19
yanat писал(а):
04.04.2011 07:54
Дело в том, что порт 1567 уже намертво забинден программой Seiscomp. Это не изменить.
Поэтому этот порт использовать уже нельзя. Даже программа samplicate здесь не поможет.
Поэтому никак не могу решить проблему копирования потока данных с порта 1567 на другой порт(1194). Именно копирования, а не перенаправления.
Порт 1194 не используется openvpn, для него используется другой порт.
Может другие будут идеи и предложения? Рассмотрим все, очень нужно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Дык нужно то это зачем? Ну занят порт программой и что? Для чего нужно копировать то? Насколько я понимаю в пределах одной машины это все трудновоспроизводимо... Фиг знает как оно там в пределах ядра движется. Поэтому как решение в лоб - поставить перед этой еще одну машинку, на которой организовать port mirroring посредством маркировки и нескольких таблиц маршрутизации.

Нужно, чтобы эти же данные получала другая программа на этом же компьютере, только на другой порт.

Очевидно, что программа может захотеть ответить. Точнее, обе программы. Что будет в этом случае?


Эти программы работают только на прием

Нет таких программ. Как устанавливается соединение знаете?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение Alex2ndr »

alex_suse писал(а):
05.04.2011 12:23
Нет таких программ. Как устанавливается соединение знаете?

Не торопитесь с выводами. Если это udp то есть такие программы.
Спасибо сказали:
alex_suse
Сообщения: 204
ОС: Debian, openSUSE, Gentoo

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение alex_suse »

Alex2ndr писал(а):
05.04.2011 13:55
alex_suse писал(а):
05.04.2011 12:23
Нет таких программ. Как устанавливается соединение знаете?

Не торопитесь с выводами. Если это udp то есть такие программы.

Понятно, что UDP не требует установки соединения и даже не гарантирует доставку, т.о. преположить, что некая программа только получает данные конечно можно, но что-то в этом есть неправильное.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение Alex2ndr »

alex_suse писал(а):
05.04.2011 14:38
Понятно, что UDP не требует установки соединения и даже не гарантирует доставку, т.о. преположить, что некая программа только получает данные конечно можно, но что-то в этом есть неправильное.

Все от задачи зависит. Пример такой программы которая только получает данные - netflow коллектор.

2 yanat
В пределах одной машины задача более чем нетривиальная. Мне кажется тут все упирается в реализацию сетевого стека Linux... Но я не очень большой знаток ядра, поэтому могу и ошибаться. А поставить еще одну машину перед этой и на ней все делать не получится?.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение KiWi »

Alex2ndr писал(а):
06.04.2011 10:17
В пределах одной машины задача более чем нетривиальная. Мне кажется тут все упирается в реализацию сетевого стека Linux... Но я не очень большой знаток ядра, поэтому могу и ошибаться. А поставить еще одну машину перед этой и на ней все делать не получится?.

В пределах одной машины можно попробовать подставить костыль в виде nc + pee.
Спасибо сказали:
yanat
Сообщения: 7
ОС: linux

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

KiWi писал(а):
07.04.2011 02:24
Alex2ndr писал(а):
06.04.2011 10:17
В пределах одной машины задача более чем нетривиальная. Мне кажется тут все упирается в реализацию сетевого стека Linux... Но я не очень большой знаток ядра, поэтому могу и ошибаться. А поставить еще одну машину перед этой и на ней все делать не получится?.

В пределах одной машины можно попробовать подставить костыль в виде nc + pee.


Напишите поподробнее, что за nc-pee
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение KiWi »

yanat писал(а):
08.04.2011 07:25
KiWi писал(а):
07.04.2011 02:24
Alex2ndr писал(а):
06.04.2011 10:17
В пределах одной машины задача более чем нетривиальная. Мне кажется тут все упирается в реализацию сетевого стека Linux... Но я не очень большой знаток ядра, поэтому могу и ошибаться. А поставить еще одну машину перед этой и на ней все делать не получится?.

В пределах одной машины можно попробовать подставить костыль в виде nc + pee.


Напишите поподробнее, что за nc-pee

nc из пакета netcat-openbsd: http://packages.ubuntu.com/maverick/amd64/...penbsd/filelist
pee из пакета moreutils: http://packages.ubuntu.com/maverick/amd64/moreutils/filelist
Спасибо сказали:
yanat
Сообщения: 7
ОС: linux

Re: копирование (мирроринг) пакетов с одного порта на другой

Сообщение yanat »

А можно ли туту использовать утилиту tcpreplay - Replay network traffic stored in pcap files

http://linux.die.net/man/1/tcpreplay
Спасибо сказали: