flip:linux:nftables
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| flip:linux:nftables [2024/12/25 09:40] – flip | flip:linux:nftables [2024/12/25 10:49] (текущий) – flip | ||
|---|---|---|---|
| Строка 4: | Строка 4: | ||
| В некоторых дистрибутивах уже установлен, | В некоторых дистрибутивах уже установлен, | ||
| - | Установка пакета nftables | + | |
| + | ==== Установка пакета nftables | ||
| < | < | ||
| Строка 10: | Строка 11: | ||
| </ | </ | ||
| - | Запуск nftables при загрузке | + | |
| + | ==== Запуск nftables при загрузке | ||
| < | < | ||
| systemctl enable nftables.service | systemctl enable nftables.service | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ==== Файл настроек ==== | ||
| По умолчанию, | По умолчанию, | ||
| Строка 20: | Строка 25: | ||
| > | > | ||
| - | Сбросить все правила в nftables, и остановить фильтрацию | + | Содержание: |
| + | |||
| + | < | ||
| + | # | ||
| + | |||
| + | flush ruleset | ||
| + | |||
| + | table inet filter { | ||
| + | chain input { | ||
| + | type filter hook input priority filter; | ||
| + | } | ||
| + | chain forward { | ||
| + | type filter hook forward priority filter; | ||
| + | } | ||
| + | chain output { | ||
| + | type filter hook output priority filter; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Просмотр текущих правил nftables ==== | ||
| + | |||
| + | < | ||
| + | nft list ruleset | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Удалить правило ==== | ||
| + | |||
| + | Каждое правило при добавлении получает свой номер (**handle**). \\ | ||
| + | Чтобы посмотреть эти номера нужно использовать ключ -a | ||
| + | |||
| + | < | ||
| + | nft -a list ruleset | ||
| + | </ | ||
| + | |||
| + | И затем можно удалить правило по его номеру, | ||
| + | |||
| + | < | ||
| + | nft delete rule inet filter input handle 2 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Сохранить конфигурацию ==== | ||
| + | |||
| + | < | ||
| + | echo '# | ||
| + | echo 'flush ruleset' | ||
| + | nft list ruleset >> / | ||
| + | </ | ||
| + | |||
| + | После сохранения перезапустить nftables | ||
| + | |||
| + | < | ||
| + | systemctl restart nftables | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Сбросить все правила в nftables, и остановить фильтрацию | ||
| < | < | ||
| Строка 26: | Строка 90: | ||
| </ | </ | ||
| - | Предотвратить запуск nftables при загрузке | + | |
| + | ==== Предотвратить запуск nftables при загрузке | ||
| < | < | ||
| Строка 32: | Строка 97: | ||
| </ | </ | ||
| - | Удалить пакет nftables и все его следы в системе | + | |
| + | ==== Удалить пакет nftables и все его следы в системе | ||
| < | < | ||
| Строка 40: | Строка 106: | ||
| ===== Синтаксис ===== | ===== Синтаксис ===== | ||
| + | |||
| + | >**nft < | ||
| + | |||
| + | Команда — add, insert, delete, replace, rename, list, flush… \\ | ||
| + | Объект — table, chain, rule, set, ruleset… \\ | ||
| + | Путь к объекту зависит от типа. Например, | ||
| + | У правила — гораздо длиннее: | ||
| + | Параметры зависят от типа объекта. Для правила это условие отбора пакетов и действие, | ||
| Создать базовую таблицу IPv4 | Создать базовую таблицу IPv4 | ||
| Строка 110: | Строка 184: | ||
| ===== Структура ===== | ===== Структура ===== | ||
| - | Список таблиц | + | |
| + | ==== Список таблиц | ||
| * **filter** — здесь пакеты фильтруются, | * **filter** — здесь пакеты фильтруются, | ||
| Строка 124: | Строка 199: | ||
| * Содержит цепочки: | * Содержит цепочки: | ||
| + | Таблицы могут быть одного из 6-ти семейств (families): | ||
| + | |||
| + | * **ip** — для обработки пакетов IPv4 | ||
| + | * **ip6** — IPv6 | ||
| + | * **inet** — обрабатывает сразу и IPv4 и IPv6 (чтобы не дублировать одинаковые правила) | ||
| + | * **arp** — пакеты протокола ARP | ||
| + | * **bridge** — пакеты, | ||
| + | * **netdev** — для обработки «сырых» данных, | ||
| + | |||
| + | |||
| + | ==== Прохождение цепочки ==== | ||
| + | |||
| + | Пакет, попавший в цепочку, | ||
| + | |||
| + | * **drop** — пакет будет уничтожен; | ||
| + | * **accept** — пакет сразу же покинет эту цепочку и пойдет дальше, | ||
| + | |||
| + | А если фаервол не найдет в данной цепочке подходящего правила для пакета, | ||
| + | |||
| + | |||
| + | ==== Для создания правил ==== | ||
| + | |||
| + | * **ip saddr < | ||
| + | * **ip daddr < | ||
| + | * **tcp sport < | ||
| + | * **tcp dport < | ||
| + | * **udp sport < | ||
| + | * **udp dport < | ||
| + | * **iifname <имя интерфейса> | ||
| + | * **oifname <имя интерфейса> | ||
| + | |||
| + | * **counter** - счетчик пакетов | ||
| + | |||
| + | **Connection tracking** — это модуль, | ||
| + | |||
| + | * **new** — пакет устанавливает новое соединение; | ||
| + | * **estableshed** — пакет является частью существующего соединения (например ответ на ping или ответ на http запрос); | ||
| + | * **related** — пакет является частью связанного соединения. Например, | ||
| + | * **invalid** — пакет не является частью каких-либо соединений в таблице connection tracking. | ||
| + | |||
| + | **Смена политик** | ||
| + | |||
| + | * **nft add chain < | ||
| + | * **nft add chain < | ||
| + | |||
| + | |||
| + | ===== Примеры ===== | ||
| + | |||
| + | |||
| + | ==== Разрешить все подключения к loopback ==== | ||
| + | |||
| + | Интерфейс **lo** | ||
| + | |||
| + | < | ||
| + | nft add rule inet filter input iifname lo counter accept | ||
| + | </ | ||
| + | |||
| + | ==== Разрешить ssh с определенного IP ==== | ||
| + | |||
| + | Интерфейс **eth0** | ||
| + | |||
| + | < | ||
| + | nft add rule inet filter input iifname eth0 ip saddr 192.168.0.2 tcp dport 22 counter accept | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Разрешить PING из подсети ==== | ||
| + | |||
| + | < | ||
| + | nft add rule inet filter input ip saddr 192.168.0.0/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Разрешить ответные соединения estableshed + related ==== | ||
| + | |||
| + | < | ||
| + | nft add rule inet filter input ct state established, | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Разрешить порты http, https (80, 443) ==== | ||
| + | |||
| + | < | ||
| + | nft add rule inet filter input tcp dport {80, 443} counter accept | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Смена политики цепочки input ==== | ||
| + | |||
| + | < | ||
| + | nft chain inet filter input { policy drop \; } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Ссылки ===== | ||
| + | |||
| + | * [[https:// | ||
flip/linux/nftables.1735119610.txt.gz · Последнее изменение: 2024/12/25 09:40 — flip
