- Создайте NFT
- Отсутствие специального законодательного регулирования
- Правовая природа NFT
- Виды NFT и нормы, применимые к их регулированию
- NFT, содержащие дополнительные утилитарные свойства
- Соотношение NFT и цифровой валюты (криптовалюты)
- Ограничения Закона «О ЦФА» на приобретение NFT за цифровую валюту
- Thanks
- DESCRIPTION
- Removing all the rules in a chain
- Фан-арт
- Установка
- SEE ALSO
- STATEFUL OBJECTS
- CT HELPER
- CT TIMEOUT
- CT EXPECTATION
- COUNTER
- INCLUDE FILES
- SYMBOLIC VARIABLES
- NAT
- Создайте аккаунт в OpenSea
- STATEMENTS
- VERDICT STATEMENT
- PAYLOAD STATEMENT
- EXTENSION HEADER STATEMENT
- LOG STATEMENT
- REJECT STATEMENT
- COUNTER STATEMENT
- CONNTRACK STATEMENT
- META STATEMENT
- LIMIT STATEMENT
- NAT STATEMENTS
- TPROXY STATEMENT
- SYNPROXY STATEMENT
- FLOW STATEMENT
- QUEUE STATEMENT
- DUP STATEMENT
- FWD STATEMENT
- SET STATEMENT
- MAP STATEMENT
- VMAP STATEMENT
- Testing your rule
- Simple IP/IPv6 Firewall
- DESCRIBE COMMAND
Создайте NFT
Разобрались с предыдущими этапами? Теперь нажимайте «Создать» ( в верхнем правом углу и загружайте свой шедевр.
Загрузите свой шедевр и придумайте ему название
Здесь вам придется придумать ему название и заполнить графу с описанием работы. Можно также добавить внешнюю ссылку для дальнейшей рекламы своих работ.
Отсутствие специального законодательного регулирования
Поскольку российское законодательство не содержит специальных норм об NFT, первостепенной задачей является определение тех правовых норм, которые можно применить к данному виду токенов по аналогии закона. Для этого требуется провести анализ правовой природы NFT и выработать их классификацию. От того, какие права содержатся в NFT, различаются и нормы, применимые к их регулированию.
Правовая природа NFT
Уникальность NFT объясняется через понятия взаимозаменяемости и невзаимозаменяемости.
Понятия взаимозаменяемости и невзаимозаменяемости характерны для общего права (Англия, США)23, где под взаимозаменяемостью понимается способность актива свободно заменяться другим активом того же типа без изменения его качества. Сырьевые товары, акции, опционы и валюты — это примеры взаимозаменяемых активов: один рубль свободно заменяется другим рублем, баррель нефти — другим баррелем того же сорта и т. д. Взаимозаменяемые активы упрощают обмен и торговые процессы, поскольку взаимозаменяемость подразумевает равную стоимость между активами. Невзаимозаменяемыми являются товары или активы, выделенные среди других по присущим только им признакам24.
В российском праве понятия взаимозаменяемости и невзаимозаменяемости связывают с вещью. Выделяют индивидуально-определенные вещи и вещи, определяемые родовыми признаками (Sukhanov, 2016). В ГК РФ такая классификация прямо не проводится, но понятия индивидуально-определенных и родовых вещей используются: например, в ст. 398 ГК РФ (последствия неисполнения обязательства передать индивидуально-определенную вещь) и в ст. 807 ГК РФ (предметом договора займа могут быть деньги или вещи, определенные родовыми признаками).
Классификация на индивидуально-определенные вещи и вещи, определяемые родовыми признаками, присутствует в Модельном ГК для стран-участниц СНГ25. В соответствии с п. 1 ст. 33 индивидуально-определенной признается незаменимая вещь, выделенная из других вещей по присущим только ей признакам (цветом, номером и т.д.). Индивидуализация позволяет выделить определенную вещь из ряда других таких же вещей (например, картина, дом и т.п.).
Родовые признаки присущи всем вещам того же рода и определяющиеся числом, весом, мерой. Вещи, определяемые родовыми признаками, являются заменимыми (п. 2 ст. 33 Модельного ГК). Вступая в правоотношения по поводу таких вещей, стороны имеют в виду род вещей (мешок картофеля, тонна мазута, тысяча рублей), а не определенную вещь.
Исходя из расшифровки аббревиатуры NFT, можно сделать вывод, что речь идет об индивидуально-определенном токене, т. е. невзаимозаменяемом. Индивидуальная определенность NFT следует из его существа, поскольку NFT содержит в себе уникальный невоспроизводимый код, отличающий его от других NFT и гарантирующий существование лишь одного экземпляра каждого конкретного NFT. Это означает, что обладатель токена имеет право на уникальный цифровой объект, привязанный к определенному NFT.
Следовательно, NFT вовсе не является цифровым произведением, как может показаться на первый взгляд. NFT — это строчки кода, записанные на блокчейне. В то же время NFT представляет собой многофункциональный инструмент:
Виды NFT и нормы, применимые к их регулированию
По общему правилу NFT не наделяют своего обладателя особыми правами, кроме обычных прав владения, пользования и распоряжения токеном.
Признаки NFT по своей природе схожи с признаками индивидуально-определенных вещей: конкретный NFT не может быть заменен на другой без кардинального изменения своего качества; в отличие от других цифровых объектов, NFT неделимы и не воспроизводимы; при отчуждении прежний владелец безвозвратно утрачивает NFT после его передачи. Перечисленные качества обычно связывают с вещами (Sukhanov, 2016).
Текст ГК РФ не содержит определения «вещи», однако понимает под вещью предмет материальной действительности, т. е. нечто овеществленное (предмет, наличные деньги, документарные ценные бумаги). Очевидно, что NFT в буквальном смысле к вещам не относится. Однако исходя из признаков NFT, аналогичных признакам индивидуально-определенных вещей, требуется найти место NFT среди объектов гражданских прав.
Ст. 128 ГК РФ в числе объектов гражданских прав выделяет «иное имущество», перечень которого является открытым. Более того, ст. 128 ГК РФ относит к иному имуществу и цифровые права (ст. 141.1 ГК РФ). Можно предположить, что цифровые активы, не отнесенные законодателем прямо к цифровым правам, могут регулироваться положениями ст. 128 ГК РФ об «ином имуществе».
Таким образом, с учетом системного, телеологического толкования положений гражданского законодательства об имуществе, к тем токенам NFT, которые не наделяют своего обладателя особыми правами (кроме обычных прав владения, пользования и распоряжения токеном), применяются положения ст. 128 ГК РФ об «ином имуществе».
К этой категории NFT представляется возможным частично применить и правила о движимых индивидуально-определенных вещах по аналогии закона (ст. 6 ГК РФ).
NFT, содержащие дополнительные утилитарные свойства
В ограниченных случаях NFT наделяют своих обладателей дополнительными правами (например, токены билетов на футбольный, баскетбольный матчи27 или токены, предоставляющие право на получение физической копии виртуально созданных кроссовок28).
Так как утилитарные токены29 используются для закрепления различных прав, это позволяет сделать вывод о том, что NFT, наделяющие своих обладателей определенными правами, могут выступать в качестве индивидуально-определенных цифровых прав.
В то же время в России не существует правового регулирования индивидуально-определенных цифровых прав: ст. 141.1 ГК РФ и специальные законы (Закон «О ЦФА», ФЗ № 259-ФЗ) не дают понятия индивидуально-определенному цифровому праву, а также не определяют его правовой режим. Имеющееся на данный момент правовое регулирование цифровых прав свидетельствует о том, что цифровые права являются родовыми, поскольку их обладателю важно иметь не какой-то конкретный актив, а лишь определенное количество взаимозаменяемого актива внутри информационной системы. Например, лицу важно иметь определенное количество токенов криптовалюты Bitcoin, а не конкретный токен, обозначающий наличие данной валюты в криптокошельке.
В случае с NFT их обладателю важно иметь уникальный незаменимый код, который закрепляет (а) право владельца на конкретный актив в виртуальном пространстве, (b) иные права, если NFT совмещает в себе дополнительные утилитарные свойства. В случае изменения кода теряется связь с основным активом и со всеми связанными правами, и смысл существования NFT пропадает.
Представляется, что к NFT, совмещающим также утилитарную функцию, возможно применение норм о цифровых правах (ст. 141.1 ГК РФ) лишь по аналогии закона.
Понятие «цифровые права» (ст. 141.1 ГК РФ) по сути обозначает зафиксированные в электронной (цифровой) форме имущественные права, которые отвечают двум признакам:
1) они должны быть «прямо названы в качестве цифровых в законе»,
2) они должны приобретаться, осуществляться и отчуждаться на информационной платформе, «отвечающей установленным законом признакам».
Следуя логике ст. 141.1 ГК РФ, отсылающей к ст. 8 ФЗ № 259-ФЗ (где дается понятие утилитарных цифровых прав и их перечень), выходит, что к NFT, совмещающим в себе утилитарную функцию, по аналогии закона применяются правила об утилитарных цифровых правах за тем исключением, что утилитарные цифровые права обращаются на инвестиционной платформе. Оборот NFT, происходящий исключительно на блокчейне, не требует и, более того, не предполагает обращения на инвестиционной платформе.
Применение правил об утилитарных цифровых правах из ст. 8 ФЗ № 259-ФЗ возможно лишь в отношении NFT, которые совмещают в себе утилитарную функцию, наделяя своих обладателей дополнительными правами. Возможно, именно такие NFT приводятся в пример в докладе Банка России для общественных консультаций «Криптовалюты: тренды, риски, меры»30.
В отношении NFT, не обладающих утилитарными свойствами, применение правил об утилитарных цифровых правах является ошибочным по следующим соображениям.
Во-первых, законодатель понимает под утилитарными цифровыми правами права требования передачи вещей, передачи исключительных прав на результаты интеллектуальной деятельности, выполнения работ и (или) оказания услуг. Эти права являются правами требования активных действий.
NFT без утилитарных свойств не предоставляют прав требования активных действий, а напротив — являются способом фиксации права обладателя на виртуальный актив («право наслаждения»). Это свидетельствует о наличии пассивных обязанностей всех остальных воздерживаться от нарушения права, подтверждаемого NFT.
Во-вторых, к NFT без утилитарных свойств логичным представляется частично применять правила о движимых вещах по аналогии закона, о чем было сказано ранее.
Таким образом, NFT без утилитарных свойств принципиально отличаются от утилитарных цифровых прав, и применение правил об УЦП к таким NFT является неверным. Тем не менее, эту разницу понимают далеко не все. Достаточно ознакомиться с докладом для общественных консультаций «Криптовалюты: тренды, риски, меры», подготовленным Банком России в 2022 г.31. Финансовый регулятор ошибочно утверждает, что все NFT (без дифференциации на наличие либо отсутствие утилитарной функции) относятся к разновидности токенизированных активов, подтверждающих право на получение определенного товара или услуги, т. е. фактически отождествляет любые NFT с утилитарными цифровыми правами.
В то же время всегда важно проводить тест на определяющие свойства токена. Если определяющим в NFT является невзаимозаменяемость, а утилитарность — дополнительной функцией, то правила об утилитарных цифровых правах могут применяться лишь по аналогии. Однако NFT не должны использоваться для маскировки УЦП. Если определяющей функцией токена является утилитарная, то к такому токену положения об утилитарных цифровых правах применяются в полной мере.
Проиллюстрируем на конкретном примере, как совмещение в NFT утилитарных свойств влияет на правовые нормы, подлежащие применению к регулированию отношений сторон, возникающих в связи с приобретением NFT.
В таких случаях обладание произведением искусства и его использование регулируется разными токенами, следовательно — разными правовыми режимами: NFT подтверждает «право собственности» на цифровой объект, и в этой части на NFT распространяется режим «иного имущества», в то же время содержащийся в NFT утилитарный токен дает право поменять название, фон, цвет, добавить графические элементы и др. Правовой режим отношений, возникающих из утилитарного токена, зависит от правового регулирования дополнительных прав, предоставленных приобретателю NFT. В случае, когда приобретатель NFT получает право изменять цифровой объект, иными словами, принимать участие в совместном творчестве с создателем токена, отношения сторон, возникающие из утилитарного токена, представляют собой договор лицензирования с правом владельца NFT на частичную переработку произведения в заранее установленных автором переделах.
Соотношение NFT и цифровой валюты (криптовалюты)
Ранее была дана краткая характеристика криптовалюты и сделан вывод, что она является платежным токеном (payment token). Несмотря на то, что в настоящий момент большинству очевидно ошибочное отождествление криптовалюты и NFT32, в некоторых источниках все же встречаются неоднозначные формулировки33, еще более запутывающие неподготовленных читателей.
NFT не является криптовалютой по следующим основаниям.
Во-первых, основная функция NFT — правоподтверждающая, а у цифровой валюты (криптовалюты) — платежная.
Во-вторых, токен NFT является индивидуально-определенным, его правовой режим близок к индивидуально-определенным вещам, в то время как токен цифровой валюты является родовым, т. е. взаимозаменяемым, и больше соответствует признакам платежного средства.
В-третьих, токены цифровой валюты не имеют уникальной ценности сами по себе. Для обладателя не имеет значения, какой именно токен цифровой валюты находится в его цифровом кошельке, важно лишь их количество. В случае с NFT характер и уникальные признаки токена имеют решающее значение.
В-четвертых, NFT никак не может использоваться в качестве средства платежа, поскольку нельзя осуществить оплату индивидуально-определенным токеном в связи с невозможностью установить усредненную цену (ценность) содержащегося в NFT объекта. Основная функция NFT — подтверждение аутентичности цифрового объекта: документа, изображения, аудио-, видео- или иного электронного файла.
Одним из основных последствий разграничения NFT и цифровой валюты является то, что NFT не требуют декларирования в налоговых органах и полностью подлежат судебной защите, в то время как судебная защита цифровой валюты возможна лишь в случае ее предварительного декларирования в налоговых органах (ч. 6 ст. 14 Закона «О ЦФА») (Yankovskiy, 2020).
Ограничения Закона «О ЦФА» на приобретение NFT за цифровую валюту
Поскольку покупка и продажа NFT происходит на блокчейне, необходимо рассмотреть способы приобретения NFT и проанализировать их на соответствие требованиям российского законодательства.
1) Приобретение NFT за цифровую валюту государства (ЦВЦБ).
Цифровая валюта государства– форма национальной валюты, которая эмитируется в цифровом виде (например, предложенный Банком России цифровой рубль34).
Подобный вариант оплаты за NFT не будет противоречить требованиям российского законодательства, поскольку такая цифровая валюта выпускается самим государством. Однако в настоящий момент цифровой рубль как цифровая форма национальной валюты не введен в оборот, возможность приобретения NFT за ЦВЦБ невозможна.
2) Приобретение NFT в обмен на NFT или на иной неплатежный токен.
Подобный вариант приобретения NFT представляет собой меновую сделку. Ее целью является обмен одного неплатежного токена (NFT) на другой неплатежный токен. На меновые сделки не распространяются ограничения, содержащиеся в ч. 5 ст. 14 Закона «О ЦФА» относительно оборота криптовалюты.
Также следует отметить, что поскольку NFT не являются платежным средством и их правовой режим близок к режиму индивидуально-определенных движимых вещей, то сделки, в которых в качестве встречного предоставления за товар передается NFT (например, книга в обмен на NFT), по своей юридической природе относятся к меновым сделкам, а не к сделкам купли-продажи.
3) Приобретение NFT за негосударственную цифровую валюту (bitcoin, monero, dash и др.).
В данном случае оплата NFT цифровой валютой является встречным предоставлением. Следовательно, приобретая NFT, его покупатель расплачивается с продавцом криптовалютой, что запрещено для российских юридических лиц и резидентов в соответствии с ч. 5 ст. 14 Закона «О ЦФА».
Подобное правовое регулирование, ограничивающее платежи в криптовалюте за передаваемый товар либо оказываемую услугу без какой-либо дифференциации товаров или услуг, нельзя признать удачным.
Во-первых, NFT не является товаром или услугой классического рынка, на которые направлены ограничения, предусмотренные Законом «О ЦФА». NFT — это способ фиксации какого-либо объекта виртуального рынка, схожего по своим экономическим свойствам с объектами из игр. Следовательно, приобретение NFT за криптовалюту не несет риски внедрения криптовалют в экономический оборот, которые хотел снизить законодатель.
Во-вторых, ограничение на оплату криптовалютой за передаваемые товары или оказываемые услуги в соответствии с ч. 5 ст. 14 Закона «О ЦФА» предусматривалось для целей недопущения обхода российского налогового законодательства. Если бы, к примеру, продукты в розничном магазине могли бы быть оплачены с помощью криптовалюты (например, приобретение молока за Bitcoin), действительно создавались бы обоснованные риски обхода налогового законодательства, обязывающего декларировать полученные доходы и уплачивать с них налоги.
NFT чаще всего размещаются на площадках профессиональными участниками рынка, которые посредством процедуры KYC35 проверяют контрагентов по сделке, фиксируют и декларируют все полученные доходы при продаже NFT, сдают необходимые отчеты, уплачивают установленные налоги36. Следовательно, при продаже NFT за криптовалюту риски обхода налогового законодательства минимальны, в связи с чем ограничение ч. 5 ст. 14 Закона «О ЦФА» утрачивает свою актуальность для данных случаев.
Таким образом, для приобретения NFT за негосударственную цифровую валюту должно быть создано специальное правовое регулирование. Такие случаи должны быть выведены из-под общего ограничения ч. 5 ст. 14 Закона «О ЦФА».
Thanks
To the NLnet foundation for initial sponsorship of this HOWTO:
DESCRIPTION
nft is the command line tool used to set up, maintain and inspect packet filtering and classification rules in the Linux kernel, in the nftables framework. The Linux kernel subsystem is known as nf_tables, and ‘nf’ stands for Netfilter.
Removing all the rules in a chain
% nft flush chain filter output
Фан-арт
Каждый проект NFT имеет собственный процесс выбора белого списка. Некоторые делают это с помощью художественных конкурсов, где создатели лучших фан-артов попадают в белый список. Иногда, даже если нет конкретного конкурса, проекты дают места в белом списке, чтобы оценить невероятный фан-арт. Так что, если вы креативны, создайте что-то уникальное, чтобы вас заметили!
Установка
Установите пакет или git-версию AUR.
SEE ALSO
libnftables(3), libnftables-json(5), iptables(8), ip6tables(8), arptables(8), ebtables(8), ip(8), tc(8)
STATEFUL OBJECTS
Stateful objects are attached to tables and are identified by an unique name. They group stateful information from rules, to reference them in rules the keywords «type name» are used e.g. «counter name».
CT HELPER
Ct helper is used to define connection tracking helpers that can then be used in combination with the ct helper set statement. type and protocol are mandatory, l3proto is derived from the table family by default, i.e. in the inet table the kernel will try to load both the ipv4 and ipv6 helper backends, if they are supported by the kernel.
Table 11. conntrack helper specifications
defining and assigning ftp helper.
CT TIMEOUT
Ct timeout is used to update connection tracking timeout values.Timeout policies are assigned with the ct timeout set statement. protocol and policy are mandatory, l3proto is derived from the table family by default.
Table 12. conntrack timeout specifications
defining and assigning ct timeout policy.
testing the updated timeout policy.
CT EXPECTATION
Ct expectation is used to create connection expectations. Expectations are assigned with the ct expectation set statement. protocol, dport, timeout and size are mandatory, l3proto is derived from the table family by default.
Table 13. conntrack expectation specifications
defining and assigning ct expectation policy.
COUNTER
Input is parsed line-wise. When the last character of a line, just before the newline character, is a non-quoted backslash (), the next line is treated as a continuation. Multiple commands on the same line can be separated using a semicolon (;).
INCLUDE FILES
Other files can be included by using the include statement. The directories to be searched for include files can be specified using the -I/—includepath option. You can override this behaviour either by prepending ‘./’ to your path to force inclusion of files located in the current working directory (i.e. relative path) or / for file location expressed as an absolute path.
If -I/—includepath is not specified, then nft relies on the default directory that is specified at compile time. You can retrieve this default directory via -h/—help option.
SYMBOLIC VARIABLES
define variable = expr
$variable
Using symbolic variables.
NAT
Создадим новую таблицу ip nat:
Добавим цепочку POSTROUTING и PREROUTING:

