Почему iptables не получает помеченный пакет?

Почему iptables не получает помеченный пакет?

Я изучал параметры команды ping. В ней я нашел параметр -m, который позволяет установить метку для пакета.

Приведенная ниже команда отправляет пакет с маркировкой 10 на адрес 192.168.2.65.

ping -m 10 192.168.2.65

Используя приведенную ниже команду, я могу получить этот пакет по назначению.

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

Но указанная выше команда не получает отмеченный пакет. Указанная выше команда iptables ничего не возвращает.

Примечание: у нас обоих есть права root.

решение1

Эта метка является внутренней и не включается нигде в пакет или какой-либо из его заголовков.

Это означает, что он теряется при выполнении фактического исходящего соединения и не будет виден в INPUTтаблице целевого сервера, но вы увидите его в OUTPUTтаблице инициирующей машины.

Цель поддержки отметки в ping — разрешить исходящие правила маршрутизации.

решение2

Ответ @Julie Pelletier на 100% правильный, но, вероятно, не совсем понятный вам.

Во-первых, как уже несколько раз упоминалось в комментариях, знак — этонетвложенный в пакет Ethernet на проводе. Так что если вы пингуете сервер B с сервера A, сервер B никогда не сможет обнаружить метку. Если вы хотите что-то сделать, вам придется использовать только сервер A. Так что вам придется вставить/добавить правило в цепочку OUTPUTотправительчтобы увидеть что-либо.

Теперь давайте посмотрим, как использовать iptables. Сначала мы хотим увидеть, какие правила активны в OUTPUT:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
root@roran:~#

Ладно, никаких правил. Давайте определим правило:

root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#

Как видите, вывода нет. Но в таблице ядра теперь есть запись:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Столбцы "pkts" и "bytes" оба равны 0, так как пакеты еще не отправлены. Теперь, пингуйте другой сервер,безустанавливая отметку:

root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]

После этого таблица ядра по-прежнему не нашла ничего подходящего:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Далее попробуйте выполнить пинг с установленной меткой:

root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]

и еще раз посмотрите на таблицу:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    1    84 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Теперь правило обнаружило один пакет, содержащий 84 байта.

Если вы хотите поэкспериментировать, после этого сделайте так, iptables -F OUTPUTчтобы очистить таблицу; iptables -I OUTPUT -m mark --mark 0x0a -j REJECTчтобы предотвратить выход помеченных пакетов из вашей машины, затем отправьте ping на другую машину с пометкой и без нее. Вы увидите, что помеченные пакеты теперь не получают ответа, так как правило их отбрасывает.

Связанный контент