LINUX.ORG.RU
ФорумAdmin

правило iptables с эксклюдом

 


0

1

Есть ли возможность создать правило iptables, объединяющее эти 2 правила?

iptables -t mangle -A OUTPUT -d 10.10.10.0/24 -j MARK –set-xmark 5

iptables -t mangle -A OUTPUT ! -d 10.10.10.254 -j MARK –set-xmark 5

★★★★★

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

Ответ на: комментарий от Anoxemian

Ну вообще как бы нифига.
! -d 10.10.10.254 исключает только 254. А значит - Всё остальное будет марчиться. Вообще всё - 0.0.0.0-ff.ff.ff.ff.
Ему по сути надо сделать range - .0 - .253

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

Ну то есть, если первое правило срабатывает, то пакет марчится и завершает своё шествие по цепочке OUTPUT, а второе правило проверяться не будет вообще. Если же правило с «! -d 10.10.10.254» сделать первым, то марчится будут абсолютно все пакеты 0.0.0.0-ff.ff.ff.ff, именно это я и сделал и потерял доступ к серверу. Можно создать вложенную в OUTPUT таблицу, но вопрос был как сделать это одним правилом. Получается одним - никак? Несколько критериев -d в одном правиле - нельзя, возможно можно как-то через -m set, и вот тут и есть суть вопроса.

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

Ну то есть, если первое правило срабатывает, то пакет марчится и завершает своё шествие по цепочке OUTPUT, а второе правило проверяться не будет вообще.

точно

Если же правило с «! -d 10.10.10.254» сделать первым, то марчится будут абсолютно все пакеты 0.0.0.0-ff.ff.ff.ff,

не понял? Не все абсолютно, а только все пакета с НЕ ДЕСТИНЭЙШН 10.10.10.254. Если дестинэйшн будет 10.10.10.254 - оно мимо.

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

Я тоже был уверен, что не делает RETURN, но оказалось я был не прав.

Вы и остались не правы. Уважаемый vel вам выше правильно написал правило iptables с эксклюдом (комментарий)
MARK не завершает прохождение правил в цепочке.

anc ★★★★★
()

Вообще, если отбросить стартовый пост, флоу организуется таблицами.

iptables -t mangle -N MY_COOL_MARK
# Локализуем нужный трафик
iptables -t mangle -A OUTPUT -d 10.10.10.0/24 -j MY_COOL_MARK
iptables -t mangle -A OUTPUT -d 10.10.10.0/24 -j MARK –-set-xmark 5
# Исключаем ненужное
iptables -t mangle -A MY_COOL_MARK -d 10.10.10.254 -j ACCEPT
iptables -t mangle -A MY_COOL_MARK -j RETURN

Но противоречащие параграфы в ОП оставляют в недоумении, чего хочет ТС.

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

Без явно заданной маски - нет.

Заглянул я в код net/netfilter/xt_mark.c

static unsigned int
mark_tg(struct sk_buff *skb, const struct xt_action_param *par)
{
        const struct xt_mark_tginfo2 *info = par->targinfo;

        skb->mark = (skb->mark & ~info->mask) ^ info->mark;
        return XT_CONTINUE;
}
Я слегка удивился.

Посмотрел код который в iptables, а там !!!

        case O_SET_XMARK:
                info->mark = cb->val.mark;
                info->mask = cb->val.mask;
                break;
        case O_SET_MARK:
                info->mark = cb->val.mark;
                info->mask = cb->val.mark | cb->val.mask;
                break;

Хацкеры блин...

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

Через ipset можно задать любую марку для любого адреса.

ipset create mark10 hash:ip skbinfo counters comment

ipset add mark10 10.7.0.0/24 skbmark 0x5
ipset -exist add mark10 10.7.0.254 skbmark 0xf comment "user vasya"
ipset del mark10 10.7.0.35

iptables -t mangle -A OUTPUT -j SET --map-set  mark10 dst --map-mark
трассировка для 10.7.0.36 с маркой 5
[8035729.543731] raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.7.0.253 DST=10.7.0.36 LEN=84 TTL=64 ID=5003 DF PROTO=ICMP TYPE=8 CODE=0 ID=17976 SEQ=1 UID=0 GID=0
[8035729.543747] mangle:OUTPUT:rule:1
[8035729.543755] mangle:OUTPUT:policy:2 MARK=0x5
[8035729.543768] filter:OUTPUT:policy:1
[8035729.543779] mangle:POSTROUTING:policy:1
Трассировка для 10.7.0.254 с маркой 0xf
[8035735.014318] raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.7.0.253 DST=10.7.0.254 LEN=84 TTL=64 ID=23128 DF PROTO=ICMP TYPE=8 CODE=0 ID=15332 SEQ=1 UID=0 GID=0
[8035735.014372] mangle:OUTPUT:rule:1
[8035735.014382] mangle:OUTPUT:policy:2 MARK=0xf
[8035735.014397] filter:OUTPUT:policy:1
[8035735.014406] mangle:POSTROUTING:policy:1
Трассировка для 10.7.0.35 (отсутствует в наборе)
[8036290.264361] raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.7.0.253 DST=10.7.0.35 LEN=84 TTL=64 ID=44472 DF PROTO=ICMP TYPE=8 CODE=0 ID=28562 SEQ=1 UID=0 GID=0
[8036290.264377] mangle:OUTPUT:rule:1
[8036290.264389] mangle:OUTPUT:policy:2
[8036290.264398] filter:OUTPUT:policy:1
[8036290.264409] mangle:POSTROUTING:policy:1

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

Это как раз понятно - маска показывает какие биты будут очищен.

Нет, я не про это.

Они всегда делают XOR, но для set-mark они в маске устанавливают биты в единицы которые есть в марке.

vel ★★★★★
()