LINUX.ORG.RU
ФорумAdmin

IPtables переброс определенных пакетов


0

0

Доброго времени суток.

Уже 2-й день ломаю голову как это сделать:

1. Имеется сервер, 1 интерфейс, на нем весит apache.

2. Имеется еще один сервис, весит на 1234 порте.

требуется все пакеты, содержащие «vasya» перебросить с 80-го порта на 1234, а остальные чтобы как и надо ушли на апач.

Делаю так

iptables -t mangle -A PREROUTING -p tcp --dport 80 -m string --string «vasya» --algo bm -j MARK --set-mark 123

iptables -t nat -A PREROUTING -p tcp --dport 80 -m mark --mark 123 -j REDIRECT --to-ports 5280

Но вот какая незадача... редирект не работает.

Вот еще прикол в том, что: 1. если я с первого правила уберу "-m string --string «vasya» --algo bm" - т.е. проверку и буду маркировать все пакеты 80го порта - правило редиректа будет работать.

2. если я во 2-м правиле уберу правило редиректа(поставлю например DROP), а первое оставлю без изменений - то начинает дропать вообще все пакеты, не смотря на match.

Почему же они не работают как надо? Может есть другой вариант?



Последнее исправление: AlexeyVitebsk (всего исправлений: 1)

1 а у вас в первом SYN пакете уже есть «vasya»?

2 а не нужно в таблице nat использовать таргет DROP

ventilator ★★★
()

В хакере писали за май, подробно описывали замут с виртуальной машиной на винде, на нее ставили линь и пускали инет через нее и описывали весь процесс фильтрации и перенаправления. Статья называлась Виртуальный защитник, несмотря на название и мотив там «на сколько я помню» было как-раз то что тебе нужно! Скачай его с какого-нить трекера, должно помочь.

mrcim
()
Ответ на: комментарий от nnz

Недостаток веб-проксирования - keepalive timeout (в nginx например макс. 75 сек.) что предполагает каждые 75 сек переподсоединение (видно в логах того сервиса). А реализовав это с помощью iptables - мы этого избегаем.

AlexeyVitebsk
() автор топика
Ответ на: комментарий от SlavikSS

что-то я в этот CONNMARK вкурить никак не могу((( Можно попросить вас поподробнее описать?

AlexeyVitebsk
() автор топика
Ответ на: комментарий от SlavikSS

>Возможно нужно использовать ... -m state --state new,related -j CONNMARK ...

Нет, это не поможет. Таблица nat — особая, критерии ее правил применяются к только первому пакету в соединении (ctstate NEW), и все остальные пакеты в соединении (ctstate ESTABLISHED) и первые пакеты в связанных соединениях (ctstate RELATED) _всегда_ проходят по тому же правилу, что и самый первый пакет. Так что CONNMARK здесь будет лишним.

А пробросить средствами таблицы nat часть пакетов из одного соединения куда-то в другое место, имхо, нельзя.
Из решений — вроде iproute2 умел stateless nat. Возможно, при помощи маркировки в mangle и ip rule получится это использовать.

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

nnz ★★★★
()
Ответ на: комментарий от nnz

Спасибо большое за разъяснения, буду значит искать другие варианты, раз с iptables не прокатит

AlexeyVitebsk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.