Вы можете пометить пакеты, которые будут приняты в качестве безопасной проводки в следующих цепочках одного и того же хука.
каждое правило принятия должно помечать пакет
Правила, выполняющие явный прием, должны помечать пакет непосредственно перед его принятием. Любое возникновение:
... принимать
следует заменить на:
... набор метаметок 0xf00 принять
Значение не имеет значения, если оно не равно 0, если нет другой роли для отметки.
каждая цепочка должна принимать помеченный пакет, так как это безопасное поведение
используя это правило в начале цепочки:
метаметка != 0 принять
Это общая идея. Адаптации и исключения все еще могут быть сделаны, если это имеет больше смысла.
Вот пересмотренный набор правил в соответствии с этим подходом. Оценка принимается после ct ... неверный дроп
правило, которое является важным правилом, которое не следует обходить (и на самом деле его можно было сделать в более ранней цепочке раз и навсегда, поскольку это правило удаления). Если ниже input является последней цепочкой в хуке filter/input, на самом деле нет необходимости помечать принятые пакеты, но это не помешает.
/etc/nftables.conf:
:
очистить набор правил
таблица инет фильтр {
счетчик input_ssh {}
установить my_admin_ipv4 {
введите ipv4_addr
интервал флагов
прилавок
элементы = {
10.0.0.0/8,
172.16.0.0/12,
192.168.0.0/16
}
}
цепочка ввода {
тип filter фильтр приоритета ввода хука; падение политики;
iifname lo набор метаметок 0x1 принять комментарий «Разрешить петлевой трафик»;
состояние ct установлено, набор связанных метаметок 0x1 принять комментарий «Разрешить установленные/связанные соединения»;
ct state недопустимый комментарий отбрасывания «Запретить недопустимые соединения»;
метаметка != 0 принять
# SSH
tcp dport ssh ip saddr @my_admin_ipv4 имя счетчика input_ssh метаметка set 0x1 принять комментарий «Разрешить IPv4 SSH от администратора»;
}
цепочка вперед {
type filter hook forward Priority 0; падение политики;
}
выход цепи {
type приоритет вывода обработчика фильтра 0; политика принять;
}
включить "/etc/nft/*.conf"
}
/etc/nft/http.conf
(заменены counter_nginx
с counter_http
). метаметка != 0 принять
правило, вероятно, здесь не нужно, так как другой цепочки может и не быть раньше, но это тоже не помешает.
счетчик input_http {}
цепочка http {
тип фильтра хука входного приоритета фильтра - 1; политика принять;
метаметка != 0 принять
# HTTP #
tcp dport {80,443} имя счетчика input_http набор метаметок 0x2 принять комментарий «Разрешить HTTP»;
}
Этот метод использует метки, поэтому его будет сложнее интегрировать с другими правилами брандмауэра, которые уже использовали метки для других целей. Это все еще возможно, зарезервировав несколько битов метки с помощью побитовых операций.