Команда в iptables:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j DROPаналог в nftables:
nft add rule ip filter INPUT iifname "eth0" tcp dport 80 counter dropУстановка
в debian стоит по умолчанию
apt install nftables -yСинтаксис командной строки
Конечно, вводить многострочные конструкции в командной строке неудобно. Поэтому для управления файерволом используется обычный синтаксис примерно такого вида:
nft <команда> <объект> <путь к объекту> <параметры>- Команда — add, insert, delete, replace, rename, list, flush…
- Объект — table, chain, rule, set, ruleset…
Путь к объекту зависит от типа. Например, у таблицы это <семейство> <название>.
У правила — гораздо длиннее: <семейство таблицы> <название таблицы> <название цепочки>. А иногда ещё добавляются handle или index. Параметры зависят от типа объекта. Для правила это условие отбора пакетов и действие, применяемое к отобранным пакетам.
Настройка
# Создание таблицы с названием chell ( она будет называться ip chell )
nft add table chell
# Создание цепочки "chell2" внутрь таблицы "table"
nft add chain ip chell chell2 '{type filter hook input priority 0; policy accept;}'
# Добавление правила
nft add rule ip chell chell2 tcp dport ssh accept
# Изменение chain'а
nft chain ip chell chell2 '{type filter hook input priority 0; policy drop;}'
# Разрешить фигню для ssh
nft add rule ip chell chell2 ct state related,established accept
# разрешаем пинговать
nft add rule ip chell chell2 icmp type echo-request accept
# nat
nft add table nat
nft add chain nat postrouting '{type nat hook postrouting priority 100;}'
nft add rule nat postrouting oifname "ens6" masqueradeПроброс портов
nft add chain nat prerouting '{ type nat hook prerouting priority 100; }'
nft add rule nat prerouting ip daddr 10.1.1.1 tcp dport { 8888 } dnat 10.2.2.2:9999Удаление
# ip chell - название таблицы
nft delete table ip chellПросмотр текущей конфигурации
nft list rulesetСохранения
Сохранение:
# flush rulset - нужен для обнуления конфига nft при загрузки
# если его не будет конфиг будет дописываться
echo "flush ruleset" > /etc/nftables.conf
nft -s list ruleset >> /etc/nftables.confПерезапуск:
service nftables restart
--or--
nft -f /etc/nftables.conf
Ссылка
Пример
table ip nat { chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "ens6" masquerade
}
chain input {
type filter hook input priority 100; policy drop;
tcp dport 22 accept
icmp type echo-request accept
ct state established,related accept
udp dport 323 accept
}
chain forward {
type filter hook forward priority 100; policy drop;
tcp dport { 20-21, 53, 80, 443, 2100-2200 } accept
udp dport { 20-21, 53, 80, 443, 2100-2200 } accept
ct state established,related accept
}
}