Загрузка данных


# nft add table inet my_filter
# nft add chain inet my_filter my_input '{ type filter hook input priority 0; policy
reject }'
# nft add rule inet my_filter my_input 'tcp dport ssh accept'




#Таблицатипаinet(IPv4/IPv6),названнаяcustom_filter.
#ПосколькуПО,полагающеесянаiptables-nft,достаточночастоконфликтует # с таблицами с предопределенными в iptables именами, по возможности не
#стоитназыватьихinput,output,forwardидругимиименамиизiptables. table inet custom_filter {
#Цепочкаправилсименемpublic.Кнейможетбытьсовершенпрыжокиз # другой цепочки. Правила внутри цепочки состоят из набора условий и # выполняемого действия. Условие может быть пустым, тогда действие
#станетбезусловным. chain public {
#TCP-соединениянавходящийпорт10001принимаются. tcp dport 10001 accept
#TCP-соединенияпринимаютсянапортслужбыSSH(22).nftables # имеет предопределенные имена для некоторых базовых служб. tcp dport ssh accept





# Пакет не был обработан ни одним из условных действий выше, # отклоним его с посылкой обратно информационного ICMP-пакета
# типа Destination Port Unreachable. В случае inet или ip6-цепочек # можно задать собственный тип посылаемого сообщения.
reject
}
chain locals {
# UDP-трафик на порт 20001 отбрасывается. udp dport 20001 drop
# Принимаются UDP-пакеты с source-портом 68 на destination-порт # 67 и адресом назначения 255.255.255.255 (это сигнатура DHCP). udp sport 68 udp dport 67 ip daddr 255.255.255.255 accept
# Вернемся в цепочку, из которой был произведен вызов. return
}
chain input {
# Цепочка регистрируется как фильтр входного трафик с приоритетом 0; # при ненахождении нужного правила трафик отклоняется с посылкой
# в ответ ICMP-пакета.
type filter hook input priority 0; policy reject;
# Примем пакеты от соединений, имеющих conntrack-состояние ESTABLISHED # или RELATED. Отбросим трафик от соединений, которые невозможно
# идентифицировать.
# Существует четыре conntrack-типа:
# + NEW (соединение открыто, для TCP это первый SYN-пакет)
# + ESTABLISHED (соединение открыто и на него получен ответ, для TCP # это время получения SYN-ACK);
# + RELATED (соединение связано с одним из ESTABLISHED). Например, # это может быть ICMP-ответ, относящийся к установленному
# TCP-соединению.
# + INVALID (пакет/соединение не идентифицированы). Такой трафик, как # правило, отбрасывается.
ct state { established, related } accept ct state invalid drop
# Примем входящий трафик с loopback-интерфейса. iif lo accept
# Примем IP-трафик по протоколам ICMP/IGMP. ip protocol icmp accept
ip protocol igmp accept
# Примем IPv6-трафик, в заголовках которого указано, что это ICMPv6. ip6 nexthdr icmpv6 accept
# При получении IPv4-трафика из подсети 172.16.0.0/12 прыгнем в # цепочку locals.
ip saddr 172.16.0.0/12 jump locals
# При получении трафика с интерфейсов с именами uni0 и br0 сделаем # прыжок в цепочку public. При использовании iifname/oifname вместо # iif/oif в условиях интерфейс может не существовать (удобно с
# временными сетевыми интерфейсами), но условия с iif/oif работают # быстрее.
iifname { uni0, br0 } jump public
}
chain forward {
# Цепочка для пересылки трафика. По умолчанию трафик, который нужно # переслать, дропается.
type filter hook forward priority 0; policy drop;
# Примем трафик, идущий на выход с br0 и входящий с 172.16.0.0/12 # (полезно при организации роутера с SNAT).
oifname br0 ip saddr 172.16.0.0/12 accept
# Примем трафик, пришедший на br0, от уже установленных соединений. iifname br0 ct state { established, related } accept
}
chain output {
# Разрешим весь исходящий трафик.