LINUX.ORG.RU
ФорумAdmin

Маркировка входящих соединений iptables

 ,


1

2

Подскажите как правильно сделать чтобы маркировка входящих соединений (isp*_if) не перекрывалась маркировкой входящих (clients_if).

Ситуация - допустим через инт. isp6_if пробрасываем порт кому-то на инт. clients_if и заходим с мира на этот порт. А этот клиент попадает под --set-mark 1 и перемаркировует входящее соединение через isp6_if, хотя указано --ctstate NEW.

Сейчас такая конструкция. Но почему-то не корректно оно обрабатывается.

$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp1_tbl src -j CONNMARK --set-mark 1
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp2_tbl src -j CONNMARK --set-mark 2
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp3_tbl src -j CONNMARK --set-mark 3
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp4_tbl src -j CONNMARK --set-mark 4
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp5_tbl src -j CONNMARK --set-mark 5
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp6_tbl src -j CONNMARK --set-mark 6
$IPT -w -t mangle -A PREROUTING -i $clients_if -m conntrack --ctstate NEW -m set --match-set $isp7_tbl src -j CONNMARK --set-mark 7

$IPT -w -t mangle -A PREROUTING -i $isp1_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 1
$IPT -w -t mangle -A PREROUTING -i $isp2_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 2
$IPT -w -t mangle -A PREROUTING -i $isp3_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 3
$IPT -w -t mangle -A PREROUTING -i $isp4_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 4
$IPT -w -t mangle -A PREROUTING -i $isp5_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 5
$IPT -w -t mangle -A PREROUTING -i $isp6_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 6
$IPT -w -t mangle -A PREROUTING -i $isp7_if -m conntrack --ctstate NEW -j CONNMARK --set-mark 7

$IPT -w -t mangle -A PREROUTING -j CONNMARK --restore-mark


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

Я думаю что проблема в том что в момент установки соединения правило --ctstate NEW срабатывает как для первого запроса (SYN) так и для первого ответа (SYN+ACK) вот метка и переустонавливается.

Можно попробовать поработать с флагами вместо cstate или просто ставить метку только если метка еще не установлена:

-m mark --mark 0

zaz ★★★★
()
Последнее исправление: zaz (всего исправлений: 1)
Ответ на: комментарий от zaz

Я думаю что проблема в том что в момент установки соединения правило --ctstate NEW срабатывает как для первого запроса (SYN) так и для первого ответа (SYN+ACK) вот метка и переустонавливается.

Это не так, NEW это первый пакет в соединении в независимости от направлении (причем не обязательно SYN, просто первый).

или просто ставить метку только если метка еще не установлена:
-m mark --mark 0

Ага, только -m connmark

anc ★★★★★
()

Действительно странно, вроде все правильно. Посмотрел как у меня реализовано, отличие в -m state --state NEW, честно в чем отличие от conntrack не знаю, вроде для данного случая должно работать одинаково.
Присоединяюсь к написанному выше, проверять что марк не установлен.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Спасибо всем за ответы. Сделал такую конструкцию, работает.

$IPT -w -t mangle -A PREROUTING -m conntrack --ctstate NEW -m connmark --mark 0 -j pre_ipt_isp
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp1_tbl src -j CONNMARK --set-mark 1
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp2_tbl src -j CONNMARK --set-mark 2
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp3_tbl src -j CONNMARK --set-mark 3
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp4_tbl src -j CONNMARK --set-mark 4
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp5_tbl src -j CONNMARK --set-mark 5
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp6_tbl src -j CONNMARK --set-mark 6
$IPT -w -t mangle -A pre_ipt_isp -m set --match-set $isp7_tbl src -j CONNMARK --set-mark 7

$IPT -w -t mangle -A PREROUTING -m conntrack --ctstate NEW -m connmark --mark 0 -j incoming_isp
$IPT -w -t mangle -A incoming_isp -i $isp1_if -j CONNMARK --set-mark 1
$IPT -w -t mangle -A incoming_isp -i $isp2_if -j CONNMARK --set-mark 2
$IPT -w -t mangle -A incoming_isp -i $isp3_if -j CONNMARK --set-mark 3
$IPT -w -t mangle -A incoming_isp -i $isp4_if -j CONNMARK --set-mark 4
$IPT -w -t mangle -A incoming_isp -i $isp5_if -j CONNMARK --set-mark 5
$IPT -w -t mangle -A incoming_isp -i $isp6_if -j CONNMARK --set-mark 6
$IPT -w -t mangle -A incoming_isp -i $isp7_if -j CONNMARK --set-mark 7

$IPT -w -t mangle -A PREROUTING -j CONNMARK --restore-mark
fet4
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.