/ #linux 

Міграція з iptables на nftables

nftables - типовий і рекомендований фреймворк брандмауера в Debian (починаючи з Debian 10 Buster), який замінює старі інструменти iptables (і пов’язані з ними).

Спробуємо мігрувати старі правила для iptables (https://bender.kr.ua/howto-lemp-install/ - див. 2.1) на nftables.

Спочатку активуємо сервіс nftables:

systemctl enable nftables

Зберігаємо існуючі правила з iptables:

iptables-save > iptables.rules

і транслюємо їх у правила nftables:

iptables-restore-translate -f iptables.rules > nftables.rules

Результатом буде список правил в файлі nftables.rules:

add table ip filter
add chain ip filter INPUT { type filter hook input priority 0; policy accept; }
add chain ip filter FORWARD { type filter hook forward priority 0; policy accept; }
add chain ip filter OUTPUT { type filter hook output priority 0; policy accept; }
add rule ip filter INPUT iifname "lo" counter accept
add rule ip filter INPUT iifname != "lo" ip daddr 127.0.0.0/8 counter reject
add rule ip filter INPUT ct state related,established  counter accept
add rule ip filter OUTPUT counter accept
add rule ip filter INPUT tcp dport 80 counter accept
add rule ip filter INPUT tcp dport 443 counter accept
add rule ip filter INPUT ct state new  tcp dport 22 counter accept
add rule ip filter INPUT icmp type echo-request counter accept
add rule ip filter INPUT limit rate 5/minute burst 5 packets counter log prefix "iptables denied: " level debug
add rule ip filter INPUT counter reject
add rule ip filter FORWARD counter reject

Завантажуємо правила в nftables і перевіряємо результат:

nft -f nftables.rules
nft list ruleset
table inet filter {
	chain INPUT {
		type filter hook input priority filter; policy accept;
		iifname "lo" counter packets 0 bytes 0 accept
		iifname != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 reject
		ct state established,related counter packets 0 bytes 0 accept
		tcp dport 80 counter packets 0 bytes 0 accept
		tcp dport 443 counter packets 0 bytes 0 accept
		ct state new tcp dport 22 counter packets 0 bytes 0 accept
		icmp type echo-request counter packets 0 bytes 0 accept
		limit rate 5/minute counter packets 0 bytes 0 log prefix "iptables denied: " level debug
		counter packets 0 bytes 0 reject
	}

	chain FORWARD {
		type filter hook forward priority filter; policy accept;
		counter packets 0 bytes 0 reject
	}

	chain OUTPUT {
		type filter hook output priority filter; policy accept;
		counter packets 0 bytes 0 accept
	}
}

Цей результат треба додати до конфігурації /etc/nftables.conf:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy accept;
        iifname "lo" counter packets 0 bytes 0 accept
        iifname != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 reject
        ct state established,related counter packets 0 bytes 0 accept
        tcp dport 80 counter packets 0 bytes 0 accept
        tcp dport 443 counter packets 0 bytes 0 accept
        ct state new tcp dport 22 counter packets 0 bytes 0 accept
        icmp type echo-request counter packets 0 bytes 0 accept
        limit rate 5/minute counter packets 0 bytes 0 log prefix "iptables denied: " level debug
        counter packets 0 bytes 0 reject
    }

    chain forward {
        type filter hook forward priority 0; policy accept;
        counter packets 0 bytes 0 reject
    }

    chain output {
        type filter hook output priority 0; policy accept;
        counter packets 0 bytes 0 accept
    }
}

Після рестарту служби nftables (або після ребуту сервера) існуючий набір правил буде очищено, а нові правила брандмауера - завантажені.

Посилання

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.