Nftables
-
Медіафайли у Вікісховищі
nftables — підсистема ядра Linux, що забезпечує фільтрацію і класифікацію мережевих пакетів / дейтаграм / кадрів. Включена в ядро, починаючи з версії 3.13, випущеної 19 січня 2014 року. Є проєктом із заміни фреймворків iptables, ip6tables, arptables, ebtables в мережевому екрані Netfilter. Шляхом об'єднання функціональності фреймворків, у nftables менше дублюється код при побудові правил для Netfilter і краща низькорівнева оптимізація. Станом на 26 квітня 2016 року перебуває в процесі розробки. У просторі користувача nftables налаштовується за допомогою утиліти nft.
Огляд
У пакетному фільтрі nftables уніфіковані інтерфейси фільтрації пакетів для IPv4, IPv6, ARP і мережевих мостів. У пакет nftables входять компоненти пакетного фільтра, що працюють в просторі користувача, в той час як на рівні ядра роботу забезпечує підсистема nf_tables, що входить до складу ядра Linux починаючи з випуску 3.13. На рівні ядра надається лише загальний інтерфейс, що не залежить від конкретного протоколу і надає базові функції вилучення даних з пакетів, виконання операцій з даними і управління потоком.
Безпосередньо правила фільтрації і специфічні для протоколів обробники компілюються у байткод в просторі користувача, після чого цей байткод завантажується в ядро за допомогою інтерфейсу Netlink і виконується в ядрі в спеціальній віртуальній машині, що нагадує BPF (Berkeley Packet Filters). Подібний підхід дозволяє значно скоротити розмір коду фільтрації, що працює на рівні ядра і винести всі функції розбору правил і логіки роботи з протоколами в простір користувача.
Синтаксис командного рядка nft
Синтаксис nft більше схожий на реальну граматику.
Наприклад, команда що блокує пакети які направляються за адресою 1.2.3.4:
nft add rule ip filter output ip daddr 1.2.3.4 drop
Синтаксис такої ж дії для iptables:
iptables -t filter -A OUTPUT -j DROP -d 1.2.3.4
Для забезпечення зворотної сумісності надається спеціальний прошарок, що дозволяє використовувати iptables/ip6tables поверх інфраструктури nftables.
Історія
Проєкт був вперше представлений на Netfilter Workshop 2008 Патріком Мак-Гарді з команди по розробці ядра Netfilter
Перший попередній реліз реалізації ядра і призначеного для користувача простору був представлений в березні 2009 року. Хоча інструмент був названий найбільшою зміною брандмауера Linux з моменту появи iptables у 2001 році, в той час він отримав мало освітлення в пресі.
У жовтні 2012 року, був запропонований прошарок сумісності з iptables і анонсоване можливе включення проєкту в основну гілку ядра. 16 жовтня 2013 року було відправлено запит на включення змін (pull request) в ядро Linux. 19 січня 2014 року nftables був включений в ядро Linux версії 3.13.
Зразок
Перевірити стан служби можна командою sudo systemctl status nftables.service
nftables може стартувати при запуску, для цього необхідно увімкнути сервіс sudo systemctl enable nftables.service
, при цьому усі правила будуть автоматично завантажуватись, при запуску системи, із файлу /etc/nftables.conf
Зразки файлів з налаштуваннями nftables.conf
можна переглянути тут
Мій файл виглядає приблизно так
#!/usr/sbin/nft -f flush ruleset # очищення попередніх правил # таблиця правил для ip_v4(ip) # якщо використати ip6 то таблиця буде для ip_v6 # для використання таблиці для обох протоколів треба вказати inet table ip filter { chain input { # ланцюжок для вхідних з'єднань type filter hook input priority filter; policy drop; # відкинути усі вхідні з'єднання окрім описаних нижче meta l4proto icmp limit rate 10/minute accept # дозволити icmp запити (10 за хвилину) інакше перейти далі meta l4proto icmp drop # відкинути icmp запити, інакше вони потраплять у наступне правило, а вони рахуються established і відповіді будуть дозволені ct state established,related accept # дозволити вже встановленні з'єднання iif "lo" accept # дозволити внутрішні з'єднання служб з локальною машиною ip saddr 172.16.10.0/24 tcp dport 22 accept # дозволити SSH з'єднання з локальної мережі 172.16.10.0/24 ip saddr 192.168.200.0/24 tcp dport 22 accept # дозволити SSH з'єднання з локальної мережі 192.168.200.0/24 tcp dport 22 drop # заборонити з'єднання по SSH tcp dport 80 accept # дозволити http } chain forward { # ланцюжок для прохідних з'єднань type filter hook forward priority filter; policy drop; # заборонити прохідні з'єднання, оскільки машина не використовується як роутер або комутатор https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_home_router } chain output { # ланцюжок для вихідних з'єднань type filter hook output priority filter; policy accept; # дозволити вихідні з'єднання } }
Зміни внесені у файл потрібно передати у службу nft -f /etc/nftables.conf
Щоб переглянути поточні правила використайте команду nft list ruleset
Примітки
Посилання
- Офіційний сайт
|