ΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΡΠΈΠ»ΡΡΡ , ΡΠ°Π·Π²ΠΈΠ²Π°Π²Π°Ρ ΡΠ΅ ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° iptables, ip6tables, arptables ΠΈ ebtables, ΡΡΠ΅Π· ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° IPv4, IPv6, ARP ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΌΠΎΡΡΠΎΠ²Π΅. ΠΠ°ΠΊΠ΅ΡΡΡ nftables Π²ΠΊΠ»ΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΡΠΈΠ»ΡΡΡΠ° Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎΡΠΎ Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΎΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° nf_tables, Π½Π°Π»ΠΈΡΠ½Π° Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΠΎΡ Π²Π΅ΡΡΠΈΡ 3.13. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π²Π΅ΡΡΠΈΡ nftables 0.9.3 ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² Π±ΡΠ΄Π΅ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux 5.5.
ΠΠ° ΡΠ΄ΡΠΎΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ°ΠΌΠΎ ΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠΎΠ·ΠΈ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° Π² ΡΠ΄ΡΠΎΡΠΎ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Netlink ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π°ΡΠ° BPF (Berkeley Packet Filters). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅, ΡΠ°Π±ΠΎΡΠ΅Ρ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠ΅ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π°Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ ΠΈ Π΄Π°ΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΡΠ΅ Π²Π»Π΅Π·Π΅ Π² ΡΠΈΠ»Π°, ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π΄Π½ΠΈ ΠΎΡ ΡΠ΅Π΄ΠΌΠΈΡΠ°ΡΠ°. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΈ Π½ΠΎΠ²Π° ΠΎΠΏΡΠΈΡ β-Tβ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΅ΠΏΠΎΡ
Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π² ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
meta time \Β»2019-12-24 16:00\Β» β \Β»2020-01-02 7:00\Β»
meta hour \Β»17:00\Β» β \Β»19:00\Β»
meta day \Β»Fri\Β» - ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΅ΡΠΈΠΊΠ΅ΡΠΈ SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΏΠΈΡΡΡΠΈ map Π·Π° synproxy, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
ΡΠΈΠΏ ΡΠΈΠ»ΡΡΡ ΠΊΡΠΊΠ° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ raw; ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° accept;
tcp dport 8888 tcp ΡΠ»Π°Π³ΠΎΠ²Π΅ syn notrack
}chain bar {
ΡΠΈΠΏ ΡΠΈΠ»ΡΡΡ ΠΊΡΠΊΠ° Π½Π°ΠΏΡΠ΅Π΄ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΠΈΠ»ΡΡΡ; ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : Β«https-synproxyΒ», 192.168.2.0/24 : Β«other-synproxyΒ» }
}
} - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π½Π°Π±ΠΎΡΠΈ set ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ.
nft add rule β¦ delete @set5 { ip6 saddr . ip6 daddr }
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° VLAN ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΌΠΎΡΡ;
meta ibrpvid 100
meta ibrvproto vlan - ΠΠΏΡΠΈΡΡΠ° β-tβ (ββterseβ) Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π½Π°Π±ΠΎΡΠΈ set ΠΏΡΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° βnft -t list rulesetβ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ:
ΡΠ°Π±Π»ΠΈΡΠ° ip x {
set y {
type ipv4_addr
}
}Π ΠΏΡΠΈ βnft list rulesetβ
ΡΠ°Π±Π»ΠΈΡΠ° ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄Π½ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² Π²Π΅ΡΠΈΠ³ΠΈ netdev (ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Ρ ΡΠ΄ΡΠΎ 5.5) Π·Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ.
# nft describe ipv4_addr
datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° CLI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° linenoise Π²ΠΌΠ΅ΡΡΠΎ libreadline.
./configure βwith-cli=linenoise
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