Перебросим нестандартный порт 2228 на 22:
nft add rule nat PREROUTING tcp dport 2228 redirect to 22
А подключение по 22 порту будем дропать:
nft add rule nat PREROUTING tcp dport 22 counter drop

Давайте для удобства редактирования напишем скрипт который можно будет постоянно удобно поправлять.
Создадим скрипт .fw_nftables.sh:
Не забудьте точку, чтобы скрипт был скрыт!
Дадим права на выполнения:
Откроем его и добавим туда все что мы написали:

Вывод: мы сделали с вами базовую настройку nftables для сервера с ip телефонией.
Rules are added to chains in the given table. If the family is not specified, the ip family is used. Rules are constructed from two kinds of components according to a set of grammatical rules: expressions and statements.
A comment is a single word or a double-quoted («) multi-word string which can be used to make notes regarding the actual rule. Note: If you use bash for adding rules, you have to escape the quotation marks, e.g. «enable ssh for servers».
add a rule to ip table input chain.
nft add rule filter output ip daddr 192.168.0.0/24 accept # ‘ip filter’ is assumed
# same command, slightly more verbose
nft add rule ip filter output ip daddr 192.168.0.0/24 accept
delete rule from inet table.
Создайте аккаунт в OpenSea
Создать аккаунт в OpenSea еще проще. Нужно всего лишь привязать аккаунт в OpenSea к аккаунту в MetaMask.
Привязываем аккаунт в OpenSea к аккаунту в MetaMask
STATEMENTS
Statements represent actions to be performed. They can alter control flow (return, jump to a different chain, accept or drop the packet) or can perform actions, such as logging, rejecting a packet, etc.
Statements exist in two kinds. Terminal statements unconditionally terminate evaluation of the current rule, non-terminal statements either only conditionally or never terminate evaluation of the current rule, in other words, they are passive from the ruleset evaluation perspective. There can be an arbitrary amount of non-terminal statements in a rule, but only a single terminal statement as the final statement.
VERDICT STATEMENT
The verdict statement alters control flow in the ruleset and issues policy decisions for packets.
accept and drop are absolute verdicts — they terminate ruleset evaluation immediately.
Using verdict statements.
# process packets from eth0 and the internal network in from_lan
# chain, drop all packets from eth0 with different source addresses.
filter input iif eth0 ip saddr 192.168.0.0/24 jump from_lan
filter input iif eth0 drop
PAYLOAD STATEMENT
payload_expression set value
The payload statement alters packet content. It can be used for example to set ip DSCP (diffserv) header field or ipv6 flow labels.
route some packets instead of bridging.
Set IPv4 DSCP header field.
EXTENSION HEADER STATEMENT
extension_header_expression set value
The extension header statement alters packet content in variable-sized headers. This can currently be used to alter the TCP Maximum segment size of packets, similar to TCPMSS.
change tcp mss.
tcp flags syn tcp option maxseg size set 1360
# set a size based on route information:
tcp flags syn tcp option maxseg size set rt mtu
LOG STATEMENT
The log statement enables logging of matching packets. When this statement is used from a rule, the Linux kernel will print some information on all matching packets, such as header fields, via the kernel log (where it can be read with dmesg(1) or read in the syslog).
In the third form of invocation (if level audit is specified), the Linux kernel writes a message into the audit buffer suitably formatted for reading with auditd. Therefore no further formatting options (such as prefix or flags) are allowed in this mode.
This is a non-terminating statement, so the rule evaluation continues after the packet is logged.
Table 57. log statement options
Using log statement.
# log the UID which generated the packet and ip options
ip filter output log flags skuid flags ip options
# log the tcp sequence numbers and tcp options from the TCP packet
ip filter output log flags tcp sequence,options
# enable all supported log flags
ip6 filter output log flags all
REJECT STATEMENT
Table 59. different ICMP reject variants are meant for use in different table families
For a description of the different types and a list of supported keywords refer to DATA TYPES section above. The common default reject value is port-unreachable.
Note that in bridge family, reject statement is only allowed in base chains which hook into input or prerouting.
COUNTER STATEMENT
A counter statement sets the hit count of packets along with the number of bytes.
CONNTRACK STATEMENT
The conntrack statement can be used to set the conntrack mark and conntrack labels.
Table 60. Conntrack statement types
save packet nfmark in conntrack.
ct mark set meta mark
set zone mapped via interface.
restrict events reported by ctnetlink.
ct event set new,related,destroy
META STATEMENT
A meta statement sets the value of a meta expression. The existing meta fields are: priority, mark, pkttype, nftrace.
A meta statement sets meta data associated with a packet.
Table 61. Meta statement types
LIMIT STATEMENT
A limit statement matches at a limited rate using a token bucket filter. A rule using this statement will match until this limit is reached. It can be used in combination with the log statement to give limited logging. The optional over keyword makes it match over the specified rate.
Table 62. limit statement values
NAT STATEMENTS
The nat statements are only valid from nat chain types.
The snat and masquerade statements specify that the source address of the packet should be modified. While snat is only valid in the postrouting and input chains, masquerade makes sense only in postrouting. The dnat and redirect statements are only valid in the prerouting and output chains, they specify that the destination address of the packet should be modified. You can use non-base chains which are called from base chains of nat chain type too. All future packets in this connection will also be mangled, and rules should cease being examined.
The masquerade statement is a special form of snat which always uses the outgoing interface’s IP address to translate to. It is particularly useful on gateways with dynamic (public) IP addresses.
The redirect statement is a special form of dnat which always translates the destination address to the local host’s one. It comes in handy if one only wants to alter the destination port of incoming traffic on different interfaces.
When used in the inet family (available with kernel 5.2), the dnat and snat statements require the use of the ip and ip6 keyword in case an address is provided, see the examples below.
Before kernel 4.18 nat statements require both prerouting and postrouting base chains to be present since otherwise packets on the return path won’t be seen by netfilter and therefore no reverse translation will take place.
Table 63. NAT statement values
Table 64. NAT statement flags
Using NAT statements.
TPROXY STATEMENT
Tproxy redirects the packet to a local socket without changing the packet header in any way. If any of the arguments is missing the data of the incoming packet is used as parameter. Tproxy matching requires another rule that ensures the presence of transport protocol header is specified.
This syntax can be used in ip/ip6 tables where network layer protocol is obvious. Either IP address or port can be specified, but at least one of them is necessary.
This syntax can be used in inet tables. The ip/ip6 parameter defines the family the rule will match. The address parameter must be of this family. When only port is defined, the address family should not be specified. In this case the rule will match for both families.
Example ruleset for tproxy statement.
SYNPROXY STATEMENT
This statement will process TCP three-way-handshake parallel in netfilter context to protect either local or backend system. This statement requires connection tracking because sequence numbers need to be translated.
Table 66. synproxy statement attributes
Table 67. synproxy statement flags
Example ruleset for synproxy statement.
FLOW STATEMENT
A flow statement allows us to select what flows you want to accelerate forwarding through layer 3 network stack bypass. You have to specify the flowtable name where you want to offload this flow.
QUEUE STATEMENT
Table 68. queue statement values
Table 69. queue statement flags
DUP STATEMENT
The dup statement is used to duplicate a packet and send the copy to a different destination.
dup to device
dup to address device device
Table 70. Dup statement values
Using the dup statement.
FWD STATEMENT
The fwd statement is used to redirect a raw packet to another interface. It is only available in the netdev family ingress hook. It is similar to the dup statement except that no copy is made.
fwd to device
SET STATEMENT
The set statement is used to dynamically add or update elements in a set from the packet path. The set setname must already exist in the given table and must have been created with one or both of the dynamic and the timeout flags. The dynamic flag is required if the set statement expression includes a stateful object. The timeout flag is implied if the set is created with a timeout, and is required if the set statement updates elements, rather than adding them. Furthermore, these sets should specify both a maximum set size (to prevent memory exhaustion), and their elements should have a timeout (so their number will not grow indefinitely) either from the set definition or from the statement that adds or updates them. The set statement can be used to e.g. create dynamic blacklists.
Example for simple blacklist.
MAP STATEMENT
The map statement is used to lookup data based on some specific input key.
The key is a value returned by expression.
Using the map statement.
VMAP STATEMENT
The verdict map (vmap) statement works analogous to the map statement, but contains verdicts as values.
Using the vmap statement.
Testing your rule
% ping -c .8.8.8
PING .8.8.8 .8.8.8 bytes of data.
bytes from .8.8.8: .31 ms
Then, if we list the rule-set, we obtain:
% nft -nn list table filter
table ip filter
chain input
filter hook input priority
chain output
filter hook output priority
ip daddr .8.8.8 counter packets bytes
tcp dport counter packets bytes
Note that the counters have been updated.
Simple IP/IPv6 Firewall
Expressions represent values, either constants like network addresses, port numbers, etc., or data gathered from the packet during ruleset evaluation. Expressions can be combined using binary, logical, relational and other types of expressions to form complex or relational (match) expressions. They are also used as arguments to certain types of operations, like NAT, packet marking etc.
Each expression has a data type, which determines the size, parsing and representation of symbolic values and type compatibility with other expressions.
DESCRIBE COMMAND
The describe command shows information about the type of an expression and its data type. A data type may also be given, in which nft will display more information about the type.
The describe command.
$ nft describe tcp flags
payload expression, datatype tcp_flag (TCP flag) (basetype bitmask, integer), 8 bits
predefined symbolic constants:
fin 0x01
syn 0x02
rst 0x04
psh 0x08
ack 0x10
urg 0x20
ecn 0x40
cwr 0x80
