Міграція з 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 (або після ребуту сервера) існуючий набір правил буде очищено, а нові правила брандмауера - завантажені.