sdr77
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору я все-таки решил освоить собачий язык самоновейшего linux фаерволла nftables. делать буду /etc/nftables.conf для атомарного применения, без интерактивных режимов. начал с первого примера https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_home_router получилось вот что: Код: #!/usr/sbin/nft -f flush ruleset define IF_LAN = eth1 define IF_INET = eth0 define NET_LAN = 10.2.4.0/24 table ip global { chain in_inet { icmp type echo-request limit rate 3/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : accept, tcp . 53 : accept, udp . 123 : accept } } chain out_inet { icmp type echo-request limit rate 5/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : accept, tcp . 53 : accept, udp . 123 : accept } } chain in_lan { icmp type echo-request limit rate 5/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : accept, tcp . 53 : accept, udp . 67 : accept, udp . 123 : accept } } chain out_lan { icmp type echo-request limit rate 5/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : accept, tcp . 53 : accept, udp . 67 : accept, udp . 123 : accept } } chain inbound { type filter hook input priority 0; policy drop; # Allow traffic from established and related packets, drop invalid ct state vmap { established : accept, related : accept, invalid : drop } # allow loopback traffic, anything else jump to chain for further evaluation iifname vmap { lo : accept, $IF_INET : jump in_inet, $IF_LAN : jump in_lan } # the rest is dropped by the above policy log prefix "[nftables] in drop: " counter drop } chain outbound { type filter hook output priority 0; policy drop; ct state vmap { established : accept, related : accept, invalid : drop } oifname vmap { lo : accept, $IF_INET : jump out_inet, $IF_LAN : jump out_lan } # the rest is dropped by the above policy log prefix "[nftables] out drop: " counter drop } chain forward { type filter hook forward priority 0; policy drop; # Allow traffic from established and related packets, drop invalid ct state vmap { established : accept, related : accept, invalid : drop } # connections from the internal net to the internet or to other # internal nets are allowed iifname $IF_LAN accept # the rest is dropped by the above policy } chain postrouting { type nat hook postrouting priority 100; policy accept; # masquerade private IP addresses ip saddr $NET_LAN oifname $IF_INET masquerade } } | это первый рабочий вариант. а потом я решил закрутить гайки - DNS запросы имеют право делать только процессы с UID = bind, синхронизировать время - только UID = ntp, потом будут squid, tor, и т.д. далее только измененные части: Код: ... chain o_uid_bind { type filter hook output priority 0; policy drop; meta skuid bind accept } chain o_uid_ntp { type filter hook output priority 0; policy drop; meta skuid ntp accept } ... chain out_inet { icmp type echo-request limit rate 5/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : jump o_uid_bind, tcp . 53 : jump o_uid_bind, udp . 123 : jump o_uid_ntp } } ... chain out_lan { icmp type echo-request limit rate 5/second accept ip protocol . th dport vmap { tcp . 22 : accept, udp . 53 : jump o_uid_bind, tcp . 53 : jump o_uid_bind, udp . 67 : accept, udp . 123 : jump o_uid_ntp, } ... | натравливаю на проект правил nft -c -v -f /etc/nftables.conf.new и получаю отлуп: /etc/nftables.conf.new:38:33-5: Error: Could not process rule: Operation not supported ip protocol . th dport vmap { /etc/nftables.conf.new:59:33-5: Error: Could not process rule: Operation not supported ip protocol . th dport vmap { чего ему надо ? "jump xxx_chain" изнутри vmap - совершенно законная операция или я не так понял ? отказываться от vmap очень не хочется. |