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