ืืืืจ ืฉื ื ืฉื ืคืืชืื
ืจืืช ืืงืจื ื ืืกืคืงืช ืจืง ืืืฉืง ืื ืจื ืืืชื ืชืืื ืืคืจืืืืงืื ืืืกืคืง ืคืื ืงืฆืืืช ืืกืืกืืืช ืืืืืืฅ ื ืชืื ืื ืืื ืืช, ืืืฆืืข ืคืขืืืืช ื ืชืื ืื ืืืงืจืช ืืจืืื.
ืืืืืงืืช ืืกืื ืื ืขืฆืื ืืืืืคืืื ืืกืคืฆืืคืืื ืืคืจืืืืงืื ืืืจืืืื ืืชืื bytecode ืืืจืื ืืืฉืชืืฉ, ืืืืืจ ืืื ืงืื ืืืช ืื ื ืืขื ืืชืื ืืืืื ืืืืฆืขืืช ืืืฉืง Netlink ืืืืืฆืข ืืืืื ื ืืืจืืืืืืช ืืืืืืช ืืืืืืจื ืืช BPF (Berkeley Packet Filters). ืืืฉื ืื ืืืคืฉืจืช ืืืงืืื ืืฉืืขืืชืืช ืืช ืืืื ืงืื ืืกืื ืื ืืคืืขื ืืจืืช ืืงืจื ื ืืืืขืืืจ ืืช ืื ืืคืื ืงืฆืืืช ืฉื ืืืงื ื ืืชืื ืืืืืืื ืืขืืืื ืขื ืคืจืืืืงืืืื ืืืจืื ืืืฉืชืืฉ.
ืืืืืฉืื ืขืืงืจืืื:
- ืชืืืื ื-IPsec, ืืืืคืฉืจืช ืืชืืื ืฉื ืืชืืืืช ืื ืืจื ืขื ืกืื ืื ื, ืืืื ืืงืฉืช IPsec ืืชื SPI (ืืื ืืงืก ืคืจืืืจ ืืืืื). ืืืืืื,
... ipsec ื-ip saddr 192.168.1.0/24
... ipsec ื-spi 1-65536ืืื ืื, ื ืืชื ืืืืืง ืืื ืืกืืื ืขืืืจ ืืื ืืจืช IPsec. ืืืืืื, ืืื ืืืกืื ืชืขืืืจื ืฉืื ืืืืฆืขืืช IPSec:
... ืคืื ืืกื ื rt ipsec ืืกืจ ืืจืืื
- ืชืืืื ื-IGMP (Internet Group Management Protocol). ืืืืืื, ืืชื ืืืื ืืืฉืชืืฉ ืืืื ืืื ืืืืืง ืืงืฉืืช ื ืื ืกืืช ืืืืจืืช ืืงืืืฆืช IGMP
nft add rule netdev foo bar ืกืื igmp membership-query counter drop
- ืืคืฉืจืืช ืฉืืืืฉ ืืืฉืชื ืื ืืืืืจืช ืฉืจืฉืจืืืช ืืขืืจ (ืงืคืืฆื/ืืืื). ืืืืืื:
ืืืืืืจ dest = ber
ืืืกืฃ ืืื ip foo bar jump $dest - ืชืืืื ืืืกืืืช ืืืืืื ืืขืจืืืช ืืคืขืื (ืืืืขืช ืืฆืืข ืฉื ืืขืจืืช ืืืคืขืื) ืืืชืืกืก ืขื ืขืจืื TTL ืืืืชืจืช. ืืืืืื, ืืื ืืกืื ืื ืืช ืืืืืกืกืืช ืขื ืืขืจืืช ืืืคืขืื ืฉื ืืฉืืื, ืืชื ืืืื ืืืฉืชืืฉ ืืคืงืืื:
... meta mark set osf ttl ืืื ืฉื ืืคืช { "Linux" : 0x1,
"ืืืื ืืช": 0x2,
"MacOS": 0x3,
"ืื ืืืืข" : 0x0 }
... osf ttl ืืื ืขื ืืจืกื "Linux:4.20" - ืืืืืช ืืชืืื ืืื ืืชืืืช ื-ARP ืฉื ืืฉืืื ืืืื ืืชืืืช ื-IPv4 ืฉื ืืขืจืืช ืืืขื. ืืืืืื, ืืื ืืืืืื ืืช ืืืื ื ืฉื ืื ืืช ARP ืฉื ืฉืืื ืืืืชืืืช 192.168.2.1, ืืชื ืืืื ืืืฉืชืืฉ ืืืื ืืื:
table arp x {
ืฉืจืฉืจืช y {
ืกืื ืืกื ื ืงืื ืงืื ืื ืืกื ื; ืงืืืช ืืืื ืืืช;
arp saddr ip 192.168.2.1 ืื ืืช ืืื ื 1 ืืชืื 46
}
} - ืชืืืื ืืืขืืจืช ืืงืฉืืช ืฉืงืืฃ ืืืืฆืขืืช ืคืจืืงืกื (tproxy). ืืืืืื, ืืื ืืืคื ืืช ืฉืืืืช ืืืฆืืื 80 ืืืฆืืืช proxy 8080:
ืืืื ip x {
ืฉืจืฉืจืช y {
ืกืื ืืกื ื ืขืืืคืืช ื ืืชืื ืืจืืฉ -150; ืงืืืช ืืืื ืืืช;
tcp dport 80 tproxy ื:8080
}
} - ืชืืืื ืืกืืืื ืฉืงืขืื ืขื ืืืืืช ืืืฉืื ืขืื ืืช ืกืืื ืืกื ืืืืฆืขืืช setsockopt() ืืืฆื SO_MARK. ืืืืืื:
ืืืื inet x {
ืฉืจืฉืจืช y {
ืกืื ืืกื ื ืขืืืคืืช ื ืืชืื ืืจืืฉ -150; ืงืืืช ืืืื ืืืช;
tcp dport 8080 ืกืืื ืกื ืฉืงืข ืกืืื
}
} - ืชืืืื ืืฆืืื ืฉืืืช ืืงืกื ืขืืืคืืช ืขืืืจ ืจืฉืชืืช. ืืืืืื:
nft add chain ip x raw { type filter hook prerouting priority raw; }
nft add chain ip x filter { type filter hook prerouting priority filter; }
nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; } - ืชืืืื ืืชืืืืช SELinux (Secmark). ืืืืืื, ืืื ืืืืืืจ ืืช ืืชื "sshtag" ืืืงืฉืจ ืฉื SELinux, ืืชื ืืืื ืืืจืืฅ:
nft add secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"
ืืืืืจ ืืื ืืฉืชืืฉ ืืชืืืืช ืืื ืืืืืื:
nft add rule inet filter input tcp dport 22 meta secmark set "sshtag"
nft ืืืกืฃ ืืคื inet filter secmapping { ืกืื inet_service: secmark; }
nft add element inet filter secmapping { 22 : "sshtag" }
nft add rule inet filter input meta secmark set tcp dport map @secmapping - ืืืืืช ืืฆืืื ืืฆืืืืช ืฉืืืงืฆื ืืคืจืืืืงืืืื ืืฆืืจืช ืืงืกื, ืืคื ืฉืื ืืืืืจืื ืืงืืืฅ /etc/services. ืืืืืื:
nft add rule xy tcp dport "ssh"
ืขืจืืช ืืืงืื ืจืฉืืืช nft -l
ืืืื x {
ืฉืจืฉืจืช y {
...
tcp dport "ssh"
}
} - ืืืืืช ืืืืืง ืืช ืกืื ืืืฉืง ืืจืฉืช. ืืืืืื:
ืืืกืฃ ืืื inet raw prerouting meta iifkind "vrf" accept
- ืชืืืื ืืฉืืคืจืช ืืขืืืื ืืื ืื ืฉื ืชืืื ืืกื ืขื ืืื ืฆืืื ืืคืืจืฉ ืฉื ืืืื "ืืื ืื". ืืืืืื, ืืื ืืขืืื ืืช ืกื "s" ืืื ืืืืกืืฃ ืืช ืืชืืืช ืืืงืืจ ืืืืคืก ืืช ืืขืจื ืื ืืื ืื ืืช ืืืฉื 30 ืฉื ืืืช:
ืืืกืฃ ืืืื x
ืืืกืฃ set xs { ืกืื ipv4_addr; ืืืื 128; ืคืกืง ืืื ืืฉื ืืช ื-30; ืืืืื ืืื ืืืื; }
ืืืกืฃ ืฉืจืฉืจืช xy { ืกืื ืืกื ื ืืืง ืขืืืคืืช ืงืื 0; }
ืืืกืฃ ืืื xy update @s { ip saddr } - ืืืืืช ืืืืืืจ ืชื ืื ืคืกืง ืืื ื ืคืจื. ืืืืืื, ืืื ืืขืงืืฃ ืืช ืคืกืง ืืืื ืืืืืืจ ืืืจืืจืช ืืืื ืขืืืจ ืื ืืช ืืืืืขืืช ืืืฆืืื 8888, ืืชื ืืืื ืืฆืืื:
ืืกื ื IP ืฉื ืืืื {
ct timeout aggressive-tcp {
ืคืจืืืืงืื tcp;
l3proto ip;
ืืืื ืืืช = {ืงืืืข: 100, close_wait: 4, ืกืืืจ: 4}
}
ืคืื ืฉืจืฉืจืช {
...
tcp dport 8888 ct timeout set "aggressive-tcp"
}
} - ืชืืืืช NAT ืืืฉืคืืช inet:
table inet nat {
...
ip6 daddr dead::2::1 dnat to dead:2::99
} - ืืืืื ืขื ืฉืืืืืช ืืงืืื ืืฉืืคืจ:
ืืืืงืช ืืกื ื ืฉืจืฉืจืช ืืืืกืืฃ nft
ืฉืืืื: ืืื ืงืืืฅ ืื ืกืคืจืืื ืืืื; ืืื ืืชืืืื ืช ื"ืืกื ื" ืืืืื ื-IP ืืฉืคืืชื?
ืืืกืฃ ืืืืงืช ืืกื ื ืฉืจืฉืจืช
^^^^^^ - ืืืืืช ืืฆืืื ืฉืืืช ืืืฉืงืื ืืกืืื:
set sc {
ืืงืื inet_service . ifname
ืืืื ืืื = { "ssh" . "eth0" }
} - ืชืืืืจ ืืืื ืืืืช ืืจืืื ืืขืืืื:
nft ืืืกืฃ ืืืื x
nft add flowtable x ft { Hook ingress priority 0; ืืืฉืืจืื = { eth0, wlan0 }; }
...
nft add rule x forward ip protocol { tcp, udp } flow add @ft - ืชืืืืช JSON ืืฉืืคืจืช.
ืืงืืจ: OpenNet.ru